OriosのActiveBasic講座(1-5): ファイル操作

2.ファイルの読み込み

【目標】ファイルのデータを読み出すことができるようになりましょう。

前回はファイルへの書き込みについてやりましたが、やっぱりファイルに書いたら今度は……ということで今回はファイルの読み込み方をします。

では早速下の……といきたいところですが、今回はプログラムを動かす前に少し準備していただきたいことがあります。 Lesson1-5-2.txtを右クリックしてダウンロードしていただき、下のプログラムを保存するところと同じフォルダに入れてください。 準備はできましたでしょうか? それでは早速下のプログラムを実行してみてください。

'lesson1-5-2
#console
Dim file_str As String
Dim comma_pos As Integer
Dim prefecture As String
Dim population As Integer
Open "Lesson1-5-2.txt" For Input As #1
Print "場所", "人口(万人)"
Do
    Input #1, prefecture, population
    Print prefecture, population
Loop Until Eof(1) = -1
Close #1
Print "人口データを追加します。"
Print "入力し終えたら0,0と打ってください。"
Open "Lesson1-5-2.txt" For Append As #1
While -1
    Input "追加する場所名と人口をコンマで区切って入力 -->", prefecture, population
    If prefecture = "0" And population = 0 Then
        Exit While
    End If
    Print #1, prefecture;
    Print #1, ",";
    Print #1, population
WEnd
Close #1
Exec "Lesson1-5-2.txt"
End

実行すると次のようなウィンドウが表示されます。

C:\ActiveBasicCourse\lesson1-5-2.abp
場所    人口(万人)
Ehime   148
Hyogo   559
Tokyo   1245
人口データを追加します。
入力し終えたら0,0と打ってください。
追加する場所名と人口をコンマで区切って入力 -->

この後、実際に -->Hokkai,568 のようにどんどん入力していき、最後に -->0,0 と入力すれば下のように"Lesson1-5-2.txt"が開かれてプログラムが終了します。 このとき"Lesson1-5-2.txt"には入力した内容が追加されています。

Lesson1-5-2.txt
ファイル(F)  編集(E)  書式(O)  表示(V)  ヘルプ(H)
Ehime,148
Hyogo,559
Tokyo,1245
Hokkai,568

では、今回の説明に入ります。

