VB6・VBA関数メモ:Seek関数

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

この関数はファイルの現在の読み書き開始位置を取得する際に使用します。

読み書きの開始位置の設定を行う場合はSeekステートメントで行います。
Randomモード以外の場合はバイト位置、Randomモードの場合はレコード位置を返します。


概要

Seek(FileNumber As Integer) As Long
機能 Openステートメントで開いたファイルの現在の読み書きする位置を返す
引数 FileNumber Openステートメントで指定したファイル番号 Integer型
戻り値 Inputモード時 :現在の読み書きバイト位置
Outputモード時:現在の読み書きバイト位置
Appendモード時:現在の読み書きバイト位置
Randomモード時:現在の読み書きレコード位置
Binaryモード時:現在の読み書きバイト位置
Long型


使用例

説明 記述例 出力
(Sumple.txt)
12345
abcde
あいうえお
ファイルの現在の読み書き位置を取得
Dim n   As Integer

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

Seek #n, 1
Debug.Print Seek(n)

Seek #n, 3
Debug.Print Seek(n)

Seek #n, 5
Debug.Print Seek(n)

Close #n
 1
 3
 5
Dim n   As Integer
Dim str As String
Dim tmp As String
Dim pos As Long

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

Do Until EOF(n)
    pos = Seek(n)
    Line Input #n, tmp
    
    str = Format(pos, "00") & ":" & tmp
    Debug.Print str
Loop

Close #n
01:12345
08:abcde
16:あいうえお
ファイルの現在の読み書きレコード位置を取得
(Randomモード)>
Public Type MyType
    num  As Integer
    str  As String * 3
End Type
Dim n   As Integer
Dim i   As Long
Dim str As String
Dim rec As MyType
Dim pos As Long

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

For i = 1 To 5
    rec.num = i
    rec.str = Chr(Asc("A") + i - 1)
    Put #n, i, rec
Next i

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

Close #n
1:1A  
2:2B  
3:3C  
4:4D  
5:5E  


動作検証

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

Dim pos As Long

pos = Seek(2)
Debug.Print pos

ERR_HANDLER:

Close #n

If Err > 0 Then Debug.Print Error
ファイル名または番号が不正です。


コメント
コメントする








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