今回は「ファイル操作」を扱います。 いくらプログラムでデータを加工してもファイルに保存しなければデータを加工する意味はほとんどありません。 なのでこの章ではActiveBasicによるファイルの読み書きを学習することで、より実用的なプログラムを組めるようにします。 今回は前回に比べれば簡単なので、ぜひマスターしていただきたいです。 それではOriosのActiveBasic講座、第五章のスタートです。
上の第五章のあいさつでも書きましたが第五章では「ファイル操作」を扱います。 「ファイル操作」ができるようになるとプログラムで加工したデータなどをファイルに保存することができるという、より実用的なプログラムができます。 で、今回はまずデータを保存するための「ファイルの書き込み」を学習します。
では早速下のプログラムを実行してみてください。
'lesson1-5-1 #console Dim str As String Open "Lesson1-5-1.txt" For Output As #1 Print "ファイルに書き込む文字を入力してください。" Print "何も入力しないと終了します。" While -1 Input str If str = "" Then Exit While End If Print #1, str WEnd Close #1 Exec "Lesson1-5-1.txt" End
実行すると次のようなウィンドウが表示されます。
C:\ActiveBasicCourse\lesson1-5-1.abp |
ファイルに書き込む文字を入力してください。 何も入力しないと終了します。 ? ■ |
文字をどんどん入力していき、最後に何も入力せずに「Enterキー」を押すと、下のように実際に書き込んだファイルが開かれると同時にプログラムが終了します。
Lesson1-5-1.txt |
ファイル(F) 編集(E) 書式(O) 表示(V) ヘルプ(H) |
Orios ActiveBasic Course |
では今回の説明に入ります。 第四章に比べれば結構簡単だと思いますので、しっかり読んでみてください。
-*-*-*-*-【説明】-*-*-*-*- |
---|
【使い方】
( ) Open 開くファイルのパス For Output As #ファイル番号
【意味】
( ) 開くファイルのパス を書き込みモードでファイル番号 として開きます。
【解説】
ファイルの書き込みオープン
(i) ファイルを操作するためにまずしなければならないことは「ファイルを開く」ことです。
と言っても、これは日常で使っているような「ダブルクリックしてファイルの内容を見る」という意味ではなく、プログラムがファイルを読み書きできるように準備することをいいます。
(ii) ファイルを開くときには「読み込むために開く」「書き込むために開く」「追加して書き込むために開く」「読み込んだり書き込んだりするために開く」という4つのモードからどれかを選ぶ必要があります。
このモードは「For Output」のところで指定します。
今回はファイルに書き込むだけなので「書き込むために開く」モード、「Output」を指定しています。
他のモードについては次回以降に説明します。
(iii) 実際に開くためには、まず開きたいファイルへのパスを開くファイルのパス に書きます。
この「パス」というのはファイルのある場所を示す文字列(変数でもOK)のことで、例えば"C:\Documents and Settings\User\My Documents\test.txt"のようなものです。
ただし、実行するプログラムと同じ場所のファイルを開くときはファイル名だけ("test.txt"など)でも構いません。
また、今回のようにファイルに何かを書き込むために開く場合は、必ずしも開くよう指定したファイルが存在する必要はありません。
指定したファイルが存在しない場合は、指定した名前のファイルを新しく作って書き込みの準備をします。
(iv) ファイル番号 というのは、ファイルを開いた後に実際にプログラムがファイルに読み書きする際の、そのファイルの識別番号です。
例えばここで「1」を割り当てた場合、その後そのファイルに読み書きをするときにはファイル名ではなく「1」という番号を使って書き込むファイルを指定します。
※ 今回のように「書き込むために開く」モードを使った場合で、開くよう指定したファイルが存在した場合は、そのファイルの内容は全て消えてしまいます。
なので、「書き込むために開く」モードで開くときには大事なファイルを消さないように十分注意してください。
【使い方】
( ) While -1 command WEnd
【意味】
( ) 無限にcommand を実行します。
【備考】
( )(a) 「-1」と「command 」、「command 」と「WEnd」の間に改行を入れます。 ( )(b) 「command 」は複数行でも構いません。
【解説】
無限ループと条件式の値
(i) 以前ループをやったときに、無限ループを作らないようにと言いましたが、それでもいつ終わるか分からないようなことをするときには、無限ループを使って作業を繰り返し、ループを終わらせたいときにExitを使うと便利です。
(ii) 無限ループを作るには、Whileループの条件式 の部分に「1 = 1」など、どんなときでも「真」になるような式を書けばそれでいいのですが、この場合、ループを繰り返すたびに「1 = 1」の判断をしなくてはならなくなり、少し無駄な作業が入ってしまいます。
そこで条件式 のところに「-1」を書いてやると、条件式ではないのに勝手に「真」と判断してくれてループを実行してくれます。
(iii) 実は「Dim i As Long : i = (1 = 1) : Print i」(「:」は改行を省略する表現です)を実行していただくと「-1」が表示されると思います。
このことから分かると思いますが、条件式自体にも値があります。
この場合「i」に条件式「1 = 1」の値が入るわけですが、その「i」を表示させると「-1」と表示されることから条件式「1 = 1」の値は「-1」であることが分かると思います。
他に「1 = 2」「0 = 0」「3 = 5」などでもやってみるとそれぞれ「0」「-1」「0」が表示されると思います。
このことからも分かるように、条件式が「真」のときにはその条件式の値は「-1」、「偽」のときは「0」になります。
(iv) 「While」などのループや「Ifブロック」では、実は条件式そのもので判断をしているのではなく、条件式の値でループを繰り返すかとかを判断しています。
なので条件式の代わりに「-1」や「0」を直接書いてやると、その値を条件式が返した値だとコンピューター側は解釈してループを実行したりしなかったりします。
これが今回の無限ループの作り方のカラクリです。
※ もうちょっと厳密に言えば「ループ」や「Ifブロック」では「0」なら「偽」、それ以外なら「真」と判断しています。
つまり「-1」じゃなくても「0」でなければ全て「真」として扱われます。
【使い方】
( ) Print #ファイル番号 , 文字列
【意味】
( ) 文字列 をファイル番号 に書き込みます。
【解説】
( ) ファイルへの書き込み
(i) Openで開いたファイルに実際に書き込むためには「Print」を使います。
ただし、「Print」はおなじみのDOSウィンドウに表示させるときにも使うので、ファイルに書き込むということをきちんと区別する必要があります。
そのためにまず書き込むファイルをファイル番号 に書きます。
このときファイル番号 の前の「#」を忘れないようにしてください。
これを忘れるとファイルへの書き込みと認識されません。
そして、ファイル番号 の後ろに「,」を書いて、その後ろに書き込みたいもの(文字列・変数・計算式・数字など)を書きます。
(ii) 「,」の後ろは普通の「Print」の書き方と同じです。
また複数のものを書きたいときは「,」や「;」で区切って書けばいいですし、次に書き込むものを改行せずに書きたい場合は最後に「;」を書けば改行せずに次の文字が書かれます。
[例] Print 123 (123を書き込みます。)
Print "abc" (文字列"abc"を書き込みます。) Print str; (文字列変数strの中身を出力し、さらにこの後に書き込むものは改行されません。) Print "a"; "b"; "c" ("a b c"と書き込まれます。) Print "a", "b", "c" ("a""b""c"がタブ文字をはさんで出力されます。)
【使い方】
( ) Close #ファイル番号
【意味】
( ) ファイル番号 を閉じます。
【解説】
ファイルを閉じる
( ) Open命令語でファイルを開くわけですが、当然ファイルを開いたら閉じる必要があります。
そこで使うのが「Close命令語」です。
ファイル番号 のところに閉じたいファイル番号を書けばそのファイルが閉じられます。
もし「#ファイル番号 」を書かなかった場合は、その時点で開いているファイルを全部閉じます。
【使い方】
( ) Exec 実行したいファイルへのパス
【意味】
( ) 実行したいファイルへのパス を実行します。
【解説】
ファイルの実行
( ) ファイルのアイコンをダブルクリックしたらそのファイルが開きますね。
この命令語は指定したファイルをあたかもダブルクリックしたような動作をさせます。
例えばプログラム(拡張子「.exe」)を指定するとそのプログラムが実行されます。
またテキストファイル(拡張子「.txt」)を指定するとそのテキストファイルが「メモ帳」などのテキストエディタで開かれます。
|
さて、今回の講座はいかがだったでしょうか? この章ではファイルを扱っていくわけですが、最初にも言ったとおりファイルを扱えるようにならないと実用的なプログラムはできません。 前回のポインタに比べりゃよっぽど楽だと思いますので、ぜひマスターしていただきたいです。 ではこのレッスンでやったことが定着しているかを確かめるための「やってみよう」です。
-*-*-*-*- やってみよう -*-*-*-*- |
---|
(1)あらかじめRnd関数で0〜3の数字を用意し、(2)それ数字をユーザに予想してもらって入力してもらい、ユーザが当てるまで(1)(2)をWhileループで繰り返すプログラムを作ってみましょう。 ただし、プログラムが終わるまでの(1)の数字と(2)の数字を全て、各行「(1)の数字,(2)の数字」(注:数字・コンマの間にスペースを入れない)という形で"LetsTry1-5-1.txt"に書き込むようにしましょう。 [ファイル書き込みの例]1,3 |