ファイル 文字操作テキストファイルにテキストデータを追加する関連一式

VB&VBA
FROG ふろっぐ
 
  • オプション

    本文印刷

    お気に入りに追加

  • 検索

    Googlewwwjp-ia
     

    Googlewwwjp-ia
     
  • 情報

  • 関連

[VB&VBA][ファイル 文字操作テキストファイルにテキストデータを追加する関連一式]

Sub test()
          '
          '’テキストファイルにテキストデータを追加する
          '
    Dim vntNewData() As Variant
    Dim lngX As Long
    Dim FILENO As Integer
    Const OldFile As String = "C:\Documents and Settings\アイエイ\デスクトップ\test\old.txt"
    Const NewFile As String = "C:\Documents and Settings\アイエイ\デスクトップ\test\new.txt"

    FILENO = FreeFile
          ''※FreeFile:
          ''※使用可能なファイル番号を取得。
          ''※(既に使われているファイル番号を重複して使うのを防ぐ。)

    Open OldFile For Input As #FILENO
          ''※Open 〜 For Input As #〜
          ''※シーケンシャル入力モード (Input) で開いたファイルから行全体を読み込み、
          ''※文字列型 (String) の変数に代入する。

    Do Until EOF(FILENO)
          ''※EOF(〜)
          ''※EOF 関数は、ファイルから読み込みを行っているとき、
          ''※読み込み位置がファイルの末尾に達していないかどうかを確かめるために使用。
          ''※EOF 関数はファイルの末尾に達していない場合、偽 (False) を返す。

    lngX = lngX + 1

    ReDim Preserve vntNewData(1 To lngX) As Variant
          ''※ReDim
          ''※ReDim ステートメントは、動的配列を宣言したり、
          ''※PrivatePublic、または Dim の各ステートメントにおいて、
          ''※次元の添字を省略した空のかっこだけを指定して宣言されている動的配列の、
          ''※要素数や次元数を変更するときに使います。
          ''※ReDim ステートメントは、配列の要素数や次元数を変更するために
          ''※何回でも使うことができます。

    Line Input #FILENO, vntNewData(lngX)
          ''※Line Input # 〜, 〜
          ''※シーケンシャル入力モード (Input) で開いたファイルから行全体を読み込み、
          ''※文字列型 (String) の変数に代入するファイル入出力ステートメントです。

    Loop

   Close #FILENO

   Open NewFile For Append As #FILENO
          ''※Open 〜  For 〜  As  #〜
          ''※ファイルを開いて、ファイルへ入出力できるようにします。
          ''※入出力処理を行うときには、その対象となるファイルを開く必要があります。
          ''※Open ステートメントはファイルに入出力のためのバッファを割り当て、
          ''※バッファに対するアクセス モードを決定します。

    For lngX = 1 To UBound(vntNewData)
          ''※UBound
          ''※配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。

    Print #FILENO, vntNewData(lngX)
          ''※Print 〜, 〜
          ''※シーケンシャル出力モード (Output または Append)
          ''※で開いたファイルにデータを書き込むファイル入出力ステートメントです。
          ''※通常、Print # ステートメントを使用して書き込んだデータは、
          ''※Line Input # ステートメントまたは Input 関数を使用して読み込みます。

    Next

    Close #FILENO
          ''※Close〜
          ''Open ステートメントで開いたファイルへの入出力を終了して、
          ''ファイルを閉じるファイル入出力ステートメント

End Sub


'◆FreeFile 関数
'
'●動作
'使用可能なファイル番号を整数型 (Integer) の値で返すファイル入出力関数
'
'●構文  FreeFile[(rangenumber)]
'rangenumber 省略可 ファイル番号の範囲をバリアント型 (Variant) で指定。指定した範囲から次に使用可能なファイル番号を返します。
'0 (既定値)1 〜 255 の範囲のファイル番号が返されます。
'1256 〜 511 の範囲のファイル番号が返されます。
'
'●解説
'使用可能なファイル番号を取得するために FreeFile 関数を使用します。
'既に使われているファイル番号を重複して使うのを防ぐことができます。
'
'●使用例
'FreeFile 関数を使って、次に使用可能なファイル番号を返します。この例では、
'ループ内で 5 つのファイルをシーケンシャル出力モード (Output) で開いています。
'各ファイルには、サンプル データが書き込まれているものと仮定します。

Dim MyIndex, FileNumber
For MyIndex = 1 To 5 ' ループを 5 回繰り返します。
FileNumber = FreeFile ' 未使用のファイル番号を取得します。
Open "TEST" & MyIndex For Output As #FileNumber ' ファイル名を作成します。
Write #FileNumber, "これはサンプルです。" ' 文字列を出力します。
Close #FileNumber ' ファイルを閉じます。
Next MyIndex
 
