YouTube | Facebook | X(Twitter) | RSS

テキストファイルの操作方法

2016/9/1 (木)

http://www.red.oit-net.jp/tatsuya/vb/Open.htm
目次へ戻ります <index.htm>
/*VB サンプル*/
 
------------------------------------------------------------------------
 
*VB テキストファイル操作編*
 
テキストファイルの読み込み、書き込みの操作
 
●Open <#Open> ファイルを開く <#Open>
●FreeFile <#FreeFile> 使用可能なファイル番号を取得する <#FreeFile>
●Print # <#Print> ファイルにデータを書き込む <#Print>
●Write # <#Write> ファイルにデータを書き込む <#Write>
●Input # <#Input> ファイルからデータを1項目読み込む <#Input>
●Line Input # <#LineInput>    ファイルからデータを1行読み込む <#LineInput>
●Close <#Close>   ファイルを閉じる <#Close>
●Reset <#Reset>   ファイルをすべて閉じる <#Reset>
 
*【サンプルリスト】*
 
*'***************************************
*' テキストファイルを1行単位に読み込む*
*'***************************************
Private Sub Command1_Click()
  Dim fileNo As Integer
  Dim buf
  fileNo = FreeFile                        *'ファイル番号の取得*
  Open "TESTFILE.TXT" For Input As #fileNo *'ファイルを読込モードで開く*
  Do Until EOF(fileNo)                     *'EOFになるまでループ*
    Line Input #fileNo, buf                *'ファイルから1行読み込む*
    Debug.Print buf
  Loop
  Close #fileNo                            *'ファイルを閉じる*
End Sub
 
*【サンプルリスト】*
 
*'*****************************************
*' テキストファイルにデータを1行追加する*
*'*****************************************
Private Sub Command1_Click()
  Dim fileNo As Integer
  fileNo = FreeFile                         *'ファイル番号の取得*
  Open "TESTFILE.TXT" For Append As #fileNo *'ファイルを追加モードで開く*
  Print #fileNo, "TEST"                     *'ファイルへ書き込む*
  Close #fileNo                             *'ファイルを閉じる*
End Sub
 
*●Openステートメント*
 
*【機能】*ファイルを開いて、ファイルへ入出力できるようにします。
 
*【書式】**Open* パス名 *For* モード *As* ファイル番号
*【書式】**Open* パス名 *For* モード *Access* アクセス ロック *As* ファ
イル番号 *Len=*レコード長
 
     
パス名 必ず指定します。ファイル名を指定します。フォルダ名、またはドライ
ブ名も含めて指定できます。
パスを省略した場合はカレントディレクトリになります。
モード 必ず指定します。ファイル モードを示す、次のいずれかのキーワードを
指定します。
 Append 追加書き込みモードで開きます。
 Binary バイナリファイルモードで開きます。
 Input  読み込みモードで開きます。
 Output 新規書き込みモードで開きます。
 Random ランダムアクセスモードで開きます。
省略すると、ファイルはランダム アクセス モードで開かれます。
アクセス    省略可能です。開くファイルに対して行う処理を示す、次のいずれか
のキーワードを指定します。
 Read       読み込み専用で開きます。
 Write      書き込み専用で開きます。
 Read Write 読み書き可能で開きます。
ロック 省略可能です。開くファイルに対する、他のプロセスからのアクセスを
制御する、次のいずれかのキーワードを指定します。
 Shared          他のプロセスから、このファイルの読み書きができます。
 Lock Read       他のプロセスから、このファイルを読むことはできません。
 Lock Write      他のプロセスから、このファイルを書くことはできません。
 Lock Read Write 他のプロセスから、このファイルの読み書きができません。
ファイル番号  必ず指定します。1 ~ 511 の範囲で任意のファイル番号を指定し
ます。FreeFile 関数を使用して次に使用可能なファイル番号を取得してください。
レコード長   省略可能です。32,767 バイト以下の数値を指定します。ランダム
アクセス ファイルの場合は、レコード長を表します。シーケンシャル ファイル
の場合は、バッファの容量を表します。
 
 
*【 例 】*
  Open strFile For Input As #1
  Open strFile For Append As #1
  Open strFile For Output As #fileNo
  Open "TESTFILE" For Binary Access Write As #1
  Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
  Open "TESTFILE" For Output Shared As #1
  Open "TESTFILE" For Binary Access Read Lock Read As #1
 
※ 指定したファイルが存在しない場合、Append、Binary、Output、Randomモード
では、新規に作成して開きます。
※ ファイルが別プロセスで既に開かれていて、指定したアクセスが実行できない
とき、エラーが発生します。
※ Binary、Input、Randomは、ファイルを開いたまま、別のファイル番号で同時
に開くことができます。一方、Append、Outputは、いったんファイルを閉じない
と、別のファイル番号で再び開くことはできません。
 
*●FreeFile関数*
 
*【機能】*使用可能なファイル番号を整数型 (Integer) の値で返します。
 
*【書式】*result = *FreeFile*
 
*【 例 】*
  Dim fileNo As Integer                      *'ファイル番号*
  fileNo = FreeFile                          *'ファイル番号取得*
  Open "TESTFILE.TXT" For Append As #fileNo  *'ファイルオープン*
  Print #fileNo, "test"
  Close #fileNo
 
*●Print # ステートメント*
 
*【機能】*ファイルにデータを書き込みます。
 
