FreeBASIC マニュアルのトップに戻る

FreeBASIC Putfileio

目次→実行時ライブラリー参考→ファイル入出力関連PUT (File I/O)←オリジナル・サイト

PUT (ファイル入出力) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

バッファからファイルに、データを書きます。

構文:
Put #filenum As long, [position As longint], data As Any [, amount As Uinteger]
Put #filenum As long, [position As longint], data As String
Put #filenum As long, [position As longint], data() As Any

用法:
Put #filenum, position, data [, amount]
varres = Put (#filenum, position, data [, amount])

パラメタ:
filenum
ファイルを開いたときに、Open に渡した値。
position
position は、ファイルで、Put を始める位置です。
ファイルを、For Random で開いたら、record で位置を与えます。それ以外なら、バイトで、位置を与えます。
位置を省略すると、現在のファイル・ポインタの位置から書き始めます。
位置は1を起点としています: すなわち、ファイルの先頭レコードか先頭バイトが、位置 1 になります。
position が省略されるか、または、ゼロ(0)なら、ファイルの書き始めは、現在のファイル位置からになります。
data
data は、データが書き込まれるバッファです。数値変数、文字列、配列、ユーザ定義型(This で参照されるものを含む)が可能です。操作では、amount が指定されない限り、変数全体をディスクに転送しようとします。ユーザ定義型のインスタンスの場合、影響を受けるデータは非静的なデータ・メンバのみです。
配列を Put するきは、data の後に空の大括弧 '()' を付けなければなりません。Put は配列の全データを書き込みます。amount は許可されていません。
文字列(String)を Put する場合、書き込むバイト数は、文字列データのバイト数と同じです。amount は許可されていません。

注意:
バッファから値を書くとき、pointerをバッファに渡してはいけません。 代わりに、バッファの最初の変数を渡さなければなりません。 (これは、演算子 * (Value of)で、ポインターを逆参照することによって、行います。)
直接 pointer を渡すと、Put は、ポインターが示すメモリではなく、ポインタ変数からメモリを置くでしょう。
amount
Put は、 amount だけ連続した変数を、ファイルに書きます。
すなわち、メモリで data の場所で始まる、データの( amount * Sizeof(data) )バイトを、ファイルに書きます。
amount を省略すると、それは、デフォルトの 1 になります。つまり、 Put が、ただ一つの変数を書くことを意味します。

戻り値:
Put() は、32ビット Long を返します:成功すると 0 を返します。 エラーの時はゼロではありません。
"disk full(ディスク満杯)" はエラーとみなされ、戻りコード 3 が返されます。
以前に書き込まれた "正確" なデータ量は利用できず、まったく役に立たないでしょう。

記述:
バッファ変数から、BinaryRandom モードで開かれたファイルに、バイナリ・データを書きます。

Put は、関数として使用できます。成功の場合は 0 を、失敗の場合はエラーコードを返します。

ファイルを、Random モードで開くときは、書くためのデータの、バイト表現のサイズは、指定したレコード・サイズに合わせなければなりません。

注意:
- 実際の [w/z]string 変数を Put に渡すとき、文字列を渡すときと同様に amount パラメータを禁止する必要があります。
使用しないこと、さもないと、ファイルに書き込む文字列の長さを乗算するために使われますが、提供された [w/z]string バッファの外側にオーバーフローする可能性があり、危険なものです。
- 逆参照された [w/z]string ポインターを Put に渡すとき、逆参照された数値ポインターを渡すときのように、amount パラメーターは考慮されません。
使用しないでください。ただし、amount パラメーターは尊重されずに、指定されたバッファーは、ゼロ要素(除外される端末要素)までファイルに書き込まれます。
- より細かくするために、最初の数値要素と、処理される数値要素の数を指定することにより、任意の [w/z]string 変数を数値バッファーとして Put に安全に渡すことができます。 最初の数値要素には、インデックス付けされた [w/z]string 変数、または逆参照された [w/z]string ポインタがインデックス付けされます。

例:
' ファイル番号のための変数と、置く数をつくります
Dim As Integer f
Dim As Long value

' 最初の空いているファイルのファイル番号を見つけます。
f = FreeFile()

' ファイル番号「f」を使って、2進の用法のために "file.ext" というファイルを開きます。
Open "file.ext" For Binary As #f

  value= 10

  ' ファイルに、整数 'value' のバイトを書きます。ファイル番号「f」を使います。
  ' 書き始めは,ファイル (position 1) の頭です。
  Put #f, 1, value

' ファイルを閉じます。
Close #f



' 整数配列を作ります。
Dim buffer(1 To 10) As Integer
For i As Integer = 1 To 10
    buffer(i) = i
Next

' 最初の空いているファイルのファイル番号を見つけます。
Dim f As Integer
f = FreeFile()

' ファイル番号「f」を使って、2進の用法のために"file.ext"というファイルを開きます。
Open "file.ext" For Binary As #f
' ファイルに、配列を書きます。ファイル番号「f」を使います。
配列から書き込み ' 書き始めは,ファイル (position 1) の頭です。
Put #f, 1, buffer()

' ファイルを閉じます。
Close #f



例:
Dim As Byte Ptr lpBuffer
Dim As Integer hFile, Counter, Size

Size = 256

lpBuffer = Allocate(Size)
For Counter = 0 To Size-1
  lpBuffer[Counter] = (Counter And &HFF)
Next

' 空いているファイルのファイル番号を見つけます。
hFile = FreeFile()

' バイナリ書き出しモードで、"test.bin"というファイルを開きます。
Open "test.bin" For Binary Access Write As #hFile

  ' lpBuffer によって、ポイントされたメモリから、256バイトを書きます。
256バイト書く   Put #hFile, , lpBuffer[0], Size

' ファイルを閉じます。
Close #hFile

' 割り当てられたメモリを解放します。
Deallocate lpBuffer



' 「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からの違い:

参照:
ファイル入出力関連に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2022-05-24 10:43:19
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承