Tech-Ezo (Hokkaido PC and Network Users Group)
 Top Page  |  What's Tech-Ezo  |  Next Seminar  |  Seminar Log  |  Seminar Plan  |  Tips  |  life  |  Link  |
Scr.003 ステップアップ WSH - 使えそうなスクリプトを作って見よう
前ページへ   [ステップアップ WSHへ戻る]   次ページへ


■  Level.4  テキストファイルを読み込んで見る
■ ■

 Level.3では指定のフォルダに格納されたテキストファイル("xxx.txt")のファイル名を表示しました。Level.4ではそのファイルに格納された内容を読み込んで、全て表示して見ます。

テキストファイルを読み込んで内容を表示する

 まずスクリプトの流れを説明しますと、ファイル名ループで取得した一つ一つのテキストファイルについて、その内容を全部読み込み、連結して、1つのメッセージボックスの中に表示します。これを、ファイル数分繰り返し、最後にLevel.3までと同様に、ファイル名一覧とフォルダ一覧を表示する、という流れになっています。

level04.vbs
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
Set fso = CreateObject("Scripting.FileSystemObject")
Set src = fso.GetFolder("C:\script\tips")    ' 対象フォルダの指定

' 指定のフォルダに格納された各ファイルを処理する
tmpMessage = "ファイル一覧:" & vbNewLine
For Each FileName In src.Files
    FileEx = fso.GetExtensionName(FileName)  ' ファイル名から拡張子を抜き出す
    If LCase(FileEx) = "txt" Then            ' 拡張子を小文字化してから比較

      ' テキストファイルの内容読み込み処理
        Set TextFile = fso.OpenTextFile(FileName) ' テキストファイルのオープン
        srhLine = FileName & ":" & vbNewLine      ' 検索結果格納用変数の初期化
        Do Until TextFile.AtEndOfStream
            tmpLine = TextFile.ReadLine             ' 1行読み込み
            srhLine = srhLine & tmpLine & vbNewLine ' 読み込んだ行のマージ
        Loop
        WScript.Echo srhLine
        tmpMessage = tmpMessage & FileName & vbNewLine

    End If
Next
WScript.Echo tmpMessage

' 指定のフォルダに格納された各サブフォルダを処理する
tmpMessage = "フォルダ一覧:" & vbNewLine
For Each FolderName In src.Subfolders
    tmpMessage = tmpMessage & FolderName & vbNewLine
Next
WScript.Echo tmpMessage
※ level3.vbsからの変更箇所(行追加や修正したところ)は行番号をオレンジにしました。

 それでは変更ポイントを見てみましょう。

 9〜10,19行目は見易さの為にいれた空行とコメントです。また、18行目はLevel.3の内容そのままですので、残りの11〜17行目について説明したいと思います。

11行目

011
        Set TextFile = fso.OpenTextFile(FileName) ' テキストファイルのオープン

 FileSystemObjectのOpenTextFileメソッドを使ってテキストファイルの読み込み宣言をしています。開いたファイルは、以後、TextFileという名前で扱います。

12行目

012
        srhLine = FileName & ":" & vbNewLine      ' 検索結果格納用変数の初期化

 メッセージ表示のために使用する変数の初期化を行っています。メッセージの1行目を"ファイル名:(改行)"としています。

13行目〜16行目

013
014
015
016
        Do Until TextFile.AtEndOfStream
            tmpLine = TextFile.ReadLine             ' 1行読み込み
            srhLine = srhLine & tmpLine & vbNewLine ' 読み込んだ行のマージ
        Loop

 13行目は繰り返し(ループ)処理の開始文です。Do Until文は、条件が満たされたら終了する文で、ここでは、TextFile.AtEndOfStream(テキストファイルが最後の行)になったら終了します。余談ですが、Do While文だと条件が満たされている間繰り返すことになります。13行目と対になっている行は、16行目のLoop文ですから、14〜15行目が繰り返しの対象です。

 14行目では、テキストファイル(TextFile)から1行読み込んで、"tmpLine"という変数に格納しています。また、15行目では、メッセージ表示用の変数(srhLine)に、今読み込んだ内容(tmpLine)と改行コード(vbNewLine)を結合しています。よって、14〜15行目をテキストファイルの最後まで繰り返すことで、srhLineの中にテキストファイルの内容全てが格納されることになります。

17行目

017
        WScript.Echo srhLine

 1つのテキストファイルの内容を全て読み込んだら、作成したメッセージ(srhLine)を画面に表示します。

 以上の修正で、テキストファイルの内容がメッセージボックスに表示されるようになりました。

実行してみましょう

 さっそく、出来上がったlevel4.vbsをダブルクリックかwscriptで実行して見ましょう。

level4.vbsファイルをダブルクリックして実行

 1つのテキストファイルの内容を無理矢理メッセージボックスの中に詰め込んでいますので、上記の画像は途中を切っています。また、画面が小さいとメッセージボックスが画面からはみ出してしまい、[OK]ボタンがクリックできないこともありますが、(a)[×]をクリックする、(b)[Enter]キーを押す、(c)[Alt]+[F4]を押す、などで先に進めて下さい。

 さて今回はここまでです。次のレベルではいよいよ文字列検索を行いますので、大分目的の機能に近づいた感じがしますね。



前ページへ   [ステップアップ WSHへ戻る]   次ページへ
-
※全ては自己責任でお願いします。
※当サイトに関するご連絡は tomomo_c@hotmail.com までお願いします。
最終更新日 2004.3.25