VB6・VBA関数メモ:EOF関数

EOF関数についてメモしておきます。

この関数はファイルの読み込み位置が末尾かどうかを調べる際に使用します。

Inputモードでは読み込み位置が末尾の場合にTrueを返すようです。

Binary/RandomモードではGetステートメント等で読み込みできなかった後にFalseが返るようです。
(Seekステートメントで読み込み位置を末尾に設定してもTrueにならない)

Output/Appendモードでは使用できないようです。
(常にTrueが返る)


概要

EOF(FileNmber As Integer) As Boolean
機能 ファイルの読み込み位置が末尾か否かを返す
引数 FileNmber Openステートメントで指定したファイル番号 Integer型
戻り値 ファイル末尾の場合「True」
ファイル末尾ではない場合「False」
Boolean型


使用例

説明 記述例 出力
(Sumple.txt)
12345
abcde
あいうえお
ファイルの末尾までデータを読み込む
(Inputモード)
Dim str As String
Dim n   As Integer

n = FreeFile
Open "D:¥Sumple.txt" For Input As #n

Do Until EOF(n)
    Line Input #n, str
    Debug.Print str
Loop

Close #n
12345
abcde
あいうえお
ファイルの末尾までデータを読み込む
(Binaryモード)
Dim rec    As Byte
Dim recs() As Byte
Dim cnt    As Long
Dim n      As Integer

n = FreeFile
Open "D:¥Sumple.txt" For Binary As #n

'読み込み
cnt = 0
Do While True
    Get #n, , rec
    
    '読み込み完了の場合はループ終了
    If EOF(n) Then Exit Do
    
    ReDim Preserve recs(cnt)
    recs(cnt) = rec
    cnt = cnt + 1
Loop
Debug.Print StrConv(recs, vbUnicode)

Close #n
12345
abcde
あいうえお
Public Type MyType
    num  As Integer
    str  As String * 3
End Type
ファイルの末尾までデータを読み込む
(Randomモード)
Dim rec As MyType
Dim n   As Integer
Dim i   As Long

n = FreeFile
Open "D:¥Sumple.txt" For Random As #n Len = Len(rec)

'書き込み
For i = 1 To 3
    rec.num = i
    rec.str = Chr(Asc("A") + i - 1)
    Put #n, i, rec
Next i

Seek #n, 1

'読み込み
Do While True
    Get #n, , rec
    
    '読み込み完了の場合はループ終了
    If EOF(n) Then Exit Do
    
    Debug.Print rec.num & ":" & rec.str
Loop

Close #n
1:A  
2:B  
3:C  


動作検証

説明 記述例 出力
オープンしていないファイル番号を指定するとエラー
On Error GoTo ERR_HANDLER

    Debug.Print EOF(1)

ERR_HANDLER:
    If Err > 0 Then Debug.Print Error
ファイル名または番号が不正です。
Output/Appendモードでは常にTrueを返す
(右例ではSeekで位置をずらしてもTrueを返した)
Dim n   As Integer

n = FreeFile
Open "D:¥Sumple.txt" For Output As #n

Print #n, "1234567890"
Seek #n, 5

Debug.Print EOF(n)

Close #n
True


コメント
コメントする








    
この記事のトラックバックURL
トラックバック