'◆Open ステートメント
'
'ファイルを開いて、ファイルへ入出力できるようにします。
'
'●構文  Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
'pathname 必須 文字列式にはファイル名を指定。フォルダ名、またはドライブ名も含めて指定できます。
'mode 必須 ファイル モードを示す、次のいずれかのキーワードを指定
'Append、Binary、Input、Output、または Random。
'省略すると、ファイルはランダム アクセス モードで開かれます。
'Access 省略可 開くファイルに対して行う処理を示す、次のいずれかのキーワードを指定
'Read、Write、または Read Write。
'lock 省略可 開くファイルに対する、他のプロセスからのアクセスを制御する、次のいずれかのキーワードを指定
'Shared、Lock Read、Lock Write、または Lock Read Write。
'filenumber 必須 1 〜 511 の範囲で任意のファイル番号を指定します。FreeFile 関数を使用して次に使用可能なファイル番号を取得する。
'reclength 省略可 32,767 バイト以下の数値を指定します。ランダム アクセス ファイルの場合は、レコード長を表します。
'シーケンシャル ファイルの場合は、バッファの容量を表します。
'
'●解説
'  入出力処理を行うときには、その対象となるファイルを開く必要があります。
Open ステートメントはファイルに入出力のためのバッファを割り当て、バッファに対するアクセス モードを決定します。
' 引数 pathname に指定したファイルが存在しない場合、ファイルを開くときに追加モード (Append)、
' バイナリ モード (Binary)、出力モード (Output)、またはランダム アクセス モード (Random) のいずれか
'  のモードが指定されている場合、新規に作成されて開きます。
' 引数 access は、開いたファイル上で行う操作を指定するキーワードです。
'  ファイルが別のプロセスのために既に開かれていて、指定したアクセスが実行できないとき、
Open ステートメントはファイルを開くことができず、エラーが発生します。
' Len 節および引数 reclen は、引数 mode に Binary を指定した場合は無視されます。
' シーケンシャル ファイルの場合、シーケンシャル ファイル内のレコード サイズは一定でないため、
' 引数 reclen の値はそれぞれのレコードのサイズと一致している必要はありません。
'
'●重要
' バイナリ モード、入力モード、およびランダム アクセス モードでは、ファイルを開いたまま、
'  別のファイル番号で同時に開くことができます。一方、追加モードと出力モードでは、
'  いったんファイルを閉じないと、別のファイル番号で再び開くことはできません。
'
'●使用例
'Open ステートメントを使って、さまざまなモードでファイルを開いています。
Open "TESTFILE" For Input As #1
' 他のモードで開く前に、このファイルを一度閉じます。
Close #1

'次のコード例では、ファイルを書き込み専用のバイナリ ファイル モード (Binary) で開きます。

Open "TESTFILE" For Binary Access Write As #1
' 他のモードで開く前に、このファイルを一度閉じます。
Close #1

'次のコード例では、ファイルをランダム アクセス モード (Random) で開きます。ファイルには、
'ユーザー定義の Record 型のレコードが含まれているものと仮定します。

Type Record ' ユーザー定義型を定義します。
ID As Integer
Name As String * 20
End Type

Dim MyRecord As Record ' 変数を宣言します。
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' 他のモードで開く前に、このファイルを一度閉じます。
Close #1

'次のコード例では、ファイルをシーケンシャル出力モード (Output) で開きます。どのプロセスからでも、
'ファイルの読み書きができます。

Open "TESTFILE" For Output Shared As #1
' 他のモードで開く前に、このファイルを一度閉じます。
Close #1

'次のコード例では、ファイルを読み込み専用のバイナリ ファイル モード (Binary) で開きます。
'他のプロセスから、このファイルを読むことはできません。

Open "TESTFILE" For Binary Access Read Lock Read As #1
 
