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

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

このステートメントはファイルからデータを読み込む際に使用します。
文字列以外のデータ型(ユーザー定義型や配列も)のデータを取得することもできます。
1回の実行で変数のサイズ分だけデータを取得します。

基本的にPutステートメントで書き込んだデータを読み込む際に使用します。

Binary/Randomモードでのみ使用可能です。


概要

Get #FileNumber, [RecNumber], VarName
機能 ファイルからデータを読み込み、指定の変数にデータを格納する。
引数 FileNmber Openステートメントで指定したファイル番号 Variant型
RecNumber (省略可能)
Randomモード時:読み込み開始レコード位置
Binaryモード時:読み込み開始バイト位置
Variant型(Long型)
VarName 読み込んだデータを格納する変数 Variant型
戻り値 なし




使用例

説明 記述例 出力
ファイルの読み込み
(文字列型)
(Randomモード)
Dim rec As String
Dim n   As Integer
Dim i   As Long

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

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

'読み込み
Seek #n, 1
Do Until EOF(n)
    Get #n, , rec
    Debug.Print rec
Loop

Close #n
A1
B2
C3
D4
E5
ファイルの読み込み
(日時型)
(Randomモード)
Dim rec As Date
Dim n   As Integer
Dim i   As Long

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

'書き込み
For i = 1 To 5
    rec = DateAdd("d", i - 1, Now)
    Put #n, i, rec
Next i

'読み込み
Seek #n, 1
Do Until EOF(n)
    Get #n, , rec
    Debug.Print Format(rec, "mm/dd")
Loop

Close #n
05/09
05/10
05/11
05/12
05/13
ファイルの読み込み
(ユーザ定義型)
(Randomモード)
Public Type MyType
    num  As Integer
    str  As String * 3
End Type
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 5
    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  
4:D  
5:E  
指定位置のデータのみ取得
(Randomモード)
Dim rec As String
Dim n   As Integer

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

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

'読み込み
Get #n, 2, rec
Debug.Print rec

Close #n
B2
ファイルの読み込み
(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

'書き込み
Put #n, , "12345" & vbCrLf
Put #n, , "abcde" & vbCrLf
Put #n, , "あいうえお" & vbCrLf

'読み込み
Seek #n, 1
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
あいうえお
指定位置のデータのみ取得
(Binaryモード)
Dim recs(3) As Byte
Dim cnt     As Long
Dim n       As Integer

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

'書き込み
Put #n, , "12345" & vbCrLf
Put #n, , "abcde" & vbCrLf
Put #n, , "あいうえお" & vbCrLf

'読み込み
Get #n, 3, recs
Debug.Print StrConv(recs, vbUnicode)

Close #n
345


動作検証

説明 記述例 出力
データは変数のサイズ分だけ取得する
(Randomモード)
Dim rec As MyType
Dim recs(2) As MyType
Dim str As String
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 5
    rec.num = i
    rec.str = Chr(Asc("A") + i - 1)
    Put #n, i, rec
Next i

Close #n

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

'読み込み
Get #n, , recs
For i = LBound(recs) To UBound(recs)
    Debug.Print recs(i).num & ":" & recs(i).str
Next i

Close #n
1:A  
2:B  
3:C  
Lenより変数のサイズが大きい場合はエラー
(Randomモード)
On Error GoTo ERR_HANDLER

Dim rec As MyType
Dim recs(2) As MyType
Dim str As String
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 5
    rec.num = i
    rec.str = Chr(Asc("A") + i - 1)
    Put #n, i, rec
Next i

Close #n

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

'読み込み
Get #n, , recs
For i = LBound(recs) To UBound(recs)
    Debug.Print recs(i).num & ":" & recs(i).str
Next i

Close #n

ERR_HANDLER:

Close

If Err > 0 Then Debug.Print Error
レコード長が一致しません。
データは変数のサイズ分だけ取得する
(Binaryモード)
Dim recs(10) As Byte
Dim cnt    As Long
Dim n      As Integer
Dim i   As Long

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

'書き込み
Put #n, , "12345" & vbCrLf
Put #n, , "abcde" & vbCrLf
Put #n, , "あいうえお" & vbCrLf

'読み込み
Seek #n, 1
Get #n, , recs
Debug.Print StrConv(recs, vbUnicode)

Close #n
12345
abcd
データは変数のサイズ分だけ取得する
(Lenは無視される)
(Binaryモード)
Dim recs(10) As Byte
Dim cnt    As Long
Dim n      As Integer
Dim i   As Long

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

'書き込み
Put #n, , "12345" & vbCrLf
Put #n, , "abcde" & vbCrLf
Put #n, , "あいうえお" & vbCrLf

'読み込み
Seek #n, 1
Get #n, , recs
Debug.Print StrConv(recs, vbUnicode)

Close #n
12345
abcd
Inputモードで
使用するとエラー
On Error GoTo ERR_HANDLER

Dim recs   As String * 64
Dim cnt    As Long
Dim n      As Integer

n = FreeFile

'書き込み
Open "D:¥Sumple.txt" For Output As #n
Print #n, "12345"
Close #n

'読み込み
Open "D:¥Sumple.txt" For Input As #n
Seek #n, 1
Get #n, , recs

Debug.Print StrConv(recs, vbUnicode)

Close #n

ERR_HANDLER:

Close

If Err > 0 Then Debug.Print Error
ファイル モードが不正です。


コメント
コメントする








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