テキスト操作の基本を理解する

いきなり具体的なサンプルへ…といきたいところですが、最初からあまり飛ばしてもなんですので、まずはテキストファイルを読み込んで、コマンドプロンプトに表示するだけの基本的なコードから始めます。ここで、テキスト操作の基本的な考え方を理解してください。

basic.vbs

Set fs = WScript.CreateObject("Scripting.FileSystemObject") ' FileSystemObjectオブジェクトを生成(1)
Set ts = fs.OpenTextFile("C:\tmp\data.dat", 1, True)    ' テキストファイルを読み取り専用で開く(2)

Do While Not ts.AtEndOfStream   ' テキストファイルの末尾に到達するまで一行ずつ読み込み(3)
  WScript.Echo(ts.ReadLine())
Loop

ts.Close()  ' テキストファイルを閉じる(4)

data.dat(タブ区切り)

雇う  employ
狭い  narrow
破壊する    destroy
安全な secure
占領する    occupy
結論する    conclude
力   strength
稼ぐ  earn
  ...後略...

data.datは、あとからも単語帳ツールで利用するためのデータファイルです(*)。ここでは、「C:\tmp」フォルダに保存することを前提にしていますが、もちろん他のフォルダに配置しても構いません。ただし、その場合はbasic.vbsのパス情報を、自分の環境に合わせて変更するようにしてください。

*「.dat」としているのは、データファイルであることを表すためで、(スクリプトの中のパス指定と一致していれば)「.txt」などでも構いません。

それではさっそく、実行してみましょう。コマンドプロンプトを立ち上げ、以下のようにコマンドを入力します。

> cd c:\tmp … カレントフォルダをスクリプトの保存先に移動
> cscript basic.vbs … スクリプトを実行

コマンドプロンプト上でWSHスクリプトを実行するには、cscriptコマンド(cscript.exe)を利用するのでしたね。ただ単に「> basic.vbs」とした場合、テキストファイルからの読み込み結果は(コマンドプロンプトではなく)ダイアログボックスに表示されますので、注意してください。

テキストファイルdata.datの内容をコマンドプロンプトに表示

それでは、個々のコードについて、もう少し詳しく説明していきます。

(1)FileSystemObjectオブジェクトを生成

前回も紹介したように、WSHではさまざまなオブジェクトを標準で用意しています。オブジェクトとは、便利な道具(メソッド)が詰まった道具箱のような存在です。たとえば、フォルダやファイルなどファイルシステムに関わる操作を行うには、FileSystemObjectというオブジェクトを利用します。

オブジェクトを使うには、WScriptオブジェクトのCreateObjectメソッドを呼び出し、まずはそのオブジェクトを用意(生成)する必要があります。ちなみに、WScriptオブジェクトはWSHの大もととなるオブジェクト(ルートオブジェクト)で、あらかじめ準備などしなくても利用できる唯一のオブジェクトです。WSHスクリプトで使うオブジェクトは、すべてWScriptオブジェクトを介して呼び出します。

[構文]CreateObjectメソッド

Set オブジェクト変数 = WScript.CreateObject(プログラムID)

プログラムIDとは、それぞれのオブジェクトに付けられたユニーク(一意)な名前です。たとえば、FileSystemObjectであれば"Scripting.FileSystemObject"というように、オブジェクトによって決まっていますので、これを指定してください。CreateObjectメソッドは呼び出したオブジェクトを、指定された変数にセットします。オブジェクトがセットされた変数のことを便宜的に「オブジェクト変数」と呼ぶこともあります。変数にオブジェクトをセットする場合には、かならず頭にSet命令を指定する必要がある点にも注意してください。これで、FileSystemObjectオブジェクトの準備ができました。

(2)テキストファイルを読み取り専用で開く

次に、テキストファイルを開いてみましょう。テキストファイルを開くのは、FileSystemObjectオブジェクトのOpenTextFileメソッドです(構文上、角カッコで囲まれている引数は省略しても構いません)。

OpenTextFileメソッド

Set オブジェクト変数 = FileSystemObjectオブジェクト.OpenTextFile(ファイルのパス [,モード[, 新規作成するか])

引数「モード」は、ファイルを読み取り、書き込み用に開くかを指定します。具体的に設定可能な値は、次の通りです。

引数「モード」の設定値

設定値 概要
1 読み取り専用
2 書き込み専用
8 書きこみ専用(追記型)

引数「新規作成するか」は、指定されたファイル名が存在しない場合に、そのファイルを新規に作成するかをTrue(作成する)、False(作成しない)で指定します。つまり、ここではデータファイル「C:\tmp\data.dat」を読み取り専用(1)で作成しているわけですね。OpenTextFileメソッドは、ファイルのオープンに成功すると、ファイルを読み込むためのTextStreamオブジェクトを返します。

(3)テキストファイルの内容を読み込む

TextStreamオブジェクトでテキストを読み込むには、ファイルポインタという概念を理解しておく必要があります。ファイルポインタとは、スクリプトが(正確にはTextStreamオブジェクトが)今テキストのどの位置を読み込んでいるかを表す目印のようなものだと考えておけば良いでしょう。TextStreamオブジェクトでは、このファイルポインタを移動させながら、先頭から順にテキストを読み込んでいくのです。

ファイルポインタの動き

テキストファイルを一行ずつ読み込むには、TextStreamオブジェクトのReadLineメソッドを使用します。ここではファイルポインタがファイルの末尾に到達する(AtEndOfStreamプロパティがTrueになる)まで、ReadLineメソッドでテキストの読み込みを繰り返します。ファイルポインタは初期状態でテキストの先頭に位置していますので、これによって、すべてのテキストが読み込まれるというわけです。

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

作業を終えたテキストファイルは、Closeメソッドで閉じます。明示的に閉じなくても、スクリプトが終了するタイミングでテキストファイルは閉じられますが、使ったものはきちんと後始末するクセをつけることは悪いことではありません。