'EOF 関数
'ランダム アクセス モード (Random) またはシーケンシャル入力モード (Input) で
'開いたファイルの現在位置がファイルの末尾に達している場合、ブール型 (Boolean) の値の真 (True) を
'含む整数型 (Integer) の値を返します。
'
'●構文 EOF(FileNumber)
'filenumber 任意の有効なファイル番号を表す整数型 (Integer) の数値を指定。この引数は必ず指定。
'
'●解説
'  EOF 関数は、ファイルから読み込みを行っているとき、読み込み位置がファイルの末尾に達していないかどうかを
'  確かめるために使用します。
' EOF 関数はファイルの末尾に達していない場合は、偽 (False) を返します。ランダム アクセス モード (Random)
'  またはバイナリ モード (Binary) でファイルを開いた場合、EOF 関数は最後に実行された Get ステートメントで
' レコード全体が読み込めなくなるまで偽 (False) を返します。
' バイナリ モードでファイルを開いた場合、Input 関数を使用して EOF 関数が真 (True) を返すまでファイルを読
' み込もうとすると、エラーが発生します。Input 関数を使用してバイナリ ファイルを読み込む場合は、EOF 関数の
' 代わりに、LOF 関数および Loc 関数を使用します。EOF 関数を使用する場合は、Get ステートメントを使用します。
' シーケンシャル出力モード (Output) で開いたファイルの場合は、常に真 (True) を返します。
'
'●使用例
'EOF 関数を使って、ファイルの終端に達したかどうかを調べます。この例では、ファイル MYFILE は、
'複数行のデータを含むテキスト ファイルと仮定します。

Dim InputData
Open "MYFILE" For Input As #1 ' シーケンシャル入力モードで開きます。
Do While Not EOF(1) ' ファイルの終端かどうかを確認します。
Line Input #1, InputData ' データ行を読み込みます。
Debug.Print InputData ' イミディエイト ウィンドウに表示します。
Loop
Close #1 ' ファイルを閉じます。
 
'◆Line Input # ステートメント
'
'●動作
'シーケンシャル入力モード (Input) で開いたファイルから行全体を読み込み、
'文字列型 (String) 変数に代入するファイル入出力ステートメントです。
'
'●構文  Line Input #filenumber, varname
'filenumber 必須 任意のファイル番号を指定
'varname 必須 バリアント型 (Variant) の変数または文字列型 (String) の変数の名前を指定
'
'●解説
'通常、Line Input # ステートメントを使用して読み込んだデータは、Print # ステートメントを使用して書き込みます。
Line Input # ステートメントは、ファイルからキャリッジ リターン (Chr(13)) または改行コード (Chr(13)) + Chr(10))
' の直前までのすべての文字を読み込みます。キャリッジ リターンと改行コードは、変数に読み込まれる文字列に
'追加されるのではなく、読み飛ばされます。
'
'●使用例
'Line Input # ステートメントを使って、シーケンシャル ファイルから 1 行ずつ読み込んで変数に代入しています。
'ファイル TESTFILE は、複数行のデータを含むテキスト ファイルと仮定します。

Dim TextLine
Open "TESTFILE" For Input As #1 ' ファイルを開きます。
Do While Not EOF(1) ' ファイルの終端までループを繰り返します。
Line Input #1, TextLine ' 行を変数に読み込みます。
Debug.Print TextLine ' イミディエイト ウィンドウに表示します。
Loop
Close #1 ' ファイルを閉じます。
 
'◆UBound 関数
'
'配列の指定された次元で使用できる添字の最大値を、長整数型 (Long) の値で返します。
'
'●構文    UBound(arrayname[, dimension])
'arrayname 必須 配列変数の名前です。変数の標準的な名前付け規則に従って指定。
'dimension 省略可 バリアント型 (内部処理形式 Long の Variant) の値を指定します。
'添字の最大値を調べる対象となる配列の次元を示す整数を指定します。最初の次元なら
'1、2 番目の次元なら 2、というように指定します。引数 dimension を省略すると、1 が指定されたものと見なされます。
'
'●解説
'UBound 関数は、LBound 関数と組み合わせて、配列のサイズを調べるために使います。
'配列の添字の最小値を調べるには、LBound 関数を使います。
'次のような配列が宣言されている場合、UBound 関数からは下の表のような値が返ります。

Dim A(1 To 100, 0 To 3, -3 To 4)
'ステートメント 戻り値
'UBound(A, 1) 100
'UBound(A, 2) 3
'UBound(A, 3)  4
'
'●使用例
'UBound 関数を使って、配列の指定された次元の添字として使える最大値を求めます。
Dim Upper
Dim MyArray(1 To 10, 5 To 15, 10 To 20)
' 配列変数を宣言します。
Dim AnyArray(10)
Upper = UBound(MyArray, 1) ' 10 が返ります。
Upper = UBound(MyArray, 3) ' 20 が返ります。
Upper = UBound(AnyArray) ' 10 が返ります。
 
'◆LBound 関数
'
'配列の指定された次元で使用できる最小の添字を、長整数型 (Long)の値で返します。
'
'●構文  LBound(arrayname[, dimension])
'arrayname 必須 配列変数の名前です。変数の標準的な名前付け規則に従って指定。
'dimension 省略可 バリアント型 (内部処理形式 Long の Variant) の値を指定します。
'添字の最小値を調べる対象となる配列の次元を示す整数を指定します。最初の次元なら
'1、2 番目の次元なら 2、というように指定します。引数 dimension を省略すると、1 が指定されたものと見なされます。
'
'●解説
' LBound 関数は、UBound 関数と組み合わせて、配列のサイズを調べるために使います。
'配列の添字の最大値を調べるには、UBound 関数を使います。
'次のような配列が宣言されている場合、LBound 関数からは下の表のような値が返ります。

Dim A(1 To 100, 0 To 3, -3 To 4)
'ステートメント 戻り値
'LBound(A, 1) 1
'LBound(A, 2) 0
'LBound(A, 3) -3
'
' 配列の添字の最小値の既定値は、0 または 1 です。この値は、Option Base ステートメントの設定によって決まります。
' Array 関数で作成された配列の添字は、0 から始まり、Option Base ステートメントの影響は受けません。
DimPrivatePublic、ReDimStatic のいずれかのステートメントで To 節を使って配列の次元を設定すると、
'  添字の最小値に任意の整数値を指定できます。
'
'●使用例
'LBound 関数を使って、配列内の指定された次元の添字として使える最小値を求めます。
'配列の添字の既定の最小値 0 を変更するには、Option Base ステートメントを使います。

Dim Lower
' 配列変数を宣言します。
Dim MyArray(1 To 10, 5 To 15, 10 To 20)
Dim AnyArray(10)
Lower = LBound(MyArray, 1) ' 1 を返します。
Lower = LBound(MyArray, 3) ' 10 を返します。
Lower = LBound(AnyArray)
Option Base の設定に応じて、0 または 1 を返します。
 
'◆Print # ステートメント
'
'●動作
'シーケンシャル出力モード (Output または Append) で開いたファイルにデータを書き込むファイル入出力ステートメントです。
'
'●構文  Print #filenumber, [outputlist]
'filenumber 必須 任意のファイル番号を指定
'outputlist 省略可 出力する式や数式または文字列式を指定
'
'●設定値  [{Spc(n) | Tab[(n)]}] [expression] [charpos]
'Spc(n)  出力するデータに n 個のスペースを挿入します。
'Tab(n) expression の出力位置を n 番目の桁位置に移動します。Tab 関数の引数 n に何も指定しない場合は、
'出力位置は次の印字領域の先頭になります。
'expression 出力する数式または文字列式を指定します。
'charpos 次の文字の出力位置を指定します。セミコロン (;) を指定すると、次の文字は最後の文字の直後から出力されます。
'Tab(n) 関数で出力位置の桁番号を指定できます。Tab 関数の引数 n に何も指定しないと、
'出力位置は次の印字領域の先頭になります。引数 charpos を省略すると、次の文字は次の行の先頭から出力されます。
'
'●解説
' 通常、Print # ステートメントを使用して書き込んだデータは、Line Input # ステートメントまたは Input 関数を
'使用して読み込みます。
' 引数 outputlist を省略し引数 filenumber の後ろに区切り記号だけを指定すると、ファイルに空白行を出力します。
'複数の式は、スペースまたはセミコロン (;) で区切ることができます。1 つのスペースは、1 つのセミコロン (;) と同じ働きをします。
' ブール型 (Boolean) のデータは、True または False という文字列で出力されます。キーワード True および
'False は国別情報に応じて翻訳されることはありません。
' 日付型 (Date) のデータは、コントロール パネルで設定した短い形式で書き込まれます。
'日付や時間の構成要素がないとき、またはゼロのときは、指定されている部分だけのデータがファイルに書き込みます。
' 引数 outputlist のデータが Empty 値の場合は、ファイルには何も書き込まれません。
'ただし引数 outputlist のデータが Null 値の場合は、Null という文字列がファイルに書き込まれます。
' エラー データは、Error errorcode という形式で出力されます。キーワード Error は国別情報に応じて
'翻訳されることはありません。
' Print # ステートメントを使用して書き込んだデータは、すべて国別情報に対応しています。
'書き込まれたデータは、適切な小数点記号を使用して書式設定されます。
' Print # ステートメントは、データのイメージをファイルに書き込むので、適切に出力するためにはデータを区切る必要があります。
'Tab 関数の引数 n に何も指定しないと、出力位置は次の印字領域の先頭になります。
'Print # ステートメントは、データ項目間のスペースもファイルに書き込みます。
'
'●備考
'Input # ステートメントを使って、ファイルからデータを正しく読み込むことができるように、
'データをファイルへ書き込むには、Print # ステートメントではなく、必ず Write # ステートメントを使用してください。
'Write # ステートメントを使うと、適切に各データ項目が区切られ、Input # ステートメントを使って
'確実にそのファイルを再び読み込むことができます。Write # ステートメントを使って書き込んだデータは、
'オペレーティング システムの国別情報の設定により正しく読み込むことができます。
'
'●使用例
'ファイルにデータを書き込みます。
Open "TESTFILE" For Output As #1 ' シーケンシャル出力モードで開きます。
Print #1, "これはテストです。" ' ファイルに文字列を書き込みます。
Print #1, ' ファイルに空白行を挿入します。
Print #1, "印字領域 1"; Tab; "印字領域 2"  ' 2 つの印字領域に分けて書き込みます。
Print #1, "皆さん"; " "; "こんにちは"   ' 文字列の間にスペースを挿入します。
Print #1, Spc(5); "スペース 5 文字"  ' 文字の前にスペースを 5 個挿入します。
Print #1, Tab(10); "こんにちは"  ' 10 桁目に文字列を印字します。

