Get ステートメント
Open ステートメント をランダムアクセスモード(Random)または、バイナリモード(Binary)で開いたファイルのデータを読み込みます。
【構文】
Get #filenumber, [ recnumber ], varname
引数・戻り値
- filenumber ・・・ Open ステートメント で、割り当てられたファイル番号を指定します。
- recnumber ・・・ ランダムアクセスモード(Random)の場合、読み込みを開始する場所のレコード、バイナリモード(Binary)の場合、読み込みを開始する場所のバイト番号を指定します(省略可)。
- varname ・・・ データを読み込んだ内容を格納する変数の名前を指定します(省略不可)。
- filenumber ・・・ Open ステートメント で、割り当てられたファイル番号を指定します。
- recnumber ・・・ ランダムアクセスモード(Random)の場合、読み込みを開始する場所のレコード、バイナリモード(Binary)の場合、読み込みを開始する場所のバイト番号を指定します(省略可)。
- varname ・・・ データを読み込んだ内容を格納する変数の名前を指定します(省略不可)。
ファイル内の最初のレコードまたはバイトの位置は 位置 1、次のレコードまたはバイトの位置は 位置 2 となり、これ以降も同様です。引数 recnumber を省略すると、最後の Get か Put ステートメントの次のレコード(バイト)、または最後の Seek 関数によって指定された位置の次のレコード(バイト)からデータが読み込まれます。省略する場合には、区切り文字のカンマ(,)を含める必要があります。
Random モードで開いたファイルの場合、一般に、レコード長は、読み込まれるデータの長さに一致させます。読み込まれるデータの長さが、Open ステートメントの Len 句に指定された長さよりも短い場合、Get により、以降のレコードがレコード長境界で読み込まれます。
通常、Get ステートメントによって読み取られるデータは、Put ステートメントによってファイルに書き込まれます。
Get ステートメント 使用例
サンプルVBAソース 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Sub Sample_Get_Binary1() 'バイナリモードでファイルを開く 'ファイルに数値を保存、実行するたびに数値を1づつ増やす Const FName = "myCounter" 'ファイル名 Const formatNum = "000000" 'strNum のフォーマット Dim FileName As String Dim FNum As Integer Dim num As Long 'カウンターの数値 Dim strNum As String * 6 'カウンターの数値 FileName = "C:\Documents\mydata\" & FName FNum = FreeFile 'ファイル番号取得 num = 1 'ファイルを開く(Binary モード、読み込み・書き込みロック) Open FileName For Binary Lock Read Write As #FNum 'ファイルサイズを確認して、ファイルが新規作成されたかどうかを確認 If LOF(FNum) > 0 Then '既存ファイルからデータを取得し、1 を加算 Get #FNum, 1, strNum num = CLng(strNum) + 1 End If strNum = Format(num, formatNum) 'ファイルに書き込み Put #FNum, 1, strNum 'ファイルを閉じる Close #FNum End Sub |
サンプルVBAソース 1 実行結果
サンプルVBAソース 1 を実行して作成・更新されたファイルの内容
一番最初の実行後
二回目の実行後
サンプルVBAソース 2
テキストファイル:データを書き込む(Print # ステートメント) の「サンプルVBAソース 1」を実行して作成された「file02.html」の内容を読み込んで表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Sub Sample_Get_Binary2() 'バイナリモードでファイルを開く 'Get ステートメントで、ファイルの内容を取得する(buf または buf2) Dim FileName As String Dim FNum As Integer Dim buf() As Byte 'Dim buf2 As String FileName = "C:\Documents\mydata\file02.html" FNum = FreeFile 'ファイル番号取得 'ファイルが存在しない場合は終了 If Dir(FileName) = "" Then MsgBox "ファイルが見つかりませんでした。" Exit Sub End If 'ファイルを開く Open FileName For Binary As #FNum 'ファイルサイズを取得、変数 buf の大きさを確保 ReDim buf(1 To LOF(FNum)) 'buf2 = String(LOF(FNum), " ") 'データを取得 Get #FNum, , buf 'Get #FNum, , buf2 'ファイルを閉じる Close #FNum '表示 MsgBox StrConv(buf, vbUnicode) 'MsgBox buf2 End Sub |
サンプルVBAソース 2 実行結果
サンプルVBAソース 3
テキストファイル:データを書き込む(Put ステートメント) の「サンプルVBAソース 3」を実行して作成された「test02.html」の内容を読み込んで表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
Type Record ID As Integer Name As String * 20 RDate As Date End Type --------------------------------------------------------------------------------------------- Sub Sample_Get_Random() 'ファイルにデータを書き込む '(Random モード / Put ステートメント) Dim myRecord As Record Dim FileName As String Dim FNum As Integer Dim str As String FileName = "C:\Documents\mydata\test02.txt" FNum = FreeFile 'ファイルが存在しない場合は終了 If Dir(FileName) = "" Then MsgBox "ファイルが見つかりませんでした。" Exit Sub End If 'ファイルを開く(Random Open FileName For Random As #FNum Len = Len(myRecord) With myRecord '3 番目のレコードを取得 Get #FNum, 3, myRecord str = .ID & vbTab & .Name & .RDate '4 番目のレコードを取得 Get #FNum, 4, myRecord str = str & vbCrLf & .ID & vbTab & .Name & .RDate End With Close #FNum '取得した内容を表示 MsgBox str End Sub |