単語の切り出し GetWord() を実装しました。併せて単語帳の出力 PrintWordList() も追加しました。
実行結果は以下のようになります。一応、入力ファイル english.txt の単語を単語帳に格納して表示できるようになりましたが、まだ単語の重複があります。単語の前に表示されている番号は入力ファイルから探せるように行番号を表示しています。
【図10 単語帳プログラム v0.3 実行結果】
プログラムリストは以下の通りです。プログラムが長くなってきたので、[発行]の機能でウェブ上に公開しておきます。Small Basicの[インポート]ボタンを押して、プログラムID、LDG385を入力して[OK]を押せばインポートできます。
【リスト4 単語帳プログラム v0.3】
1 ‘単語帳プログラム WordList v0.3
2 ‘
3 ‘英文のテキストを入力ファイルとして開く。(Small Basicでは不要)
4 filename = “english.txt”
5 ‘行番号を初期化する。
6 lno = 1
7 ‘単語数を初期化する。
8 wno = 0
9 ‘入力ファイルから1行読み込む。
10 line = File.ReadLine(filename, lno)
11 ‘EOFになるまで以下のカッコ内を繰り返す。
12 While (line “”)
13 ‘{
14 ‘単語を切り出す。
15 GetSeparator()
16 GetWord()
17 ‘EOLになるまで以下のカッコ内を繰り返す。
18 While (word “”)
19 ‘{
20 ‘単語帳に切り出した単語を登録する。
21 AddWordList()
22 ‘単語を切り出す。
23 GetSeparator()
24 GetWord()
25 ‘}
26 EndWhile
27 ‘行番号をカウントアップする。
28 lno = lno + 1
29 ‘入力ファイルから1行読み込む。
30 line = File.ReadLine(filename, lno)
31 ‘}
32 EndWhile
33 ‘入力ファイルを閉じる。(Small Basicでは不要)
34 ‘単語帳を出力する。
35 PrintWordList()
36 ‘
37 ‘サブルーチン GetWord (単語を切り出す)
38 ‘input: line (行)
39 ‘work: c (文字)
40 ‘output: line (行)
41 ‘output: word (単語)
42 Sub GetWord
43 word = “”
44 While (line “”)
45 c = Text.GetSubText(line, 1, 1)
46 If (c = ” ” Or c = “\t” or c = “,” or c = “;” or c = “:” Or c = “.”) Then
47 goto endword
48 Else
49 line = Text.GetSubText(line, 2, Text.GetLength(line) – 1)
50 word = word + c
51 EndIf
52 EndWhile
53 endword:
54 TextWindow.WriteLine(“debug:” + lno + ” ” + word) ‘デバッグ出力
55 EndSub
56 ‘
57 ‘サブルーチン GetSeparator (区切りを切り出す)
58 ‘input: line (行)
59 ‘work: s (区切り)
60 ‘work: space (空白またはタブがあったか)
61 ‘output: line (行)
62 ‘output: separator (単語)
63 Sub GetSeparator
64 separator = “”
65 space = “False”
66 While (line “”)
67 s = Text.GetSubText(line, 1, 1)
68 While (s = ” ” Or s = “\t”)
69 line = Text.GetSubText(line, 2, Text.GetLength(line) – 1)
70 s = Text.GetSubText(line, 1, 1)
71 space = “True”
72 EndWhile
73 If (s = “,” or s = “;” or s = “:” Or s = “.”) Then
74 line = Text.GetSubText(line, 2, Text.GetLength(line) – 1)
75 separator = separator + s
76 Else
77 Goto endseparator
78 EndIf
79 EndWhile
80 endseparator:
81 If (separator = “” and space) Then
82 separator = ” ”
83 Endif
84 TextWindow.WriteLine(“debug:” + lno + “”) ‘デバッグ出力
85 EndSub
86 ‘
87 ‘サブルーチン AddWordList (単語帳に単語を登録する)
88 ‘input: word (単語)
89 ‘input: wordlist[] (単語帳: 単語)
90 ‘input: lnolist[] (単語帳: 行番号)
91 ‘input: wno (登録した単語数)
92 ‘output: wordlist[] (単語帳: 単語)
93 ‘output: lnolist[] (単語帳: 行番号)
94 ‘output: wno (登録した単語数)
95 Sub AddWordList
96 wno = wno + 1
97 wordlist[wno] = word
98 lnolist[wno] = lno
99 EndSub
100 ‘
101 ‘サブルーチン PrintWordList (単語帳を出力する)
102 ‘input: word (単語)
103 ‘work: i (単語帳の引数)
104 ‘input: wordlist[] (単語帳: 単語)
105 ‘input: lnolist[] (単語帳: 行番号)
106 ‘input: wno (登録した単語数)
107 Sub PrintWordList
108 For i = 1 To wno
109 TextWindow.WriteLine(lnolist[i] + ” ” + wordlist[i])
110 EndFor
111 EndSub
(つづく)