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

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

このステートメントはファイルにデータを書き込む際に使用します。
文字列以外のデータ型(ユーザー定義型や配列も)のデータを書き込むことができます。

基本的にPutステートメントで書き込んだデータはGetステートメントで読み込みます。

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


概要

Put #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

'書き込み
Put #n, , "11111"
Put #n, , "22222"
Put #n, , "33333"
Put #n, 2, "ABC"

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

Close #n
11111
ABC
33333
ファイルの書き込み
(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()  As Byte
Dim rec     As Byte
Dim cnt     As Long
Dim n       As Integer

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

'書き込み
Put #n, , "111"
Put #n, , "222"
Put #n, , "333"
Put #n, 5, "AB"

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

Close #n
1112AB333


動作検証

説明 記述例 出力
Lenより変数のサイズが大きい場合はエラー
(Randomモード)
On Error GoTo ERR_HANDLER

Dim rec As MyType
Dim n   As Integer

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

'書き込み
rec.num = 1
rec.str = "A"
Put #n, , rec

Close #n

ERR_HANDLER:

Close

If Err > 0 Then Debug.Print Error
レコード長が一致しません。
Outputモードで
使用するとエラー
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
Put #n, , "12345"
Close #n

ERR_HANDLER:

Close

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


コメント
コメントする








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