*【書式】**Print #*ファイル番号, "出力データ"     *※最後に改行コードを出
力します。*
*【書式】**Print #*ファイル番号, "出力データ";    *※最後に改行コードを出
力しません。*
 
*【 例 】*
  Dim fileNo As Integer
  fileNo = FreeFile
  Open "TESTFILE.TXT" For Append As #fileNo
  Print #fileNo, "test1";                     *'データ出力*
  Print #fileNo, "test2"                      *'データ出力*
  Print #fileNo, "test3"                      *'データ出力*
  Close #fileNo
     
*[出力結果]*
test1test2
test3
 
 
※ Print # ステートメントで作成したファイルは、Line Input # ステートメン
ト もしくは、Input # ステートメントを使用してファイルを読み込むことがで
きます。
 
*●Write # ステートメント*
 
*【機能】*ファイルにデータを書き込みます。データはダブルクォーテーション
で囲まれて出力します。
 
*【書式】**Write #*ファイル番号, "出力データ"     *※最後に改行コードを出
力します。*
*【書式】**Write #*ファイル番号, "出力データ";    *※最後にカンマを出力し
て、改行コードは出力しません。*
 
*【 例 】*
  Dim fileNo As Integer
  fileNo = FreeFile
  Open "TESTFILE.TXT" For Append As #fileNo
  Write #fileNo, "test1";                     *'データ出力*
  Write #fileNo, "test2"                      *'データ出力*
  Write #fileNo, "test3"                      *'データ出力*
  Close #fileNo
     
*[出力結果]*
"test1","test2"
"test3"
 
 
※ Write # ステートメントで作成したファイルは、Input # ステートメントを使
用してファイルを正しく読み込むことができます。
 
*●Input # ステートメント*
 
*【機能】*ファイルからデータを読み込みます。
 
*【書式】**Input #*ファイル番号, 読込データ格納変数      *※1件データを読
み込みます。*
*【書式】**Input #*ファイル番号, 変数A, 変数B, ・・・    *※複数件のデー
タを読み込みます。*
 
*【 例 】*
  Dim fileNo As Integer
  Dim buf
  fileNo = FreeFile
  Open "TESTFILE.TXT" For Input As #fileNo
  Do Until EOF(fileNo)
    Input #fileNo, buf   *'ファイルから1項目読込*
    Debug.Print buf
  Loop
  Close #fileNo
     
*[ファイル内容]*
"test1","test2"
"test3"
 
    →   
*[実行結果]*
test1
test2
test3
 
         
*[ファイル内容]*
test1,test2
test3
 
    →   
*[実行結果]*
test1
test2
test3
 
 
*【 例 】*
  Dim fileNo As Integer
  Dim bf1,bf2
  fileNo = FreeFile
  Open "TESTFILE.TXT" For Input As #fileNo
  Do Until EOF(fileNo)
    Input #fileNo, bf1, bf2   *'ファイルから2項目ずつ読込*
    "bf1:" & bf1 & " bf2:" & bf2
  Loop
  Close #fileNo
     
*[ファイル内容]*
"test1","test2"
"test3","test4"
 
    →   
*[実行結果]*
bf1:test1 bf2:test2
bf1:test3 bf2:test4
 
         
*[ファイル内容]*
"test1","test2"
"test3"
 
    →   
*[実行結果]*
bf1:test1 bf2:test2
エラーが発生
 
 
※ Write # ステートメントで作成したファイルは、Input # ステートメントを使
用してファイルを正しく読み込むことができます。
 
*●Line Input # ステートメント*
 
*【機能】*ファイルから1行を読み込みます。
 
*【書式】**Line Input #*ファイル番号, 読込データ格納変数
 
*【 例 】*
  Dim fileNo As Integer
  Dim buf
  fileNo = FreeFile
  Open "TESTFILE.TXT" For Input As #fileNo
  Do Until EOF(fileNo)
    Line Input #fileNo, buf   *'ファイルから1行読込*
    Debug.Print buf
  Loop
  Close #fileNo
 
※ ファイルからキャリッジ リターン (Chr(13)) または改行コード (Chr(13)) +
Chr(10)) の直前までのすべての文字を読み込みます。キャリッジ リターンと改
行コードは、変数に読み込まれる文字列に追加されるのではなく、読み飛ばされ
ます。
 
*●Closeステートメント*
 
*【機能】*開かれたファイルを閉じます。
 
*【書式】**Close* ファイル番号
*【書式】**Close*
 
*【関連】*Reset
 
*【 例 】*
  Dim fileNo As Integer
  fileNo = FreeFile
  Open "TESTFILE.TXT" For Append As #fileNo
  Print #fileNo, "test1"
  Close #fileNo        *'ファイルを閉じる*
 
※ ファイル番号を省略すると、Openステートメントで開いたすべてのファイルが
閉じられます。
 
*●Resetステートメント*
 
*【機能】*開かれたファイルをすべて閉じます。
 
*【書式】**Reset*
 
*【関連】*Close
 
*【 例 】*
  Dim fileNo As Integer
 
  fileNo = FreeFile
  Open "TESTFILE1.TXT" For Append As #fileNo
  Print #fileNo, "test1"
 
  fileNo = FreeFile
  Open "TESTFILE2.TXT" For Append As #fileNo
  Print #fileNo, "test2"
 
  Reset            *'ファイルを閉じる*
 
目次へ戻ります <index.htm>
  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

-プログラミング
-