' ブール値、日付、Null 値、エラー値を割り当てます。
Dim MyBool, MyDate, MyNull, MyError
MyBool = False: MyDate = #2/12/1969#: MyNull = Null
MyError = CVErr(32767)
TrueFalse, Null 値, エラー値は、国別情報の設定によって変換されます。
' 日付リテラルは、短い日付形式 (コントロールパネルで設定) を使って、書き込まれます。
Print #1, MyBool; " は、ブール値です。"
Print #1, MyDate; " は、日付です。"
Print #1, MyNull; " は、Null 値です。"
Print #1, MyError; " は、エラー値です。"
Close #1 ' ファイルを閉じます。
 
 
'◆Close ステートメント
'Open ステートメントで開いたファイルへの入出力を終了して、ファイルを閉じるファイル入出力ステートメントです。
'
'●構文  Close [filenumberlist]
'filenumberlist 任意のファイル番号を 1 つまたは複数指定します。この引数は省略可能です。
'複数のファイル番号を指定する場合は、次に示す構文を使用します。
'[[#]filenumber] [, [#]filenumber] . . .
'
'●解説
'引数 filenumberlist を省略すると、Open ステートメントで開いたすべてのファイルが閉じられます。
'シーケンシャル出力モード (Output または Append) で開いたファイルを閉じたとき、出力バッファに残っているデータは、
'そのファイルに対するオペレーティング システム バッファに書き込まれます。
'閉じたファイルが使用していたバッファ領域はすべて解放されます。
'Close ステートメントでファイルを閉じると、そのファイルに割り当てられていたファイル番号は解放されます。
'
'●使用例
'Close ステートメントを使って、シーケンシャル出力モード (Output) で開いている 3 つのファイルをすべて閉じます。
Dim I, FileName
For I = 1 To 3 ' ループを 3 回繰り返します。
FileName = "TEST" & I ' ファイル名を作成します。
Open FileName For Output As #I ' ファイルを開きます。
Print #I, "This is a test." ' ファイルに文字列を書き込みます。
Next I
Close ' 3 つのファイルをすべて閉じます。
 
