ファイルからバッファに、データを読み込みます。
構文:
Get #filenum As Long, [position As longint], ByRef data As Any [, [amount As Uinteger] [, ByRef bytesread As Uinteger] ]
Get #filenum As Long, [position As longint], data As String [, , ByRef bytesread As Uinteger ]
Get #filenum As Long, [position As longint], data() As Any [, , ByRef bytesread As Uinteger ]
用法:
Get #filenum, position, data
[, [amount] [, bytesread ] ]
varres = Get
(#filenum, position, data [, [amount] [, bytesread ] ] )
パラメタ:
filenum
position
読み込み始める位置。
For Random でファイルを開いたとき、位置は record で指定します。
それ以外の場合は、バイトで指定します。
position を省略すると、読み込みは、現在のファイル・ポインタ位置から始まります。
位置は 1 を起点としています:
つまり、ファイルの最初の record かバイトは、位置
1 になります。
position を省略するか、またはゼロ (
0) とすると、ファイルの読み込みは、現在のファイル位置から始まります。
data
データが書き込まれるバッファ。
data は、数値変数、文字列、配列、ユーザー定義型 (
This によって参照されるものを含む)、逆参照されたポインターを指定できます。
読み取り操作は、
EOF に達するまで、変数を完全に埋めようとします。
ユーザー定義型インスタンスの場合、影響を受ける
data は非静的データ メンバーのみです。
配列を取得する場合、
data の後に空の括弧: "
()" を付ける必要があります。
Get は、配列内のすべての値のデータを読み取ります。
amount は許可されていません。
String を取得する場合、読み取られるバイト数は文字列データのバイト数と同じです。
amount は許可されていません。
注意:
値をバッファに読み込む場合は、ポインタをバッファに渡さないでください。 代わりに、バッファー内の最初の変数を渡す必要があります (これは、ポインターを
演算子 * (Value of) で逆参照することで実行できます)。 ポインターを直接渡すと、
Get はポインター変数が指すメモリではなく、ポインター変数を上書きします。
amount
Get は、ファイルから、
amount だけ連続した変数を、メモリに読み込みます。すなわち、
Get は、ファイルから、
(amount * Sizeof(data) ) バイトのデータを、
dataの記憶域から始まるメモリに、読み込みます。
amount を省略すると、
amount は、デフォルトの
1 になります。従って、
Get は、ただただ一つの変数を読みます。
bytesread
ファイルからうまく読んだバイト数の結果を受け入れための、符号なしの整数変数です。
戻り値:
Get() は、32 bit
Long を返します : 成功時はゼロ(
0) ; エラーの場合は非ゼロ
注意:
読んでいる間に、
EOF (ファイルの終り)に達すると、
Get は成功を返します。
bytesread 変数を渡して、実際に読まれたバイト数をチェックできます。
記述:
ファイルから、バッファ変数に、バイナリ・データを読み込みます。
Get は、関数として使用できて、成功したときは 0 を、失敗のときはエラーコードを返します。
ファイルを、
Random モードで開くときは、読むデータのバイト表現でのサイズは、指定したレコード・サイズに合わせなければなりません。
注意:
- 実際の [w/z]string 変数が Get に渡される場合、文字列を渡すときのように、amount パラメーターは禁止する必要があります。使用禁止です。そうしないと無視されます(「0」値を除く)。
- 逆参照された [w/z]string ポインターが Get に渡された場合、逆参照された数値ポインターを渡すときのように、amount パラメーターは考慮されません。 使用禁止です。 ただし、amount パラメーターを尊重する代わりに、指定されたバッファーは、少なくとも読み取る要素の数と同じ数の非ゼロ要素で開始する必要があります。
- 細分性を高めるために、最初の数値要素(インデックス付きの [w/z]string 変数、または逆参照された [w/z]string ポインターでインデックスが付き)および処理される数値要素の数を指定することで、任意の [w/z]string 変数を数値バッファーとして Get に安全に渡すことができます。
例:
Dim Shared f As Integer
Sub get_long
()
Dim buffer As Long ' Long 変数
' ファイル番号 "f" を使って、ファイルから Long (4 bytes) をバッファに読み込みます。
Get #f, , buffer
' 結果を印刷します。
Print buffer
Print
Sleep
End Sub
Sub get_array
()
Dim an_array(0 To 10-1) As Long ' Long の配列
' ファイル番号 "f" を使って、ファイルから、10 個の Long (10 * 4 = 40 bytes) を配列に読み込みます。
Get #f, , an_array
()
' 結果を印刷します。
For i As Integer = 0 To 10-1
Print an_array
(i)
Next
Print
Sleep
End Sub
Sub get_mem
Dim pmem As Long Ptr
' 5 つの Long のために、メモリを割り当てます。
pmem = Allocate
(5 * SizeOf(long))
' ファイルから、5つの Long (5*4 = 20バイト)を、割り当てられたメモリに読み込みます。
Get #f, , *pmem, 5 ' 注:pmem は、逆参照されなければなりません
(*pmem, または pmem[0])
' [] ポインタ Indexing を使って、結果を印刷します。
For i As Integer = 0 To 5-1
Print pmem
[i]
Next
Print
' ポインタ・メモリを解放して、メモリ・リークを防ぎます。
Deallocate pmem
Sleep
End Sub
' 最初の空いているファイル番号を見つけます。
f = FreeFile
' ファイル番号 "f" を使って、2進の用法で、"file.ext" というファイルを開きます。
Open "file.ext" For Binary As #f
get_long
()
get_array
()
get_mem
()
' ファイルを閉じます
Close #f
' 小さいテキストファイルを、文字列変数にロードします。
' 事前に、プログラムと同じフォルダに「smallfile.txt」を作成しておいて下さい。
Function LoadFile(ByRef filename As String) As String
Dim h As long
Dim txt As String
h = FreeFile
If Open( filename For Binary Access Read As #h ) <> 0 Then Return ""
If LOF(h) > 0 Then
txt = String
(LOF(h), 0)
If Get( #h, ,txt ) <> 0 Then txt = ""
End If
Close #h
Return txt
End Function
Dim ExampleStr As String
ExampleStr = LoadFile
("smallfile.txt")
Print ExampleStr
Sleep
'「THIS」は、UDT インスタンスのすべての非静的データをファイルに対して、書き込み/充当の引数として使用できます。
Type UDT
Dim As String * 32 s
Dim As Double d
Declare Sub Save(ByRef filename As String)
Declare Sub Load(ByRef filename As String)
End Type
Sub UDT.Save(ByRef filename As String)
Dim As Integer f
f = FreeFile()
Open filename For Binary As #f
Put #f, , This '' writes all non-static data of the UDT instance to the file
Close #f
End Sub
Sub UDT.Load(ByRef filename As String)
Dim As Integer f
f = FreeFile()
Open filename For Binary As #f
Get #f, , This '' fills all non-static data of the UDT instance from the file
Close #f
End Sub
Dim As UDT u1
u1.s = "PI number"
u1.d = 3.14159
u1.Save("file.ext")
Dim As UDT u2
u2.Load("file.ext")
Print u2.s
Print u2.d
QBからの違い:
-
FB の Get は、VB のように、配列全体を読むことができます。あるいはまた、メモリに、データ・サイズの倍数を読み取ることができます。
-
Get は、FB で、関数として使用できます。エラー処理手続きを使わずに、成功/エラーコードを取得できます。
-
FB は、首尾よく読まれたバイト数をチェックするために bytesread パラメタを使えます。
参照: