怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - テキストファイルを読み取る(FileSystemObject)

テキストファイルから文字列を読み取る方法として次の3つがある。

  1. 一括で読み取る
  2. 1行ずつ読み取る
  3. 1文字ずつ読み取る

それぞれの方法を解説する。

テキストファイルを一括で読み取る

次のスクリプトは、テキストファイルの内容を表示する。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
'テキストファイルを開く
Dim ts
Set ts = fso.OpenTextFile("C:\tmp\TextFile1.txt")
'テキストファイル全体を読み取り表示する
WScript.Echo ts.ReadAll
'テキストファイルを閉じる
ts.Close
Set ts = Nothing
Set fso = Nothing

テキストファイルの読み取りの流れは次のとおり。

  1. FileSystemObject の OpenTextFile メソッドでテキストファイルを開く。
    → TextStream オブジェクトが返る。

  2. TextStream の ReadAll メソッドで全体を読み取る。

  3. TextStream の Close メソッドでファイルを閉じる。
    →開いたファイルは必ず閉じること。

テキストファイルを1行ずつ読み取る

次のスクリプトは、テキストファイルが終わるまで1行ずつ読み取り、読み取った内容を表示する。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
'テキストファイルを開く
Dim ts
Set ts = fso.OpenTextFile("C:\tmp\TextFile1.txt")
'ファイルの終わりに達するまで、1行ずつ読み取り、その内容を表示する
Do While Not ts.AtEndOfStream
  WScript.Echo ts.ReadLine
Loop
'テキストファイルを閉じる
ts.Close
Set ts = Nothing
Set fso = Nothing

TextStream の ReadLine メソッドで、テキストを1行ずつ読み取ることができる。

AtEndOfStream プロパティはファイルの終端に達すると True を返すので、このプロパティが True になるまで読み取れば良い。


ファイルの開き方/閉じ方は一括で読み取るときと同様。

テキストファイルを1文字ずつ読み取る

次のスクリプトは、テキストファイルが終わるまで1文字ずつ読み取り、読み取った内容を表示する。

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
'テキストファイルを開く
Dim ts
Set ts = fso.OpenTextFile("C:\tmp\TextFile1.txt")
'ファイルの終わりに達するまで、1文字ずつ読み取り、その内容を表示する
Do While Not ts.AtEndOfStream
  WScript.Echo ts.Read(1)
Loop
'テキストファイルを閉じる
ts.Close
Set ts = Nothing
Set fso = Nothing

TextStream の Read メソッドで、テキストを指定の文字数ずつ読み取ることができる。
上記のサンプルは 1 を指定しているので1文字ずつ読み取る。

AtEndOfStream プロパティはファイルの終端に達すると True を返すので、このプロパティが True になるまで読み取れば良い。


ファイルの開き方/閉じ方は一括で読み取るときと同様。

シフトJIS または UTF-16 LE/BE しか扱えない

TextStream オブジェクトが扱える文字コードは、シフトJIS または UTF-16 LE/BE である。

最近の主流である UTF-8 は文字化けしてしまうので注意しなければならない。

シフトJISUTF-16 LE/BE 以外の文字コードのファイルを扱う場合は ADODB.Stream を使う。