VB6・VBA関数メモ:Loc関数

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

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

Seek関数と機能は似ていますが、Input/Output/Appendモードの場合は128で割った値を返します。
Binary/Randomモードの場合はSeek関数の値 - 1が返るようです。

いろいろ調べましたが、正直使い道がよくわからないです…;(詳しい方教えてください)


概要

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


使用例

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

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

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

Seek #n, 128
Debug.Print Loc(n)

Seek #n, 256
Debug.Print Loc(n)

Close #n
 1
 1
 2
ファイルの現在の読み書きバイト位置-1を取得
(Binaryモード)>
Dim n   As Integer

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

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

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

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

Close #n
 0
 2
 4
ファイルの現在の読み書きレコード位置-1を取得
(Randomモード)>
Public Type MyType
    num  As Integer
    str  As String * 3
End Type
Dim rec As MyType

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

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

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

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

Close #n
0 
2  
4  


動作検証

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

Dim pos As Long

pos = Loc(2)
Debug.Print pos

ERR_HANDLER:

Close #n

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


コメント
コメントする








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