Get ステートメント
開いているディスク ファイルから変数にデータを読み込みます。
構文
Get [ # ] filenumber, [ recnumber ], varname
Get ステートメントの構文には、次の指定項目があります。
パーツ | 説明 |
---|---|
filenumber | 必須。 任意の有効なファイル番号です。 |
recnumber | 省略可能。 長整数型 (Long) のバリアント型 (Variant)。 読み取りが開始される場所のレコード番号 (Random モード ファイル) またはバイト番号 (Binary モード ファイル) です。 |
varname | 必ず指定します。 データの読み込み先となる有効な変数名です。 |
注釈
Get で読み取られたデータは、通常、Put を使用してファイルに書き込まれます。 ファイルの最初のレコードまたはバイトは位置 1 になり、2 番目のレコードまたはバイトは位置 2 になります。これ以降も同様です。 recnumber を省略すると、最後の Get ステートメントまたは Putステートメント (または最後の Seek 関数が指す) の後の次のレコードまたはバイトが読み取られます。 区切り記号のコンマを含める必要があります。次に例を示します。
Get #4,,FileBuffer
Random モードで開いたファイルには、次のルールが適用されます。
読み取られるデータの長さが Open ステートメントの Len 句で指定された長さより小さい場合、Get はレコード長の境界で後続のレコードを読み取ります。 1 つのレコードの末尾と次のレコードの先頭の間の領域には、ファイル バッファの既存のコンテンツが埋め込まれます。 埋め込みデータの量を確実に決定することはできないので、一般に、レコード長を、読み取られるデータの長さに一致させることをお勧めします。
読み込まれる変数が可変長の文字列の場合、Get により、文字列の長さが含まれる 2 バイトの記述子が読み取られた後に、変数に入れられるデータが読み取られます。 したがって、Open ステートメントの Len 句に指定するレコード長には、文字列の実際の長さよりも 2 バイト以上長い値を指定する必要があります。
読み込まれる変数が数値型の Variant の場合、Get は Variant の VarType を識別する 2 バイトを読み取り、変数に入るデータを読み取ります。 たとえば、VarType 3 の Variant を読み取る場合、Get は 6 バイトを読み取ります。バリアントをVarType 3 (Long) として識別する 2 バイトと、Long データを含む 4 バイトを読み取ります。 Open ステートメントの Len 句で指定するレコード長は、変数を格納するために必要な実際のバイト数よりも 2 バイト以上長い値にする必要があります。
注:
Get ステートメントを使用してディスクから Variant配列を読み取りますが、Get を使用して配列を含むスカラー Variant を読み取ることはできません。 また、 Get を使用して、オブジェクトをディスクから読み取ることもできません。
読み込まれる変数が、VarType 8 (文字列型 (String)) のバリアント型 (Variant) である場合、Get により、VarType を識別する 2 バイトおよび文字列の長さを示す 2 バイトが読み取られた後に、文字列データが読み取られます。 Open ステートメントの Len 句に指定するレコード長には、文字列の実際の長さよりも 4 バイト以上長い値を指定する必要があります。
読み込まれる変数が動的配列の場合、Get により、次元数の 8 倍に 2 を加えた値 (つまり、2 + 8 * NumberOfDimensions) の長さの記述子が読み取られます。 Open ステートメントの Len 句に指定するレコード長には、配列データと配列記述子を読み取るために必要なすべてのバイト数の合計以上の値を指定する必要があります。 たとえば、以下の配列宣言では、配列をディスクに書き込む場合に 118 バイト必要です。
Dim MyArray(1 To 5,1 To 10) As Integer
118 バイトは、記述子 () の場合は 18 バイト、データ
5 * 10 * 2
(2 + 8 * 2
) の場合は 100 バイトです。読み込まれる変数が固定サイズの配列の場合、Get によりデータのみが読み取られます。 記述子は読み取られません。
読み込まれる変数がその他の種類の変数 (可変長の文字列またはバリアント型 (Variant) ではない) の場合、Get により変数のデータのみが読み取られます。 Open ステートメントの Len 句に指定するレコード長には、読み取られるデータの長さ以上の値を指定する必要があります。
要素間にパディングが存在しない点を除き、それぞれが個別に読み取られているかのように、ユーザー定義型の読み取り要素を取得します。 ディスク上では、ユーザー定義型の動的配列 ( Put で書き込まれます) には、長さが次元数の 2 倍と 8 倍の記述子 (つまり、2 + 8 * NumberOfDimensions) がプレフィックスとして付けられます。 Open ステートメントの Len 句で指定されるレコード長は、配列とその記述子を含め、個々の要素の読み取りに必要なすべてのバイトの合計以上である必要があります。
Binary モードで開いたファイルには、Random のすべてのルールが適用されますが、次に示す例外があります。
Open ステートメントの Len 句の影響はありません。 すべての 変数をディスクから連続して読み取ります。つまり、レコード間にパディングはありません。
ユーザー定義型内の配列以外の配列では、Get によりデータのみが読み取られます。 記述子は読み取られません。
Get により、ユーザー定義型の要素ではない可変長の文字列が、2 バイト長の記述子を想定せずに読み取られます。 読み取られるバイト数は、文字列に既に含まれている文字の数と等しいものです。 たとえば、以下のステートメントでは、10 バイトがファイル番号 1 から読み取られます。
VarString = String(10," ") Get #1,,VarString
例
この例では、Get ステートメントを使用して、ファイルから変数にデータを読み込みます。 この例では、 TESTFILE
が、ユーザー定義型 Record
の 5 つのレコードが含まれているファイルであることを前提としています。
Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record, Position ' Declare variables.
' Open sample file for random access.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' Read the sample file using the Get statement.
Position = 3 ' Define record number.
Get #1, Position, MyRecord ' Read third record.
Close #1 ' Close file.
関連項目
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。