プログラム講座 初級編

- テキストファイルビューアー -

 まずは簡単なテキストファイルの内容を表示するプログラムを作ってみる事にしましょう。
 Macintoshの場合、アプリケーションが起動してファイルを開く場合「ファイルオープンダイアログボックス」というのがでてきます。
「どんなのだったっけ?」
という人のために画面を載せておきましょう。



 これがファイルオープンダイアログボックスです。これを表示させてユーザーにファイルを選んでもらうという具合になります。これは、どのアプリケーションでも同じですね。

◆ポイント1
 さて、ファイルをユーザーに選択してもらうと言っても次の課題があります。
 この3つが最初の課題です。何回もプログラムを作成した人ならば、あれとこれを使えばいいんだな、というのが分かりますが、初めての場合、どこに何があって、どのマニュアルを見たらいいのか、分からない場合も多いでしょう。
 という事でここでは、その方法についてちゃんと説明します。
ファイルオープンダイアログボックスを表示させるには次の命令を使います。

ファイル名 = FILES$(_fOpen,"ファイルタイプ",,ボリューム参照番号用変数)

この命令を使用するとちゃんとファイルオープンダイアログボックスが表示されます。1行でファイルオープンダイアログボックスが表示できてしまうので簡単でいいですね。まだ説明していない部分について解説します。
 ファイル名は、ユーザーが選択されたファイル名を返します。もし、キャンセルされて何も選択されなかった場合は、からっぽになって戻ってきます。だからファイルが選択されたかどうかを調べるには、ファイル名がからっぽかどうかを調べればいい事になります。

 _fOpenというのはファイルオープンダイアログボックスを表示させなさいという定数です。これは決まり文句という事で、このまま覚えてしまいましょう。

 ファイルタイプというのはかなり重要です。ここにテキストファイルというファイルタイプを指定する事でテキストファイルとかPICTファイルなどを選択することができるようになります。このファイルタイプは次のようになっています(最低限のもの)。

  • TEXT テキストファイル
  • PICT PICT画像ファイル
  • BINA バイナリファイル
  • EPSF EPSファイル(PostScriptファイル)
  • なし  全てのファイル
     と、こんな具合になっています。今回はテキストファイルですのでファイルタイプにはTEXTを指定すればいい事になります。ちなみにTEXTとEPSFを選択させたい場合はファイルタイプの指定に"TEXTEPSF"といった具合に続けて書くようにします。こうしておくとTEXTファイルとEPSFが選択できるようになります。

     ボリューム参照番号用変数というのは、ファイルが指定された場合、どこにファイルが存在するのかを教えてくれるものです。普通はvolRefNum%のように指定します。このボリューム参照番号は一時的なものでアプリケーションを終了させたりCLOSE FOLDER命令で参照を消してしまうと意味が無くなってしまいます。つまり毎回毎回ボリューム参照番号は変化するという事を頭の片隅に置いて置いて下さい。


    ◆ファイルからの読み込み
     ファイルを選択し終わったら今度は、選択されたファイルから文字を読み込まなければいけません。
     ファイルの読み込みや書き込みを行う場合は、必ず最初にopenという命令を使用します。これは使用するファイルをどうするのか?つまり「読み込むだけ」なのか「書き込みもする」のかを決める命令です。
     OPEN命令は次のような指定になります。

     OPEN 使用方法,ファイル番号,ファイル名,レコード長,ボリューム参照番号

     「使用方法」というのはファイルをどのように扱うかを決める文字列です。これには次のようなものが指定できます。

  • "I"
     ファイルを読み込みだけに使用する

  • "O"
     ファイルを書き出すときに使用する

  • "R"
     ファイルを読み込んだり書き込んだりする場合に使用する

  • "N"
     ネットワーク上のファイルを読み込んだり書き込んだりする場合に使用する

  • "A"
     すでに存在するファイルの最後にデータを書き込んでいく場合に使用する(追記)

     「ファイル番号」というのは、ファイルの読み書きを行う場合に参照される番号の事です。1や2でも構いませんし、64や99でもかまいません。ただし、プレファレンスの設定によって、最大数が決まりますので、最初にプレファレンスをちゃんと設定しておいた方がいいでしょう。ファイル番号だという事を明確にするために#1,#65などのように先頭に#(シャープ)をつけておいた方がいいと思います。

     「ファイル名」は選択されたファイル名を指定します。もし、同じフォルダにあるファイルを開きたい場合、つまりファイルダイアログなどを表示させずに使用する場合は、使用したいファイル名を書きます。

     「レコード長」は普通使うことはないでしょう。何も指定しなければ256バイトになります。1から65535まで指定することが出来ます。

     「ボリューム参照番号」はファイルがどこのディスクのどこのフォルダにあるのかを示す番号です。何も指定しない場合は、同じフォルダにファイルがあるものとみなします。

     今回はファイルを読み込みだけに使用しますので次のような感じになります。

    OPEN "I",#1,filename$,,volRefNum%

     ファイルの使用方法を設定した(ファイルを開く、ファイルをオープンする、といいます)だけではファイルからのデータを読み込むことは出来ません。データを読み込ませるためには、INPUT命令を使用します。
     INPUT命令はキーボードから文字を入力するための命令ですが、ファイルからの入力にも使えます。今回は1行まとめて読み込んでしまう事にしましょう。1行まるごと読み込むにはLINE INPUT命令を使用します。この命令は次のような指定になります。

    LINE INPUT ファイル番号,変数

     ファイル番号はさきほど説明した#1とか#64などの番号の事です。変数は通常文字列変数、A$とかmoji$とかを指定します。
     今回はファイル番号の1から読み込むので次のようになります。

    LINE INPUT #1,A$


    ◆ファイル内容の表示
     次にテキストファイルの表示をすることにしましょう。Future BASICでは何も指定がなければ自動的に1枚ウィンドウを開いてくれます。今回はそのまま使って楽をしましょう(^^;
     ファイルから1行づつ読み込んでファイルの終わりまでいったら表示を中止させるようにします。ここで、問題になるのは「ファイルの終わりをどうやって知るのか?」という事です。ファイルの終わりを調べるにはEOF(ファイル番号)という便利な命令があります。これは指定されたファイル番号のファイルがファイルの終わりかどうかを調べてくれる関数で、終わりならばtrue(つまり真)になります。
     簡単にプログラムを作るとすれば、ファイルの終わりまで勝手に繰り返し(ループ)してくれるような感じの命令があれば便利です。このような、条件の付いた繰り返しにはWHILE〜WENDまたはREPEAT〜UNTILという命令があります。今回はWHILE〜WEND命令を使用してみましょう。
     このWHILE〜WEND命令は次のような感じになります。

    WHILE 条件式
     繰り返しの処理
    WEND

    条件式というのは「条件が成立している限り繰り返す」といった具合になります。繰り返し処理は今回は「ファイルから1行読み込む」「表示する」という具合になります。これらをまとめてみると次のようになります。

    WHILE EOF(1)=false
    LINE INPUT #1,A$
    PRINT A$
    WEND

     このようにすればファイルの内容が表示されるという具合になります。


    ◆ファイルを閉じて終了する
     ファイル内容を全部表示し終わったら使ったファイルを「閉じる」という作業が必要になります。ファイルを使いっぱなしにしておくのは駄目ですのでCLOSE命令を使ってファイルを閉じるようにしましょう。Future BASICではEND命令またはSYSTEM命令で自動的に使用中のファイルは全部閉じてくれます。楽ですが、やはり後々のためにも自分で使用したファイルを閉じるようにしましょう。
     ファイルを閉じるには次のように指定します。, で区切って一度に複数のファイルを閉じることもできます。何も指定しない場合は全部閉じてしまいますので注意が必要です。

    CLOSE ファイル番号

     今回使用したファイル番号は1ですのでCLOSE #1のように指定すればOKです。


    ◆プログラムをまとめてみる
     さて、今回作成したテキストファイルの中身を表示するプログラムですが、ここでまとめてみてみしょう。できあがったプログラムは次のようになります。

    filename$ = FILES$(_fOpen,"TEXT",,volRefNum%)
    OPEN "I",#1,filename$,,volRefNum%
    WHILE EOF(1)=false
    LINE INPUT #1,A$
    PRINT A$
    WEND
    CLOSE #1
    END

     最後のEND命令はなくても構いませんが、一応記述しておいた方が後々のためにいいと思います。
     C言語とかで作成すれば長くなってしまいそうなプログラムもFuture BASICで作成すれば、わずか数行でできてしまいます。これは日曜プログラマや、ちょっとしたプログラムを作りたい場合には非常によい事です。Future BASICは、簡単なプログラムだけでなく複雑なプログラムも作成出来ますが、C言語などよりはるかに手軽に作成できます。が、やはり大規模なプログラム作成には向いていません(とは言ってもプログラマ次第という話もありますが)。

     なんにしても、これでFuture BASICの第一歩を踏み出したわけです。短いプログラムなのに、なんでこんなに説明が長いの?と言われると困ってしまいますが、なるべくわかりやすく丁寧に解説したいと思っています。そのために、説明が長くなってしまいます。ある程度プログラムが組めるようになると、プログラム自体がよい教科書になります。が、それまではこのような説明がある方が絶対にいいはずです。丁寧に説明しようと思っていますので、更新頻度が低くなってしまって申し訳ありません。本当はFuture BASIC専門の日本語の本があればよいのですが・・・。駄目なら自分で作ってしまおうという考えもなきにしもあらずですが、それよりも先にホームページを充実させるべきだと考えています。


    注意
    今回のプログラムでは1行が256文字以上のファイルw読み込むとエラーで停止してしまいます。もちろん回避する方法はありますが、今回は簡単な例という事で、お許しくださいm(_ _)m