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.13   せっかくだからちょっと見やすく加工してみる
■ ■

 前回のLevel.12ではLevel.10までのスクリプトをHTMLと合体し、HTA(HTML Application)にしてみました。Level.10までは入力にInputBox、出力はMsgBoxかテキストファイルと簡素なものでしたが、HTAにすることでWindowsのアプリケーションっぽいインタフェースになったかと思います。

 後は、そうですねぇ...メニューバーを付けるとか、ウィンドウ左上のアイコンを作るとか、そういう部品を揃えていけば、さらにそれっぽく見えますね。でも、そこまでやるとかなり凝った作りになってしまいますので、もうちょっと手軽に見た目を変える修正を施して見ましょう。

 まずは、検索文字の色を変えることで、検索にヒットした部分を一見して分かるようにして見ます。

文字列置換の方法

 ところで、スクリプトも100行を越え長くなって来たこともあり、全体を載せるとかえって見難くなってしまいそうですので、ここからは修正ポイントのみを紹介し、スクリプト全体はダウンロードできるようにしました。

 さて、本題の検索文字を赤くする方法ですが、HTAは要はHTMLですのでWebページを作成したことがある方なら至って簡単。そう、<font>タグを使えばいいだけなのです。

 検索文字列が「フォルダ」なら、これを「<font color=#FF0000>フォルダ</font>」といった文字列に変えてあげれば良いだけですね。

 文字列の置換には、Regular Expressionオブジェクト(RegExp)を使います。これはすでに文字列検索で使用しているオブジェクトですので、新たに定義し直す必要はありません。

 まず、RegExpオブジェクトを使った簡単な文字列置換の方法を見てみましょう。

簡単な文字列置換例(lev13ex1.vbs)
001
002
003
004
005
006
Set regEx = New RegExp              ' 文字列検索・置換用オブジェクトの作成
regEx.Global = True                 ' 文字列全体を検索するように指定

moji = "Tech-Ezo 2003 Round 23 おサルなWSH"  ' 検索対象文字列
regEx.Pattern = "2003"
WScript.Echo regEx.Replace(moji, "2004")

 上記のサンプルスクリプトでは、文字列(変数moji)内の"2003"を"2004"に変更しています。

 前半部分を簡単に説明しますと、1〜2行目ではRegExpオブジェクトの定義と検索オプションの指定。4行目は検索用の文字列の定義、5行目は検索文字列"2003"をRegExpに指定しています。ここまでは、今までやっていた検索と変わりませんね。

 文字列置換のポイントは6行目で、Replaceメソッドによって変数moji内にある、"2003"という文字列を"2004"に変更して結果を戻り値として返しています。他の言語を納めた方にはちょっと違和感のある書き方かもしれませんね。文字列置換に良くあるイメージは、"substr(検索対象文字列, 検索文字列, 置換文字列)"のように、3つのパラメタを伴うものですが、VBScriptでは、真ん中の部分である検索文字列がなく、Patternプロパティとして指定するようになっています。

 それでは、実際のスクリプトを修正してみましょう。

検索対象文字列を赤くする

 修正は至って簡単です。先に言いました通り、RegExpオブジェクトも既に検索用に定義済みですし、それに伴うオプションもそのままの状態で変更無しです。また、検索文字列を指定するPatternプロパティも、画面から入力された値を既にセットしていますので、これもこのままですね。ということで、残りはReplaceメソッドを使った置換文を1行書くだけで良さそうです。

 では、置換文を何処に書くか?ですが、これは画面表示用の文字列を作成している部分の直前で良いでしょう。つまり、テキストファイル処理関数(FileSrh())内の下記の部分になります。行数で言うと、22行目辺りからですね。

検索文字列を赤くするための変更部分 * ダウンロード(level13.lzh)
022
023
024
025
026
027
028
                If regEx.Test(tmpLine) Then           ' 指定の文字列を含むか?
                    repStr = "<font color=#FF0000>" & regEx.Pattern & "</font>"
                    tmpLine = regEx.Replace(tmpLine, repStr)
                    srhLine = srhLine & TextFile.Line - 1 & ":" & tmpLine & vbCr
                                                      ' 読み込んだ行のマージ
                    srhFlg =1                         ' 検索がヒットしたので1にする
                End If

 追加したのは23〜24行目です。1行で書くこともできますが、ちょっと長くなるので置換文字列を定義する行と、実際の置換処理する行に分けてみました。

 内容は先程の説明で十分かとは思いますが、一応コメントしておきますと、23行目で変数repStrに置換文字列を入れています。置換文字列は検索文字列を<font>タグで括るので、検索文字列が格納されたregEx.Patternを括ってみました。後は、24行目でReplaceメソッドを使って、テキストファイルから読み込んだ行(tmpLine)内にある、検索文字列を23行目で定義した置換文字列(repStr)で置換し、結果をtmpLineに戻してあげています。

さっそく実行

 さて、結果を見てみましょう。level13.htaをダブルクリックし、デフォルト入力のまま「検索」ボタンをクリックして下さい。

level13.htaを実行すると...

 前回のLevel12と比較してみましょう。

ちなみにlevel12.htaではこんな感じ

 どうですか?、ちょっとした修正ですが、結構見易くなっていますね。さらに、文字列置換は行いませんが、これと似たような修正として、ファイル名を<a>タグで括り実ファイルへのリンクを張るというのも使えそうです。

ファイル名をリンクにする * ダウンロード(level13a.lzh)
015
016
017
018
          ' テキストファイルの内容読み込み処理
            Set TextFile = fso.OpenTextFile(FileName) ' テキストファイルのオープン
            srhLine = "<a href=""" & FileName & """>" & FileName & ":" & vbCr
            srhFlg = 0                                ' 検索ヒットフラグのクリア

ファイル名をリンクにすると...(level13a.hta)

 修正行は17行目のみで、元々<b>タグで括っていたものを、<a>タグでリンクにしただけです。

 さて、今回はここまでです。次回も、今回同様ちょっとした修正でできる見た目の変更を紹介して見ようと思います。それでは、次回までご機嫌よう(笑。



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