- ベストアンサー
ログファイルを見やすく!VBSスクリプトで解決する方法
- ログファイルの縦の字並びが読みにくくて困っている新米です。
- 縦の字並びをきれいに整える方法がわからず苦労しています。
- URLの文字数に基準を合わせて、スペースを埋めて整列させる自動化を実現したいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#2です。おつかれさまです。 > 後は、調べる文字列のURLを順番に呼び出せば完成すると思いますが今その方法が分かりませんです。そこをご教示頂ければ嬉しいです。 いや、元のデーターがどのように提供されているのかさっぱり分かりませんので、答えようが無いです。 テキストファイルならまず全行読み込んで最大文字列を探し、先頭に戻って、スペーサー処理するしか無いでしょうか。 アクセスと書かれていることからデータベースに入っている値(文字列)ということであれば、取得時に、 Select max(len("データーの列")) from ... で簡単に出ます。が、行数が多いと遅くなります。 > 紹介して頂いたページには、String関数もあり、こちらの方が全角スペースにも利用できるので、こちらを採用することにしました。 URLは半角文字ですが、全角スペースは(固定幅で)半角2文字分です。全角0.5文字分の調整が必要になります。 半角文字での長さを測るなら、Len()ではなく、LenB()を使ってください。 > こんな手間のかかることやっていました。馬鹿みたいですね。 いえ。間違っては無いですよ。もちろん納品するようなプログラムでこれを書かれては困りますが、結果は同じです。 あとは、ここに聞く前に、関数を調べまくって、space()なり、string()なりを見つけられれば言うことなしなのですが。 徐々に覚えていってください。 VBScript リファレンス http://msdn.microsoft.com/ja-jp/library/cc392193.aspx
その他の回答 (3)
- notnot
- ベストアンサー率47% (4900/10359)
No1です。 >「例:」の見本が思ったように描画されていませんでした。半角スペースは一字分しか有効でないですね。もう一度書いてきます。上手くいくかな。 いや、「やりたいこと」は質問文から充分読み取れますよ。 >必要なことは、複数のURL文字列の一番字数の多いものをカウントしてそのカウント数と同じ数になるよう、字数の少ないURLにスペースを追加すれば、結果の「接続・・・」の字面を揃えることが出来るのではと考えたのです。 はい。その方法でいいです。 そこまでわかっていて、どのあたりがわからないのでしょうか?
補足
ご返事ありがとうございます。 「そこまでわかっていて・・・」と言われますが、分かっているのは、電子文章を作成するときそのようにキーを操作すれば目的の体裁に文章が出来上がるということです。 ですから、そのような動作をするスクリプトを組めば一応目的の達成になることも分かります。ところが私はプログラミングに縁のない人間でいながら、面倒なPC操作を自動化したいと考えVBSを始めたのです。 ですから基本をあまり理解していません。よって関数とかあってもそれを上手く組み合わせる具体的なことが分からないのです。 「勉強しろ」言われそうですが。。。
単純な方法としては、URLの最大長が決まれば、残り分をspace()関数で埋めてあげればよろしいのでは? http://www.kanaya440.com/contents/script/vbs/function/string/space.html -- 「接続失敗」を目立たせたいのであれば、「*** 接続失敗 ***」とか見た目で分からせるのも手ではないでしょうか? -- 後で見るのであれば、カンマ区切り、タブ区切りのテキストをcsvなどに吐いて、Excelで見る手もあります。
補足
ご返事ありがとうございます。 space()関数。。。こういうのもあったんですね。私は部分的な確認テストでFor文を使っていました。こんな感じです。 Dim X, Y, Z Y = " " Z = "" For X = 1 To 必要なスペースの回数 Z = Z & Y Next こんな手間のかかることやっていました。馬鹿みたいですね。 紹介して頂いたページには、String関数もあり、こちらの方が全角スペースにも利用できるので、こちらを採用することにしました。 その後、基準の長さ(文字数)とする最大文字数の検知は、以下のようなものでテストしてみました。 AAA = Len("調べる文字列") If BBB < AAA Then BBB = AAA End If これで「調べる文字列」を変更して繰り返せばBBBに最も大きい文字数が残りましたがこれももっと良い方法があるのかなと思っています。後は、調べる文字列のURLを順番に呼び出せば完成すると思いますが今その方法が分かりませんです。そこをご教示頂ければ嬉しいです。 >接続失敗」を目立たせたいのであれば・・・ 実際は、この部分に判定だけでなく、もうちょっと複雑な情報が入ります。
- notnot
- ベストアンサー率47% (4900/10359)
どのあたりがわからないのですか?
補足
ご返事ありがとうございます。 「例:」の見本が思ったように描画されていませんでした。半角スペースは一字分しか有効でないですね。もう一度書いてきます。上手くいくかな。 http://aaa.aaa.jp/ 接続成功 http://aaa.aaa.jp/bbb/ 接続成功 http://aaa.aaa.jp/bbb/ccc/ 接続成功 http://aaa.aaa.jp/aaa/ 接続失敗 http://aaa.aaa.jp/aaa/ccc/ 接続成功 説明不足ですみませんです。URLはアクセス用に設定されたもので、 URL1 = "http://aaa.aaa.jp/" URL2 = "http://aaa.aaa.jp/bbb/" ・ ・ ・ こんな感じです。 例えば、1URLが一回の接続で、その結果(接続の合否)をそのURLに続けて記述します。この時に結果の「接続・・・」の字面を揃える処理をしたいと考えています。必要なことは、複数のURL文字列の一番字数の多いものをカウントしてそのカウント数と同じ数になるよう、字数の少ないURLにスペースを追加すれば、結果の「接続・・・」の字面を揃えることが出来るのではと考えたのです。この方法は私がイメージしたのもで他の方法でも同じことが実現できれば何でも構いませんです。
補足
ご返事ありがとうございます。 その後、配列の処理が必要と分かり、サンプルを見つけて組んでみたら思うように動きました。 Dim URL1, URL2, URL3, URL4, URL5 URL1 = "http://aaa.aaa.jp/" URL2 = "http://aaa.aaa.jp/bbb/" URL3 = "http://aaa.aaa.jp/bbb/ccc/" URL4 = "http://aaa.aaa.jp/aaa/" URL5 = "http://aaa.aaa.jp/aaa/ccc/" Dim URLTXT, TXTMAX, SETCNT, U, T U = Array(URL1, URL2, URL3, URL4, URL5) For T = LBound(U) To UBound(U) URLTXT = U(T) SETCNT = Len(URLTXT) If TXTMAX < SETCNT Then TXTMAX = SETCNT '最大文字数を記憶 End If Next Dim SPACE, LIST For T = LBound(U) To UBound(U) URLTXT = U(T) SPACE = TXTMAX - Len(URLTXT) 'スペースの数 LIST = (LIST & URLTXT) & String(SPACE, " ") & _ " " & Time & vbCrLf Next MsgBox LIST 配列は初めての経験でした。これをひな型にして色々作ってみたいと思います。文字数も全角、半角に対応して数えられるようなものも作りたいと思います。 VBScript リファレンスのURLありがとうございます。構文はなんとなくイメージで分かりますが、それを説明した文章が難しいです。これも基本がなっていないからですね。反省しています。 色々ありがとうございました。