【第16章】ファイルを使うプログラム(1)

 前章でお話したとおり、補助記憶装置を使うには、準備から使用後の跡片付けまで、すべてプログラムでやらなければなりません。ファイルへの読み書きの大まかな流れはこうなります。

(1)ファイルのOPEN(補助記憶装置を使う準備)
(2)ファイルの読み書き
(3)ファイルのCLOSE(後片付け)


【ファイルのOPEN】


ファイルの使用準備にはOPEN命令を使います。


      OPEN ファイルパス FOR 使用モード AS ファイル番号


ファイルパスは" "で囲みます(プログラム中ではストリングとして扱われます)
使用モードは

     OUTPUT ファィル新規作成するとき
     同じ名前のファイルがある場合、いったん内容がすべて消去されます。
     APPEND 既存のファイルへの追加書き込みするとき
     INPUT    ファイルの内容を読み込むとき


Tiny Basicで扱えるファイルは順編成ファイル(書き込んだ順にデータが並ぶ、並んでいる順にデータが読み込まれるファイル)で、ランダムな順での読み書き、書き込み読み込みを同時に行なうことはできません。使用モードは必ず1つ選ばなくてはなりません。
ファイルにはプログラム内での番号が振られ、以後プログラム内では、このファイル番号が使われます。ファイル番号は正の整数で指定します。ファイル番号の書き方は

            #正の整数

です。プログラム中では複数のファイルが使えます。筆者が今まで作ってきたプログラムで同時OPENは5つまで可能なことは確認しました(もっとたくさん使えるかもしれません)。


【ファイルの読み書き】

ファイルに書き込むにはPRINT命令、ファイルの内容を読み込むにはINPUT命令を使います。次のように書きます。



    PRINT #(ファイル番号),1レコード分の書き込み・・・・ファイルへの書き込み
     1件分の書き込みの部分は、画面への出力の場合と同じ書き方です。

    INPUT #(ファイル番号),変数_1,データ_2・・・・1レコード分の読み込み
     変数の型は、1レコード中のアイテムと一致させる必要があります。


【ファイルのCLOSE】
 ファイルを使用したなら、後片付けをしなくてはなりません。とくにOUTPUT、APPENDモードで開いていた場合、後片付けを忘れると、それまでPRINT #で書き込んでいたいたはずのデータは実際にはファイルに反映されません後片付けするにはCLOSE命令を使います。       CLOSE #(ファイル番号)
     ファイル番号を省略するとそのときOPENしていたファイルすべてがCLOSEされます。

 では、実際にファイルに書き込む(補助記憶装置にデータを記憶する)プログラムを作りながら詳しく説明します。これから先は今までさんざやってきたテストの成績処理のプログラムをファイルを使うように改造してゆくことにします。またテストの成績かよ!と思われたかもしれませんがこのカテゴリーも終点に近づいてきました。もう少しの間お付き合いください。


【ファイルに書き込むプログラム】


 では、生徒名簿マスタファイルを作成するプログラムを作ってみましょう。マスタファイルとは内容が変動しない(変動することが滅多にない)ファイルのことです。ここでは生徒一人一人の出席番号、氏名、ヨミガナをファイルに書き込むことにします。

  1: OPEN "meibo.txt" FOR OUTPUT AS #1
  2: NUM$=""
  3: WHILE NUM$<>"//"
  4:     INPUT "出席番号
