VB6・VBA関数メモ:Seekステートメント

Seekステートメントについてメモしておきます。

このステートメントはファイルの読み書き開始位置を指定する際に使用します。
Randomモード以外の場合はバイト位置、Randomモードの場合はレコード位置を設定します。

指定した位置に書き込みを行う場合、既に値がある場合はその位置の値は上書きするようです。

読み書きの開始位置の取得を行う場合はSeek関数で行います。


概要

Seek(#FileNumber, Position)
機能 Openステートメントで開いたファイルの読み書き位置を指定
引数 FileNumber Openステートメントで指定したファイル番号 Variant型
Position 読み書き位置(1 〜 2,147,483,647) Variant型
戻り値 なし


使用例

説明 記述例 出力
(Sumple.txt)
12345
abcde
あいうえお
ファイルの指定位置のデータを読み込み
(例では10バイト目以降の1行を取得)
Dim n   As Integer
Dim str As String

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

Seek #n, 10
Line Input #n, str
Debug.Print str

Close #n
cde
ファイルの指定位置にデータを書き込み
(例では10バイト目から書き込み)
(指定位置に値が既にある場合は上書き)
Dim n   As Integer
Dim str As String

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

Seek #n, 10
Print #n, "ABC"

Close #n
(Sumple.txt)
12345
abABC
あいうえお


動作検証

説明 記述例 出力
ファイルサイズを超えた位置を指定してもエラーにはならないようです。
※この状態でInputステートメントLine InputステートメントInput関数を使うとエラーとなります。
On Error GoTo ERR_HANDLER

Dim n   As Integer
Dim str As String

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

Seek #n, 100
Line Input #n, str
Debug.Print str

ERR_HANDLER:

Close #n

If Err > 0 Then Debug.Print Error
ファイルにこれ以上データがありません。
ファイルサイズを超えた位置を指定してもエラーにはならないようです。
※この状態でデータを書き込むと指定位置までの間は半角スペースで埋められるようです。
On Error GoTo ERR_HANDLER

Dim n   As Integer
Dim str As String

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

Seek #n, 30
Print #n, "ABC"

ERR_HANDLER:

Close #n

If Err > 0 Then Debug.Print Error
(Sumple.txt)
12345
abcde
あいうえお     ABC
1 〜 2,147,483,647の範囲外の値を指定するとエラーとなります。
On Error GoTo ERR_HANDLER

Dim n   As Integer
Dim str As String

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

Seek #n, 0

ERR_HANDLER:

Close #n

If Err > 0 Then Debug.Print Error
レコード番号が不正です。
On Error GoTo ERR_HANDLER

Dim n   As Integer
Dim str As String

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

Seek #n, 2147483648#

ERR_HANDLER:

Close #n

If Err > 0 Then Debug.Print Error
オーバーフローしました。


コメント
コメントする








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