開いているファイルが、終端に達したかどうかをチェックします。
構文:
用法:
result = Eof
( filenum )
パラメタ:
filenum
開いているファイルのファイル番号。
戻り値:
ファイルの終りに達したら true (-1) を、そうでなければ、ゼロ (0) を返します。
記述:
EOF 関数を使うと、
Input (ファイル・モード) で開いたファイルを読むときに、終端に達したことを知ることができます。
これにより、ファイルの終端を過ぎて読んでしまうことにより引き起こされるエラーを防ぐことができます。
ファイルの終端に達したことを知るために EOF を使ってください。
EOF は、既に開かれたファイルの有効なファイル番号が必要です。
ファイルに使えるファイル番号は、
Freefile で取得できます。
Output で開いたファイルに結び付けられたファイル番号では、EOF は、常に 0 を返します。
例:
'' このコードは、利用できるファイル番号を見つけて、ファイル "test.txt" を開こうとします。
'' うまくいくと、ファイル番号を、開いたファイルに結び付けます。
'' そして、一行一行ファイルを読んで、画面に表示します。
'' これを、eof()が true を返すまで、繰り返します。
'' ファイルが空なら、繰返し処理を無視します。
Dim As String file_name
Dim As Long file_num
file_name = "test.txt"
file_num = FreeFile( ) '' 使用可能なファイル番号を検索します
'' ファイルを開きます。そして、ファイル番号をそれに結び付けます。エラーが有れば、抜けます。
If( Open( file_name For Input As #file_num ) ) Then
Print "ERROR:
開こうとしたファイル名 " ;
file_name
Sleep
End -1
End If
Do Until EOF( file_num ) '' ファイルの端に達するまで、繰り返します。
Dim As String text
Line Input #file_num, text '' テキストの行を読みます ...
Print text '' ... そして、画面にそれを出力します。
Loop
Close #file_num '' ファイル番号を通したファイルを閉じます。
Sleep
End 0
渡辺注:
一般に UTF-8 は BOM 無しも許されますが、FreeBASIC では UTF-8 として認識するために BOM が必要であることに注意して下さい。
EofUTF8.bas
EofUNICODE.bas
異なったプラットホーム上で、コンパイラが使用するライブラリの基本的な違いのため、コンパイラのWindowsバージョン(行末は CRLFを期待)で、リナックスで作成されたテキストファイル(行末は LF)を読むとき、EOF 関数は、信頼できない場合があります。
DOS と、リナックスコンパイラには、この問題がありません。
1つの解決方法は、Input の代わりに、Binary アクセスで、ファイルを開くことです。
上記の例のように、Line Input# と EOF を組み合わせて使うことができます。ここでは、EOF 関数は、確実に働きます。
この解決法はファイルの文字の終端を検出していません。しかし、これは、ディスク・ファイルではない、文字列の流れの終わりを示すのに使用されています。
QBからの違い:
-
QB では、comm ポートは、読まれるのを待つ文字が全くないときに、EOF を通知しました。
-
QBでは、RANDOM か BINARY モードで開いたファイルの場合、ファイルの終りを過ぎて読み込みをしようとして初めて、EOF は非ゼロを返しました。
FreeBASIC では、最後の項目を読んだ直後に、EOF は、 true を返します。
参照: