VBScript - テキストファイルに書き込む(FileSystemObject)

テキストファイルに書き込むには TextStream オブジェクトを使う。

TextStream オブジェクトは次のいずれかの方法で取得する。

  • FileSystemObject オブジェクトの CreateTextFile メソッドを使う

  • FileSystemObject オブジェクトの OpenTextFile メソッドを使う

  • File オブジェクトの OpenAsTextStream メソッドを使う

FileSystemObject オブジェクトの CreateTextFile メソッドを使う

次のスクリプトは CreateTextFile メソッドの使用例である。

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

'テキストファイルを作成する
Dim ts
Set ts = fso.CreateTextFile("C:\tmp\TextFile1.txt")

'文字列を書き込む
ts.WriteLine "Hello World!"

'テキストファイルを閉じる
ts.Close
Set ts = Nothing
Set fso = Nothing

FileSystemObject オブジェクトの OpenTextFile メソッドを使う

次のスクリプトは OpenTextFile メソッドの使用例である。

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

'テキストファイルを書き込みモードで開く
Dim ts
Set ts = fso.OpenTextFile("C:\tmp\TextFile1.txt", 2)

'文字列を書き込む
ts.WriteLine "Hello World!"

'テキストファイルを閉じる
ts.Close
Set ts = Nothing
Set fso = Nothing

OpenTextFile メソッドの構文は以下のとおり。

FileSystemObject.OpenTextFile (filename, [ iomode, [ create, [ format ]]])

filename:開くファイルのパスを指定する。

iomode:入出力モードを指定する。省略時は ForReading となる。

$$
\def\arraystretch{1.5}
\begin{array}{|l|l|l|}
\hline
\textbf{定数} & \textbf{値} & \textbf{説明} \\ \hline
\text{ForReading} & \text{1} & \text{読み取りモードで開く} \\ \hline
\text{ForWriting} & \text{2} & \text{上書きモードで開く} \\ \hline
\text{ForAppending} & \text{8} & \text{追記モードで開く} \\ \hline
\end{array}
$$

create:filename に指定したファイルが存在しない場合に新しいファイルを作るかどうかを指定する。
新しいファイルを作る場合は True 、作らない場合は False を指定する。
省略時は False となる。

format:開くファイルの形式を指定する。省略時は TristateFalse となる。

$$
\def\arraystretch{1.5}
\begin{array}{|l|l|l|}
\hline
\textbf{定数} & \textbf{値} & \textbf{説明} \\ \hline
\text{TristateUseDefault} & \text{-2} & \text{システムの既定の形式} \\ \hline
\text{TristateTrue} & \text{-1} & \text{Unicode 形式(UTF-16 LE/BE)} \\ \hline
\text{TristateFalse} & \text{0} & \text{Ascii 形式(シフトJIS)} \\ \hline
\end{array}
$$

File オブジェクトの OpenAsTextStream メソッドを使う

次のスクリプトは OpenAsTextStream メソッドの使用例である。

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

'ファイルオブジェクトを取得する
Dim file
Set file = fso.GetFile("C:\tmp\TextFile1.txt")

'テキストファイルを書き込みモードで開く
Dim ts
Set ts = file.OpenAsTextStream(2)

'文字列を書き込む
ts.WriteLine "Hello World!"

'テキストファイルを閉じる
ts.Close
Set ts = Nothing
Set file = Nothing
Set fso = Nothing

OpenAsTextStream メソッドの構文は以下のとおり。

File.OpenAsTextStream ([ iomode, [ format ]])

引数に指定可能な内容は OpenTextFile メソッドと同様。

上書きモードと追記モード

OpenTextFile または OpenAsTextStream メソッドで TextStream オブジェクトを取得した場合、取得時に指定した入出力モードによって書き込みの挙動が変わる。

ForWriting (2) を指定した場合は上書きモードとなり、既存の内容は新しい内容で置き換えられる。

ForAppending (8) を指定した場合は追記モードとなり、既存の内容の後ろに新しい内容が書き込まれる。

ログ出力であれば追記モードとした方が勝手はよいだろう。
上書きモードでも、読み取りモードで全体を読み取った内容に追記する内容を加えて書き込めば同じことになるが効率は悪い。

TextStream オブジェクトを使ってテキストファイルに書き込む

TextStream オブジェクトが取得できたら、あとは書き込むだけ。

書き込む方法は3種類ある。

  • 指定した文字列を書き込む

  • 指定した文字列と改行文字を書き込む

  • 指定した数の改行文字を書き込む

指定した文字列を書き込む

Write メソッドは指定した文字列を書き込む。

末尾に改行文字は付かないので必要なら文字列に含めるか、後述の WriteLine メソッドを使う。

TextStream.Write(string)

string には書き込む文字列を指定する。

指定した文字列と改行文字を書き込む

WriteLine メソッドは指定した文字列と改行文字を書き込む。

TextStream.WriteLine(string)

string には書き込む文字列を指定する。
省略した場合は改行文字のみがファイルに書き込まれる。

指定した数の改行文字を書き込む

WriteBlankLines メソッドは指定した数の改行文字を書き込む。

TextStream.WriteBlankLines(lines)

lines には書き込む改行文字の数を指定する。

テキストファイルを閉じる

Close メソッドは開いたテキストファイルを閉じる。
開いたファイルは必ず閉じること。

ts.Close

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

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

それは OpenTextFile/OpenAsTextStream メソッドの引数 format に指定できる内容を見ていただければわかると思う。

よって、最近の主流である UTF-8 は文字化けしてしまうので注意してほしい。

シフトJIS、UTF-16 LE/BE 以外の文字コードのファイルを処理したい場合は ADODB.Stream を使うとよい。


この記事が気に入ったらサポートをしてみませんか?