テキストファイルから文字列を読み取る方法として次の3つがある。
- 一括で読み取る
- 1行ずつ読み取る
- 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
テキストファイルの読み取りの流れは次のとおり。
FileSystemObject の OpenTextFile メソッドでテキストファイルを開く。
→ TextStream オブジェクトが返る。TextStream の ReadAll メソッドで全体を読み取る。
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 になるまで読み取れば良い。
ファイルの開き方/閉じ方は一括で読み取るときと同様。
最近の主流である UTF-8 は文字化けしてしまうので注意しなければならない。