'◆Input # ステートメント
'
'●動作
'シーケンシャル入力モード (Input) で開いたファイルからデータを読み込んで、それを変数に格納するファイル入出力ステートメントです。
'
'●構文  Input #filenumber, varlist
'filenumber  必須 任意のファイル番号を指定
'varlist 必須 ファイルから読み込んだデータを格納するための変数を、1 つまたは複数指定します。複数指定するときは、
'カンマ (,) で区切って指定します。配列変数、ユーザー定義型の変数、またはオブジェクト変数を指定することはできません。
'ただし、配列の要素またはユーザー定義型の要素は指定できます。
'
'●解説
' 通常、Input # ステートメントを使用して読み込んだデータは、Write # ステートメントを使用して書き込みます。
'Input # ステートメントは、シーケンシャル入力モード (Input) またはバイナリ モード (Binary) で開いたファイルに対してだけ使用します。
' ファイルからデータを読み込む場合、通常、文字列データは文字列型 (String)、数値データは数値データ型として格納されます。
'これ以外のデータを読み込んだ場合、次に示すようにデータによって変数に割り当てられる型が異なります。
'
'データ 変数に格納される値
'カンマのみ、または空白行 Empty 値 (VarType 0)
'#NULL#  Null 値(VarType 1)
'#TRUE# または #FALSE# 真 (True) または偽 (False)
'#yyyy-mm-dd hh:mm:ss#  式によって表された日付と時刻
'#ERROR errornumber# errornumber (エラー値として格納されたバリアント型 (Variant)
'入力データ内のダブル クォーテーション ("") は無視されます。
'
'●備考
'Input # ステートメントで、"1,2""X" のようなクォーテーションを含む文字列を記述しないようにしてください。
'このような場合、独立した 2 つの文字列として認識されます。
'ファイル内のデータ項目の順番は、引数 varlist で指定した変数の順番と一致している必要があります。
'また、ファイル内の各データ項目のデータ型は、対応する変数のデータ型と一致していなければなりません。
'たとえば、変数が数値データ型で読み込むデータが数値データ型でない場合、変数には 0 が代入されます。
'データを入力してきるときにファイルの末尾に達すると、入力が終了し、エラーが発生します。
'Input # ステートメントを使用してファイルから変数へデータを正しく読み込むことができるように、
'データをファイルに書き込む場合は、Print # ステートメントではなく、必ず Write # ステートメントを使用してください。
'Write # ステートメントを使用すると、ファイルにデータを書き込むときに各データ項目の間に正しくカンマ (,) が挿入されます。
'
'●使用例
'Input # ステートメントを使って、ファイルのデータを読み込み、2 つの変数に代入しています。
'この例のファイル TESTFILE には、Write # ステートメントを使って、データが書き込まれているものと仮定します。
'データは、"Hello", 234 のように、文字列はダブル クォーテーション (") で囲まれ、数値はカンマ (,) で区切られています。

Dim MyString, MyNumber
Open "TESTFILE" For Input As #1 ' シーケンシャル入力モードで開きます。
Do While Not EOF(1) ' ファイルの終端までループを繰り返します。
Input #1, MyString, MyNumber ' データを 2 つの変数に代入します。
Debug.Print MyString, MyNumber ' イミディエイト ウィンドウに表示します。
Loop
Close #1 ' ファイルを閉じます。
 
'◆Get ステートメント
'
'●動作
'ディスク ファイルからデータを読み込み、それを変数に格納するファイル入出力ステートメントです。
'
'●構文 Get [#]filenumber, [recnumber], varname
'filenumber 必須 任意のファイル番号を指定
'recnumber 省略可 バリアント型 (内部処理形式 Long の Variant) の値を指定
'読み込みを始めるレコード番号 (ランダム アクセス モード) や バイト位置 (バイナリ モード) を指定。
'varname 必須 読み込んだデータを格納する変数名を指定
'
'●解説
' 通常、Get ステートメントを使用して読み込んだデータは Put ステートメントを使用して書き込みます。
' 引数 recnumber には、ファイル内の先頭のレコード番号またはバイト位置には 1 を、
'2 番目のレコード番号またはバイト位置には 2 を指定します。以下同様に続きます。
'引数 recnumber を省略すると、最後に呼び出した Get ステートメントまたは Put ステートメント、
'あるいは最後に呼び出した Seek 関数が示す位置の次のレコードまたはデータが読み込まれます。
'次に示すように引数 recnumber を省略するときでも、各指定項目を区切るカンマ (,) は省略できません。

Get #4, , FileBuffer
' ランダム アクセス モード (Random) で開いたファイルの場合は、次の規則が適用されます。
' 読み込むデータの長さが Open ステートメントの Len 節で指定したレコード長を超えない限り、
'Get ステートメントはレコード長の終端から次のレコードを読み込むことができます。
'レコードの終わりと次のレコードの先頭の間には、ファイル バッファの内容が埋め込まれます。
'埋め込まれるデータの量は正確に指定できないため、通常はレコード長を読み込むデータ長に合わせます。
'
' 可変長文字列変数を使う場合、Get ステートメントは文字列の長さを示す 2 バイトの記述子を読み込んでから、
'変数に格納するデータを読み込みます。Open ステートメントの Len 節では、
'文字列の実際の長さより 2 バイト以上大きい値を指定する必要があります。
'
' 数値型のバリアント型 (Variant) 変数を使う場合、
'Get ステートメントはバリアント型の内部処理形式 (VarType) を示す 2 バイトのデータを読み込んでから、
'変数に格納するデータを読み込みます。たとえば、VarType 3 (長整数型) のバリアント型を読み込む場合、
'Get ステートメントは 6 バイトのデータを読み込みます。このうち 2 バイトは、
'バリアント型が VarType 3 であることを示すデータ、4 バイトは、長整数型 (Long) のデータです。
'Open ステートメントの Len 節では、
'実際にデータを格納するために必要なバイト数より 2 バイト以上大きい値を指定する必要があります。
'
'メモ Get ステートメントを使用すると、バリアント型の配列をディスクから読み込むことができます。
'ただし、バリアント型の値が数値で、配列を含む場合、ディスクから読み込むことはできません。
'また、Get ステートメントを使用してオブジェクトを読み込むことはできません。
' VarType 8 (文字列型) のバリアント型の変数を使う場合、
'Get ステートメントはバリアント型の内部処理形式を示す 2 バイトのデータを読み込んでから、
'文字列の長さを示す 2 バイトのデータを読み込み、その後文字列データを読み込みます。
'Open ステートメントの Len 節では、文字列の実際の長さより 4 バイト以上大きい値を指定する必要があります。
' Get ステートメントを使用して動的配列に変数を読み込むと、記述子が読み込まれます。
'この記述子の長さは、2 に 8 と次元数の積を加えた値 (2 + 8 * 配列の次元数) に等しくなります。
'Open ステートメントの Len 節で指定するレコード長は、データと配列の記述子を読み込むために必要なバイト数の合計、
'またはそれ以上である必要があります。たとえば、次の配列を定義すると、配列がディスクに書き込まれる場合、118 バイトを必要とします。
'
Dim MyArray(1 To 5, 1 To 10) As Integer
' 118 バイトは、記述子のための 18 バイト (2 + 8 * 2)、データのための 100 バイト (5 * 10 * 2) を合わせた値です。
'  読み込まれる変数が固定サイズの配列の場合、Get ステートメントはデータだけを読み込みます。記述子は読み込みません。
' その他の型の変数 (可変長文字列変数とバリアント型の変数以外) を使う場合、Get ステートメントは変数データだけを読み込みます。
'Open ステートメントの Len 節では、読み込むデータの長さ以上の値を指定する必要があります。
' ユーザー定義型の要素を Get ステートメントを使って読み込む場合、各要素は独立しているように読み込まれます。
'ただし、各要素の間には何も埋め込まれません。Put ステートメントを使用してユーザー定義型に含まれる動的配列をディスクに書き込むと、
'記述子が前置されます。この記述子の長さは、2 に 8 と次元数の積を加えた値 (2 + 8 * 配列の次元数) に等しくなります。
'Open ステートメントの Len 節で指定するレコード長は、データと配列の記述子を読み込むために必要なバイト数の合計、
'またはそれ以上である必要があります。
'
' バイナリ モード (Binary) で開いたファイルの場合は、次に示す規則を除いて、ランダム アクセス ファイルの規則がすべて適用されます。
Open ステートメントの Len 節は無視されます。Get ステートメントはディスクからすべての変数を連続的に読み込みます。
'レコードとレコードの間には何も埋め込まれません。
'  ユーザー定義型の配列以外の配列の場合、Get ステートメントはデータだけを読み込みます。記述子は読み込みません。
'  ユーザー定義型の要素でない可変長文字列を使う場合、
'Get ステートメントはデータ長を示す 2 バイトの記述子を認識せずに文字列変数の持つ値の文字数と同じバイト数を読み込みます。
'たとえば、次のステートメントは、ファイル番号 1 のファイルから 10 バイトのデータを読み込みます。
VarString = String(10, " ")
Get #1, , VarString

'●使用例
'Get ステートメントを使って、ファイルのデータを読み込み、1 つの変数に代入しています。
'ファイル TESTFILE には、ユーザー定義型 Record 型のレコードが 5 つ含まれているものと仮定します。

Type Record ' ユーザー定義型を定義します。
ID As Integer
Name As String * 20
End Type

