[PR]
2025年04月19日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
テキストファイルから指定した文字列を含む行を抽出するVBScriptの一般化
2021年04月25日
前回、ログファイルから該当の文字列を含む行だけ抽出するVBScriptを作った。
抽出する文字列を追加する場合、プログラムを修正しないといけないってのは
使いづらいと思い、抽出条件をINPUTBOXで指定するバージョンを作ってみた。
紙ベースでしっかり設計したから1時間かからずに完成。
毎度INPUTBOXで文字列を入力するのはデバッグ中もだるさを感じるとこなので、
オプション設定にした方が使いやすいか・・・。①か②お好みで。
①strFilter = InputBox("フィルタ条件を入力してください。" & chr(10) & "ORは†、ANDは‡で指定します。","フィルタ条件入力")
②strFilter = "ui‡com†アカ"
カンマやアスタリスクを演算文字列として使うことも考えたけど、
演算文字列はログ抽出できないので、†と‡を使うことにした。
演算文字列は‡を先に計算する。たとえば
A†B‡C とした場合は、Aまたは(BかつC)を含む文字列を取得する。
‡の数が未知数だったので、Dictionary配列を使うことにした。
うまく使えば結構便利かも!!
◆使用方法◆(変更なし)
ソースをメモ帳にコピーし、「.vbs」形式で保存。
ログファイルを保存したファイルのアイコンにドラッグドロップする。
(複数ファイルにも対応)
以下、ソース。
抽出する文字列を追加する場合、プログラムを修正しないといけないってのは
使いづらいと思い、抽出条件をINPUTBOXで指定するバージョンを作ってみた。
紙ベースでしっかり設計したから1時間かからずに完成。
毎度INPUTBOXで文字列を入力するのはデバッグ中もだるさを感じるとこなので、
オプション設定にした方が使いやすいか・・・。①か②お好みで。
①strFilter = InputBox("フィルタ条件を入力してください。" & chr(10) & "ORは†、ANDは‡で指定します。","フィルタ条件入力")
②strFilter = "ui‡com†アカ"
カンマやアスタリスクを演算文字列として使うことも考えたけど、
演算文字列はログ抽出できないので、†と‡を使うことにした。
演算文字列は‡を先に計算する。たとえば
A†B‡C とした場合は、Aまたは(BかつC)を含む文字列を取得する。
‡の数が未知数だったので、Dictionary配列を使うことにした。
うまく使えば結構便利かも!!
◆使用方法◆(変更なし)
ソースをメモ帳にコピーし、「.vbs」形式で保存。
ログファイルを保存したファイルのアイコンにドラッグドロップする。
(複数ファイルにも対応)
以下、ソース。
PR
テキストファイルから指定した文字列を含む行を抽出するVBScript
2021年04月24日
ログファイルからハードウェア故障の有無を調べることがある。
何度も何度もキーワードを変えて検索を繰り返すのはくそだりぃので
該当の文字列を含む行だけ抽出するVBScriptを作ってみた。
簡単にできるだろと高を括っていたけど、意外にも苦戦。
なんとか想定した2時間で完成。
ん・・・。
ログファイルってUTF8の可能性もあるよな。。。
で、作り直し。
VBScriptでUTF8のファイル読み込みで検索したら、神がかったサイトを発見。
https://neos21.net/blog/2016/03/25-01.html
UTF-8 テキストを読み込み、同じ内容をUTF-8テキストで書き込むサンプル。
読み込みと書き込みの間に文字列を比較する処理を追加して完成。
趣味プログラミングでは、流用しやすいソースを見つけられるかで全然工数が違う。
自分でVBAで同じようなことやったのに、ググった方が早いだなんて。。。
◆使用方法◆
ソースをメモ帳にコピーし、「.vbs」形式で保存。
ログファイルを保存したファイルのアイコンにドラッグドロップする。
(複数ファイルにも対応)
ログファイルの文字コードに合わせて設定を変えなきゃいけないのはめんどいな。
以下、ソース。
ドラッグドロップで更新日時をファイル名に付与するVBScript
2021年03月25日
フォルダ別に作成されたログファイルが全部同じ名前で保存されている。。。
全件をローカルにコピペした場合は、(数字)で持ってこれるけど、
負荷軽減のために複数回に分けようとすると、windowsのバージョンが古いせいか
上書きしますかYES/NOしかない。
ファイル名に更新日時を付与したい衝動にかられる。
バッチファイルで使えそうなやつをみつけたけど、
更新日時の秒が入ってないのでそのままじゃ使えず。
軽くいじってみるも、うまくいかず断念。
自動的にファイル名に更新日付を付けるバッチファイルを作ったら便利すぎた
Engineer's Notebook
https://eng-notebook.com/post-3246/
VBScriptで自作を決意。
でもそのまえにググってみたら、もろHIT!
本部長は管理ができない
http://gren-dken.hatenablog.com/entry/2013/08/22/000119
冒頭部分のエラー処理については、こちらのサイトから
解析エンジニアの自動化 blog
http://chuckischarles.hatenablog.com/entry/2018/10/29/002921
利便性を考えて、更新日時の文字数は冒頭の定数で変更可能にした。
リネーム後のファイル名が既に使われている場合、
自動的に(№)を付与する仕様に変更。
ファイルの頭につけるかお尻につけるか
定数を定義して、IF文で分岐するように修正。
以下、ソース
全件をローカルにコピペした場合は、(数字)で持ってこれるけど、
負荷軽減のために複数回に分けようとすると、windowsのバージョンが古いせいか
上書きしますかYES/NOしかない。
ファイル名に更新日時を付与したい衝動にかられる。
バッチファイルで使えそうなやつをみつけたけど、
更新日時の秒が入ってないのでそのままじゃ使えず。
軽くいじってみるも、うまくいかず断念。
自動的にファイル名に更新日付を付けるバッチファイルを作ったら便利すぎた
Engineer's Notebook
https://eng-notebook.com/post-3246/
VBScriptで自作を決意。
でもそのまえにググってみたら、もろHIT!
本部長は管理ができない
http://gren-dken.hatenablog.com/entry/2013/08/22/000119
冒頭部分のエラー処理については、こちらのサイトから
解析エンジニアの自動化 blog
http://chuckischarles.hatenablog.com/entry/2018/10/29/002921
利便性を考えて、更新日時の文字数は冒頭の定数で変更可能にした。
リネーム後のファイル名が既に使われている場合、
自動的に(№)を付与する仕様に変更。
ファイルの頭につけるかお尻につけるか
定数を定義して、IF文で分岐するように修正。
以下、ソース
ファイル名として使えない文字列を除去
2020年04月30日
完全に個人的メモです。
前回作った、コピーした文字列をテキストファイルとして保存するVBscript。
メールの件名から本文までをコピーして、
ファイル名指定で、コピーしたテキストを貼り付けると
件名だけがファイル名になるのだけど、
よく使われる":"は、禁則文字になっててエラーになる。
なので、自動的に除去する関数を作ってみた。
以下、ソース。
前回作った、コピーした文字列をテキストファイルとして保存するVBscript。
メールの件名から本文までをコピーして、
ファイル名指定で、コピーしたテキストを貼り付けると
件名だけがファイル名になるのだけど、
よく使われる":"は、禁則文字になっててエラーになる。
なので、自動的に除去する関数を作ってみた。
以下、ソース。
クリップボードの内容をテキストファイルに保存するVBScript②
2020年04月27日
前回、クリップボードの文字列を取得して、
日時+ファイル名指定でメモ帳に保存するVBscriptを作った。
動作確認したところ、環境依存文字が含まれるとうまくいかない。
WEBページの文字列って環境依存系多いのよね。
ブラウザ履歴を取得するマクロを作ったときも苦労したな。。。
で、調べたらいいページ発見。
https://blog.systemjp.net/entry/2013/04/10/191821
CreateTextFileの指定を変えるとUnicodeになるようだ。
修正前:fso.CreateTextFile(fName, true)
修正後:fso.CreateTextFile(fName, true,true)
CreateTextFileメソッドについては、ここがわかりやすい。
https://vbabeginner.net/filesystemobject%E3%81%AEcreatetextfile%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89/
ただし、VBscript自体の文字コードもUnicodeで保存する必要あり!
その他、InputBoxを表示中にコピー操作もあるので、処理順を変更。
以下、ソース。
'ファイル名を生成
dim iText
iText = inputbox("ファイル名を指定")
dim ClipText
ClipText=GetClipboardText()
dim date,fName
date=Replace(now, "/", "")
date=Replace( date , ":" , "" )
date=Replace( date , " " , "_" )
date=left(date , 13)
if iText ="" then
fName ="ClipText_" & date & ".txt"
else
fName ="ClipText_" & date & "(" & iText & ").txt"
end if
'テキストファイルを作って書き込み https://win.just4fun.biz/
dim fso,tso
Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.CreateTextFile(fName, true,true) ' unicode
tso.Write(ClipText)
tso.Close
'クリップボードを取得 'http://osanai.org/47/
Function GetClipboardText()
Dim objHTML
Set objHTML = CreateObject("htmlfile")
GetClipboardText = Trim(objHTML.ParentWindow.ClipboardData.GetData("text"))
End Function