ファイル操作をしてみよう

簡単なファイルの操作について調べてみました。
サンプルとして最初に作った漢字辞書を使います。
お馬鹿な私は1度書けなかった漢字は次も書けないことが多いので同じ漢字を何度か調べることがあります。
1度調べたものは保存しておけば手間が省けます。


【1】仕様を決めます
Clearボタンを押すとTextBoxに書かれた文字を下のListBoxにコピーした後TextBoxを消去します
プログラム終了時にListBoxの内容を保存しておき、次回起動時に読み込んでListBoxに表示します
ListBoxの中の1つをクリックするとそれをTextBoxに表示します

【2】コントロールを配置します
TextBoxを1個、ListBoxを1個、ボタンを2個配置します
ファイルを扱うコントロールはデフォルトでは登録されていませんので、メニューからプロジェクト→コントロール→Microsot CE File System Control 3.0 をチェック
ツールボックスFileとFileSystemの2つのコントロールが現れるのでアイコンをクリックしてFormに2つを配置する
ボタンの1つはTextBoxの消去用、もう1つはListBoxの消去用なので解りやすいCaptionに変更する
TextBoxのプロパティーでFontは大きいサイズに変更します
こんな感じです


【3】Clearボタンが押された処理
Clearボタンが押されたらTextBoxに書かれた文字を下のListBoxにコピーした後TextBoxを消去します コピーする前にListBoxに同じものが無いか調べて、無ければ追加するようにします
ListBox内のアイテムの数を得るにはList1.ListCount、アイテムの文字列を得るにはList1.List(i)を使います
アイテムの追加は List1.AddItem を使って List1.AddItem="てすと" とすれば "てすと" という文字列が追加されます
fをフラグとして使ってこんな感じです
f=0
For i = 0 To List1.ListCount - 1
    If List1.List(i) = Text1.Text Then f = 1 '1個づつ調べていって同じものがあったらfに1を入れる
Next i
If f = 0 Then List1.AddItem Text1.Text 'fが0なら同じものはなかったということ
Text1.Text = "" 'TextBoxをクリアする

【4】ListClearボタンが押された処理
ListBox内のあるアイテムが選択されていればそれを1個消去、選択されていなければ全て消去するようにします
List1.ListIndexで選択されているアイテムがわかります、-1ならなにも選択されていません。1番上のアイテムの番号は1ではなく0です。
List1.RemoveItem (n) でn番目のアイテムを消去できます
List1.Clear で全てのアイテムが消去されます

If List1.ListIndex >= 0 Then 'アイテムが選択されている
    List1.RemoveItem (List1.ListIndex)
Else '選択されていない
    List1.Clear
End If

【5】ListBoxのアイテムが押された処理
ListBoxのアイテムが押されると List1_Click() が呼ばれるのでここに処理を書きます
List1.List(n)がListBox内のn番目のアイテムを表し
List1.ListIndexが現在選択されているアイテムの番号を表すので

Text1.Text = List1.List(List1.ListIndex)
となります

【6】ファイルを保存する処理
これはサブルーチンとして作成します、名前はSaveListとしました
ファイルを開くには File1.Open を使います。ファイルを操作する場合はFileオブジェクトをFormに配置しておかなければなりません
ここではデフォルトの名前のFile1のまま使っています。
引数は2つあり、第一引数はファイル名、第二引数はモードです
ファイル名はWindowsとは違ってフルパスで指定する必要があります。Windowsなら"Test.txt"と書けばプログラムと同じ場所に作られますが、CEではエラーになります。
そこで、プログラムの現在位置を知るためにApp.Pathを使って App.Path & "\RemKanji.txt" とすればプログラムと同じ位置にRemKanji.txtが作られます。
モードはInput (1), Output (2), Random (4), Append (8), or Binary (32) となっています
ここでは書き込みを行うので2を指定します。なお2でオープンすると、ファイルが存在しなければ作成され、存在すれば内容は消去されます
書き込みは File1.LinePrint で行います
File1に"てすと"と書き込みたいなら File1.LinePrint "てすと"となります
終わったら File1.Close としてファイルを閉じます

Private Sub SaveList()
Dim i

File1.Open App.Path & "\RemKanji.txt", 2 '書き込みモードでOPEN
For i = 0 To List1.ListCount - 1
    File1.LinePrint List1.List(i) 'ループで回してアイテム数だけ書き込む
Next i
File1.Close
End Sub

【7】ファイルを読み込む処理
これもサブルーチンとして作成します、名前はLoadListとしました
ファイルを開くには File1.Open を使います。
今度は読み込みを行うので1を指定します
読み込みは File1.LineInputString で行います
これはファイルの先頭から改行マークがあるまでを1行として読み込む命令で、続けると次の行が読み込まれます
読み込みの場合、存在しないファイルを開こうとするとエラーが出るので開く前にファイルが存在するかどうかをチェックしたほうが良いでしょう
これにはFileSystemコントロールを使います
FileSystem.Dir("pathname") でpathnameと一致するファイル名を返しますのでこれを使います。
一致するファイル名が無ければ""が返ってくるので、FileSystem1.Dir(App.Path & "\RemKanji.txt")として戻り値が""かどうかを調べれば良い訳です

Private Sub LoadList()
Dim s

s = FileSystem1.Dir(App.Path & "\RemKanji.txt")
If s <> "" Then ' ""でないならファイルは存在する
  List1.Clear
  File1.Open App.Path & "\RemKanji.txt", 1 '読み込みモードでOPEN
    Do Until File1.EOF
        List1.AddItem File1.LineInputString
    Loop
  File1.Close
End If
End Sub

【8】ファイルの読み込み、保存をするタイミング
ファイルの読み込みはプログラムが起動した時に行うのが良さそうです
Form_Load()の時にすることにします

Private Sub Form_Load()
  LoadList
End Sub

ファイルの保存はプログラムが終了する前に行うのがよさそうです
Form_OKClick()に終了コードが書いてあるので、その前に入れます

Private Sub Form_OKClick()
  SaveList
  App.End
End Sub

【9】全コード
テキストファイルです

【10】ソースファイル
ZIPファイルです

実行するとこんな感じです、ListBoxのアイテムを選択した直後です


VBTOPに戻る