(//=入力終了)",NUM$

  5:     IF NUM$<>"//" THEN
  6:         INPUT "生徒氏名",NAMAE$
  7:         INPUT "ヨミガナ",KANA$
  8:         PRINT #1,NUM$;",";NAMAE$;",";KANA$
  9:     END IF
 10: WEND
 11: CLOSE #1
 12: END
                          図16_1.ファイルに書き込むプログラム


 1行目はファイルのOPENです。 meibo.txt という名前のファイルを新規作成します。同じ場所に meibo.txt という名前のファイルがあった場合、その内容はいったん消去されます。
 3~10行目は入力終了になるまで繰り返されます。
 4行目は出席番号の入力です。出席番号が // (入力終了の指示)でなければ、
     6~8行目で生徒氏名、ヨミガナを入力してファイルに書き込みます(*)。
 入力終わると11行目でファイルをCLOSEしてプログラム終了です。


(*)PRINT #でファイルに書き込む時、各アイテム間に , (半角カンマ)を書き込む必要があります。これがないと書き込む全部のアイテムが1つのストリングになってしまい、このファイルを読み込むプログラムがたいへんめんどうなことになります。


【Tiny Basicのプログラムとカレントディレクトリ】

 あまり良いことではないのですが、図16_1のプログラムを作成して、保存をしないで実行してみました。結果は次のようになります。



図16-2.ファイルopenエラー(ディレクトリ不明)


 これは「ファイルがOPENできませんでした」という実行時エラーです。プログラムの書き方にミスがあるわけではありません。なんでこんなことになったのかといいますと、プログラムを作成して保存していない状態ではカレントディレクトリがどこなのか確定していないからです。
 ではプログラムを保存してから実行してみましょう。プログラム名はmeibo_generator、第4章でやった方法で保存することにします。保存したら実行してみましょう。


図16-3.ファイル新規作成プログラム実行中


 実行が終わったらTiny Basicが入っているフォルダを開いて中身を見てみましょう。


図16-4.Tiny Basicの入っているフォルダ


 このフォルダの中に、今作ったプログラム meibo_generator.tbtとプログラムで作成したファイル meibo.txt が入っているのがわかります。第4章でやった方法でプログラムを保存すると、Tiny Basicが入っているフォルダに保存されます。そしてTiny Basicではプログラムを保存してから実行するとカレントディレクトリはプログラムが保存されているフォルダに移ります。したがってファイルパスを指定せずにファイル名だけ指定してファイルをOUTPUTでOPENすると作成されるファイルもまたTiny Basicが入っているフォルダ内に作られます。
 これでもプログラムの実行には問題ないのですが、自分のパソコン、共用パソコンの場合なら自分専用のUSBメモリやSDカードにTiny Basicが入っているという場合を除き、プログラムの運用上は問題大ありです。他部課に流してはいけないマル秘データファイルを作成するプログラムを会社や学校で共用のパソコンでパソコン内蔵のハードディスクに入っているTiny Basicで作成して実行したとしたら、誰でも中身が見られるフォルダの中にマル秘データを書き込んでしまうことになります。これは立派な情報漏洩です。
 これを避けるにはカレントディレクトリが共用フォルダ以外になるようにすればいいのですが、今も言ったようにTiny Basicでは実行するプログラムが入っているフォルダがカレントディレクトリになるので、作ったプログラムをTiny Basicが入っているフォルダ以外の場所に保存するようにすればいいことになります。

【フォルダを新規作成してプログラムを保存する】

 ※Windowsのエクスプローラーの使い方がわかっていらっしゃる方は、この節は読み飛ばしていだだいてかまいません。

 ここでは自分のUSBメモリに seiseki_shori というフォルダを作成し、ファイル作成プログラムを meibo_generator.tbt 、作成するファイルを meibo.txt として説明します。


図16-5.名前を付けて保存の画面

 図16-5はUSBメモリをセットした状態でプログラム保存を名前を付けて保存するときの画面です。いちばん上の段はファイルを保存する場所(ドライブ/フォルダ)を選ぶところです。ここでセットしたUSBメモリを選んでクリックします。この例だと挿し込んだUSBメモリはHドライブです。すると図16-6のようにUSBメモリの内容が表示されます。このUSBメモリにはすでに kyozai、bukatsu という2つのフォルダがあるのがわかります。


図16-6.USBメモリを開いたところ

 ここでUSBメモリの内容(この例なら2つのフォルダ)が表示されている領域内のどこでもいいのでマウスクリックをもっていって右クリックします。ポップアップメニューが出るのでここで新規作成を選びます。するとさらにサブメニューが出るのでここでフォルダーを選んでクリックします。


図16-7.フォルダ名を決める

 ここでフォルダ名を決めます。すでにあるフォルダ名と同じ名前にはできません。


図16-8.新しいフォルダができた

 新しいフォルダができました。以後このフォルダを専用フォルダとよびます。出来上がった専用フォルダをダブルクリックします。


図16-8.新しいフォルダにプログラムを保存

 出来上がった専用フォルダの中にプログラムを保存します。プログラムを保存したら実行してみましょう。実行画面は図16-3と同じなので省略します。


図16-9.プログラム実行後の専用フォルダの中身

 プログラム実行後の専用フォルダの内容をエクスプローラー見てみると、保存したプログラムとこのプログラムで作成したデータファイルがあるのがわかります。


図16-10.プログラムで作成したファイルの中身

 作成したファイルの中身を確認してみましょう。拡張子が .txt のファイルをダブルクリックすると、Windowsの場合メモ帳(Notepad)が自動的に起動して、ファイルを読み込みます。ファイルの内容は図16-10のように、1件1件のレコードのアイテムが , (半角カンマ)で区切られています。ここでメモ帳(Notepad)でファイルの中身を編集しないように気をつけてください。Enterキー(Returnキー)を押すのもダメです。内容を確認したらメモ帳(Notepad)を閉じてください。

【この章のまとめ】

ファイルを使用するには、まずファイルを開く(OPEN)必要がある。

ファイルにデータを書き込むには新規作成モード(OUTPUT)か、追加モード(APPEND)モードで開く

新規作成モード(OUTPUT)でOPENすると、同名のファイルがすでに存在する場合、その内容がいったん消去される。

ファイルにデータを書き込むときは PRINT #(ファイル番号)命令を使う。

ファイルの使用が終わったら、ファイルを閉じる(CLOSE)する必要がある。

現在処理の対象になっているフォルダをカレントディレクトリという。

Tiny Basic for Windowsでは、実行するプログラムが保存されているフォルダがカレントディレクトリになる。

- CafeLog -