-*-*-*-*-説明-*-*-*-*-
【使い方】
( ) Open 開くファイルのパス  For Input As #ファイル番号 
【意味】
( ) 開くファイルのパス を読み込みモードでファイル番号 として開きます。
【解説】
ファイルの読み込みオープン
( ) 前回書き込むためにファイルを開く方法を学習しましたが、今回は読み込むためにファイルを開く方法を学習します。 といっても書き込みのときと違うのは「For Input」というふうに書き込むときは「Output」となっていた部分が「Input」になっているだけです。 他のファイルのパスとかファイル番号とかは書き込むときと全く同じです。
※1 「書き込むために開く」モードを使って開くときには、開くファイルのパス が既に存在した場合はそのファイルの内容が消えてしまいますが、これは「書き込むために開く」モードだけです。 他のモードの場合はこういうことはありません。
※2 また「書き込むために開く」モードのときは、開くファイルのパス が存在しなかった場合は新しくそのファイルを作成しますが、「読み込むために開く」モードではそのようなことはありません。
【使い方】
( ) Input #ファイル番号 , ファイルの内容を読み込む変数 
【意味】
( ) ファイル番号 のファイルの内容をファイルの内容を読み込む変数 に読み込みます。
【解説】
ファイルの読み込み
(i) ファイルに書き込むときはPrintを使いましたが、読み込むときには「Input」を使います。 といってもPrintのときと同様、このままだとコンソールウィンドウでユーザから入力を求めるInputと区別がつきませんので、「#ファイル番号 」とその後の「,」をつけ忘れないようにしてください。
(ii) 「#ファイル番号 ,」の後にはファイルの内容を読み込む変数 を書きます。 こうすることで、そのファイルのデータをファイルの内容を読み込む変数 に読み込まれます。 ただし、この場合ファイルの内容を読み込む変数 には一行ずつしか読み込まれません。 またその行の中に「,」があった場合は、一行に満たなくてもそこまでしか読み込まれません。
(iii) コンソールウィンドウでユーザから入力を求めるInputのときは「,」で区切って複数の変数を書くことで複数のデータを入力させることができました。 ファイル読み込みのときも同じです。 ファイルの内容を読み込む変数 を「,」で区切って複数書くことで。ファイルから複数のデータを読み込むことができます。 この場合、前に書いた変数から順番に一行ずつ読み込まれます。 ただしその行の中に「,」があった場合は、「,」の前のデータと「,」の後のデータが別々のデータとして別々の変数に読み込まれます。
(iv) Inputでファイルのデータの途中までしか読み込まなかった場合、次のInputではその続きからファイルを読み込みます。
Orios
ActiveBasic,Course
5,2,2
[例] 上のようなファイルを読み込む場合、読み込む順番は「Orios」「ActiveBasic」「Course」「5」「2」「2」のようになります。 始めの「Orios」はそのまま一行、「ActiveBasic,Course」は行の途中が「,」で区切られているので「ActiveBasic」と「Course」に分割して読み込まれます。 三行目は行の途中に「,」が2つありますが、このような場合「5」「2」「2」のようにコンマで区切られたデータごとに読み込まれます。
【使い方】
( ) Eof(ファイル番号 )
【意味】
( ) ファイル番号 のファイルポインタが終端を指している場合「-1」を、それ以外は「0」を返します。
【備考】
( ) ファイル番号 の前に「#」は必要ありません。
【解説】
( ) Eof関数
(i) 「Input」を使ってファイルのデータを読み込む場合、「ファイルの最後まで読み取ったか」ということが分かる必要があります。 そうしないとどこまでInputを使えばいいのかが分からないからです。 「別に読み込んだ文字列が""なら終わりでいいじゃないか」という言葉が聞こえてきそうですが、それだとたまたま読み込んだデータが""だという可能性もあります。 ということで最後まで読み込んだかを確かめる専用の関数があります。 それがEof関数です。
(ii) Eof関数は引数で渡されたファイル番号 のファイルを最後まで読み込んだかを判断し、最後まで読み込んだ場合は「-1」、まだ最後まで読み込んでいない場合は「0」を返します。
※ 厳密に言えば「ファイルポインタ」がファイルの最後まで行っているかどうかを調べる関数です。 この「ファイルポインタ」というのは「現在ファイルを読み書きしている場所」のことで、「Input」や「Print」を使うことで移動します。 「カーソル」のファイルバージョンのようなものです。
【使い方】
( ) Open 開くファイルのパス  For Append As #ファイル番号 
【意味】
( ) 開くファイルのパス を追加書き込みモードでファイル番号 として開きます。
【解説】
ファイルの追加書き込みオープン
(i) ここでは「追加して何かを書き込む」モードで開くことについて説明します。 普通「書き込みモード」と「読み込みモード」があればファイルは操作できると思いませんか? しかしこの「書き込みモード」には問題があります。 それはファイルの書き込みオープンで書きましたが、開くと同時にファイルの内容が全部消えてしまうということです。 なのでファイルの内容はそのままにして何かを追加して書きたいときには非常に不便です。 そこで使うのが「追加して何かを書き込む」モードです。 この場合「For Append」を使います。
(ii) このモードを使って開いた場合、開いたファイルの内容は消えません。 またこのモードで開いて書き込む場合は、ファイルの最後から追加して書き込まれていきます。
※ 「追加して何かを書き込む」モードのときは、開くファイルのパス が存在しなかった場合は新しくそのファイルを作成します。

今回は「ファイルの読み込み」「ファイルへの追加書き込み」をやりましたがいかがでしたでしょうか? 前回と今回の内容をマスターすると、ファイルの読み書きが大体できるようになってより実用的なプログラムが組めるようになります。 あなたが自作ソフトを公開する日も近いかも知れませんよ。

ではこのレッスンの内容がどれくらい定着したかを確かめる「やってみよう」です。

-*-*-*-*- -*-*-*-*-

ここに某年、某都市の各月の平均気温のリストがあります。→[ LetsTry1-5-2.txt ](右クリックしてダウンロードしてください。) このファイルには各行にそれぞれの月の平均気温が書かれています。 これを利用して某年、某都市の一年間の平均気温を求め、それをファイルの最後に追加して書き込み、最後にそのファイルを表示するプログラムを作ってみましょう。


ご質問・ご意見・ご感想・苦情等はメールまたはメイン掲示板のActiveBasic板などでお気軽にどうぞ。

前に戻る - 次に進む

ホーム > OriosのActiveBasic講座(トップページ) >