FreeBASIC マニュアルのトップに戻る

FreeBASIC Eof

目次→実行時ライブラリー参考→ファイル入出力関連EOF←オリジナル・サイト

EOF 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

開いているファイルが、終端に達したかどうかをチェックします。

構文:
declare function Eof ( byval filenum as long ) as long

用法:
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
'' このコードは、利用できるファイル番号を見つけて、指定ファイル名のファイルを開こうとします。
'' うまくいくと、ファイル番号を、開いたファイルに結び付けます。
'' ファイル名と eof() を表示します。

Dim As String file_name
Dim As Integer file_num

 file_name = "testUTF8withBOM.txt"
 file_num = FreeFile( )                 '' 使用可能なファイル番号を検索します

'' ファイルを開きます。そして、ファイル番号をそれに結び付けます。
Open file_name For Input Encoding "utf-8" As #file_num
'' ファイル名と EOF を表示します。
Print "開こうとしたファイル名: " ; file_name , "EOF = "; Eof ( file_num )
Close #file_num                        '' ファイル番号を通したファイルを閉じます。

 file_name = "testUTF8noBOM.txt"
 file_num = FreeFile( )                 '' 使用可能なファイル番号を検索します

'' ファイルを開きます。そして、ファイル番号をそれに結び付けます。
Open file_name For Input Encoding "utf-8" As #file_num
'' ファイル名と EOF を表示します。
Print "開こうとしたファイル名: " ; file_name , "EOF = "; Eof ( file_num )
Close #file_num                        '' ファイル番号を通したファイルを閉じます。

Sleep
End 0

EofUNICODE.bas
'' このコードは、空いていて使えるファイル番号を見つけて、ファイルを開こうと試みます。
'' うまくいくと、ファイル番号は、開いたファイルに結び付けられます。
'' そして、一行一行ファイルを読みます。スクリーンにそれを出力します。
'' これを、eof()が true を返す間、繰り返します。
'' ファイルが空なら、繰返し処理を無視します。

Dim As String file_name
Dim As Integer file_num
Dim As Integer Counter

file_name = "testUTF8withBOM.txt"

file_num = FreeFile( )                 '' 使用可能なファイル番号を検索します

'' ファイルを開きます。そして、ファイル番号をそれに結び付けます。エラーで抜けます。

If( Open( file_name For Input Encoding "utf-8" As #file_num ) ) Then
   Print "ERROR: 開こうとしたファイル名 " ; file_name
   Sleep
   End -1
End If

Counter = 0
      
Do Until Eof( file_num )               '' ファイルの端に達するまで、繰り返します。
   Dim text As WString * 40
   Line Input #file_num, text          '' テキストの行を読みます ...
   Print text                          '' ... そして、画面にそれを出力します。
   Counter = Counter + 1
   If Counter > 20 Then 
      Sleep
      Counter = 0
   EndIf
Loop

Close #file_num                        '' ファイル番号を通したファイルを閉じます。
Sleep
End 0

異なったプラットホーム上で、コンパイラが使用するライブラリの基本的な違いのため、コンパイラのWindowsバージョン(行末は CRLFを期待)で、リナックスで作成されたテキストファイル(行末は LF)を読むとき、EOF 関数は、信頼できない場合があります。
DOS と、リナックスコンパイラには、この問題がありません。
1つの解決方法は、Input の代わりに、Binary アクセスで、ファイルを開くことです。
上記の例のように、Line Input# と EOF を組み合わせて使うことができます。ここでは、EOF 関数は、確実に働きます。
この解決法はファイルの文字の終端を検出していません。しかし、これは、ディスク・ファイルではない、文字列の流れの終わりを示すのに使用されています。


QBからの違い:

参照:
ファイル入出力関連に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2022-03-25 10:49:45
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承