読者です 読者をやめる 読者になる 読者になる

Corredor

ウェブ、プログラミングの勉強メモ。

VBScript でテキストファイルを読み込む・書き出す

FileSystemObject」というものを使うと、テキストファイルの読み書きができる。

以下のようなスクリプトを fso.vbs などという名前で保存。inputText.txt はスクリプトと同じフォルダに置いておく。

今回は特に文字列置換などはせず、inputText.txt の中身を1行ずつ読み込んで、outputText.txt というファイルを作って書き出すだけ。ファイルごとコピーしたときと結果は同じ状態だけど、テキストファイルの読み書きの基礎として…。

Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

' 読み込みファイルの指定 (相対パスなのでこのスクリプトと同じフォルダに置いておくこと)
Dim inputFile
Set inputFile = fso.OpenTextFile("inputText.txt", 1, False, 0)

' 書き出しファイルの指定 (今回は新規作成する)
Dim outputFile
Set outputFile = fso.OpenTextFile("outputText.txt", 2, True)

' 読み込みファイルから1行ずつ読み込み、書き出しファイルに書き出すのを最終行まで繰り返す
Do Until inputFile.AtEndOfStream
  Dim lineStr
  lineStr = inputFile.ReadLine
  outputFile.WriteLine lineStr
Loop

' バッファを Flush してファイルを閉じる
inputFile.Close
outputFile.Close

VBA から覚えたタチなので変数宣言を必ずしている。Option Explicit と書かなければ、Dim で変数宣言をしなくても動くっちゃ動く。あんまりよく調べてないまま書いてるけど、よく調べずに書いても何となく使えるのがスクリプト言語 (WSH) の良いところ。

Scripting.FileSystemObject#OpenTextFile() の引数は以下のとおり。

  1. 第1引数:読み込む・もしくは書き出すファイル名。相対パスか絶対パス。必須な引数は第1引数のみ。
  2. 第2引数:読み書きのモード。1 (読み込み)、2 (書き込み)、8 (追加書き込み) の3つ。初期値は 1 (読み込み)。実際に使うときは定数を用意しておくとよい。
  3. 第3引数:ファイルがなかった時に新規作成するかどうか。初期値は False (ファイルがなくても新規作成しない)。
  4. 第4引数:文字コードの指定。初期値は 0 (ASCII)。UTF-16 なら -1、システムのデフォルトエンコードなら -2UTF-8 の読み書きはできない。

第4引数の文字コードのことが書きたかった。そう、FileSystemObject では UTF-8 の読み書きができないのだ。つまり、inputText.txt のエンコードは ANSI などである必要がある。UTF-8 の読み書きの方法は別途紹介。

neos21.hatenablog.com

参考

今回のコードを JScript で書き直したバージョンは以下。

neos21.hatenablog.com

[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)

[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)