Dim MyRecord As Record, Position ' 変数を宣言します。
' サンプル ファイルを ランダム アクセス モードで開きます。
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' Get ステートメントを使って、サンプル ファイルを読み込みます。
Position = 3 ' レコード番号を定義します。
Get #1, Position, MyRecord ' 3 番目のレコードを読み込みます。
Close #1 ' ファイルを閉じます。
 
 
'◆Write # ステートメント
'シーケンシャル出力モード (Output または Append) で開いたファイルにデータを書き込むファイル入出力ステートメントです。
'
'●構文  Write #filenumber, [outputlist]
'filenumber 必須 任意のファイル番号を指定
'outputlist 省略可 ファイルに出力するデータをカンマで区切られた数式または文字列式で指定
'●解説
'Write # ステートメントを使用して書き込んだデータは、Input # ステートメントで読み込みます。
' 引数 outputlist を省略して引数 filenumber の後にカンマ (,) を指定すると、空白行がファイルに出力されます。
'引数 outputlist に複数のデータを指定するときは、スペース、セミコロン (;)、またはカンマ (,) で区切って指定します。
'スペースとセミコロンは同じ働きをします。
' Write # ステートメントを使ってファイルに書き込んだデータは、国別情報の設定にかかわらず、
'Input # ステートメントで正しく解釈して読み込むことができます。
' 数値データ型のデータは、小数点記号としてピリオド (.) が常に使用されます。
' ブール型 (Boolean) のデータは、文字列 #TRUE# または #FALSE# がファイルに書き込まれます。
'キーワード True およびキーワード False は、国別情報の設定にかかわらず変換されません。
' 日付型 (Date) のデータは、共通日付形式を使用して書き込まれます。日付や時間の構成要素がない場合やゼロの場合は、
'指定されている部分だけのデータがファイルに書き込まれます。
' 引数 outputlist のデータが Empty 値の場合、そのデータ項目については何も書き込まれません。
'引数 outputlist のデータが Null 値の場合は、文字列 #NULL# がファイルに書き込まれます。
' 引数 outputlist のデータが Null 値の場合は、文字列 #NULL# がファイルに書き込まれます。
' エラー データは、文字列 #ERROR errorcode# という形式で出力されます。キーワード Error は、
'国別情報の設定に応じて変換されません。
' Write # ステートメントは、Print # ステートメントと異なり、ファイルにデータを書き込むときにデータ項目の間にカンマ (,) を挿入します。
'文字列は、ダブル クォーテーション ("") で囲んで出力します。引数 outputlist には明示的に区切り文字を指定する必要はありません。
'Write # ステートメントはファイルに引数 outputlist の最後の文字を出力したあと、改行文字を挿入します。
'
'●備考
'Write # ステートメントで、"1,2""X" のようなクォーテーションを含む文字列を記述しないようにしてください。このような場合、
'独立した 2 つの文字列として認識されます。
'
'●使用例
'Write # ステートメントを使って、シーケンシャル ファイルにデータを書き込みます。
Open "TESTFILE" For Output As #1 ' シーケンシャル出力モードでファイルを開きます。
Write #1, "Hello World", 234 ' 書き込むデータは、カンマで区切ります。
Write #1, ' 空白行を挿入します。

Dim MyBool, MyDate, MyNull, MyError
' ブール値、日付、Null 値、エラー値を割り当てます。
MyBool = False: MyDate = #2/12/1969#: MyNull = Null
MyError = CVErr(32767)

' ブール値のデータは、#TRUE# または #FALSE# として書き込みます。
' 日付リテラルは、共通日付形式で書き込みます。
' たとえば、共通日付形式 #1994-07-13# は、1994 年 7 月 13 日を表します。
' Null 値のデータは、#NULL# として書き込みます。
' エラー データは、#ERROR errorcode# として書き込みます。

Write #1, MyBool; " は、ブール値です。"
Write #1, MyDate; " は、日付です。"
Write #1, MyNull; " は、Null 値です。"
Write #1, MyError; " は、エラー値です。"
Close #1 ' ファイルを閉じます。
 
 
'(※1)ファイル番号
'説明 Open ステートメントを使ってファイルを開くときに、そのファイルに割り当てられる番号。
'(1)1 〜 255 のファイル番号を割り当てると、そのファイルは他のアプリケーションからはアクセスできなくなります。
'(2)256 〜 511 のファイル番号を割り当てると、そのファイルは他のアプリケーションからでも、アクセスできるようになります。
'LOF関数
'Open ステートメントを使用して開いたファイルの長さをバイト単位で示す長整数型 (Long) の値を返します。
'開いていないファイルの長さを取得するには、FileLen 関数を使用します。
'構文 LOF(FileNumber)
'filenumber 有効なファイル番号を整数型 (Integer) で指定
'
'Loc 関数
'開いたファイル内の現在の読み込み位置または書き込み位置を示す長整数型 (Long) の値を返します。
'
'構文 Loc(FileNumber)
'filenumber 任意のファイル番号を示す整数型 (Integer) の値を指定
'各ファイル アクセス モードの戻り値
'ランダム アクセス モード (Random) ファイルに対して直前に入出力を行ったレコードの番号を返します。
'シーケンシャル 入力モード (Input) ファイル内の現在のバイト位置を 128 で割った値を返します。
'シーケンシャル ファイル入力モードのファイルに対する Loc 関数の戻り値です。
'バイナリ モード (Binary)  直前に入出力を行ったバイト位置を返します。
'





Production Japan Import Application. Since 1998