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