• 締切済み

フォルダ内の複数ファイルから抽出(vbs)

web のログファイルの集計のため、以下が可能なコードを教えていただきたい。 そのまま使えるコードですと非常に助かります。 (vbs または vba) logというフォルダに、複数のログファイルが入っています。 ファイルの文字コードは、UTF8  改行は、LFです。 この複数のファイルから、特定の文字列の入っている行を抜き出して、 1つのCSVファイルに書き出したい。(文字コードをShift-Jis 改行は、CRLFに変えたい) どうかお助けください。宜しくお願いいたします。

みんなの回答

回答No.1

こんにちは 早速ですが、 以下のVBSコードを、提案させていただきます。 ++++++++++++++++ Option Explicit Call Main() MsgBox "END" WScript.Quit '--------------- Sub Main() '■ファイル読み込み関係 '参考URL 'http://d.hatena.ne.jp/niemands/20090316/1237225383 Const adTypeText = 2 '文字扱いの指定の定数 Const adLF = 10 '改行の扱い方法の定数 Const adCRLF = -1 '読み書きみ方式 Const adReadLine = -2 '1行ごと読み込む Const adWriteLine = 1 '1行ごと書き出す Const adSaveCreateOverWrite = 2 '上書き保存の許可 Dim objadIn '読み込み用 Set objadIn = CreateObject("ADODB.Stream") objadIn.Type = adTypeText '文字扱い objadIn.Charset = "UTF-8" 'ファイルの文字コードは、UTF8 objadIn.LineSeparator = adLF '改行は、LF Dim objadOut '書き出し用 Set objadOut = CreateObject("ADODB.Stream") objadOut.Type = adTypeText '文字扱い objadOut.Charset = "Shift_JIS" 'ファイルの文字コードは、Shift-Jis objadOut.LineSeparator = adCRLF '改行は、CRLF objadOut.Open 'インスタンスを作成 '■ファイル取り扱い関係 '参考URL 'http://blogs.technet.com/b/heyscriptingguy/archive/2004/10/20/how-can-i-get-a-list-of-all-the-files-in-a-folder-and-its-subfolders.aspx Dim fso 'fsoの取得 Set fso = CreateObject("Scripting.FileSystemObject") Dim objFolder 'logフォルダの格納 '★ここでは適当なパスを指定 Set objFolder = fso.GetFolder("F:\log") Dim objFile 'フォルダ内のすべてのファイル参照 '★ここでは、すべてフォルダ内は対象とするログテキストファイルと仮定 For Each objFile in objFolder.Files objadIn.Open 'インスタンスを作成 objadIn.LoadFromFile(objFile.Path) '対象ファイルを開く '末尾まで各行をループする Do While Not objadIn.EOS '次の行を読み取る Dim fff fff = objadIn.ReadText(adReadLine) '特定の文字列の入っている行である場合 '今回は「あああ」という文字が含まれている場合 If InStr(fff, "あああ") > 0 Then fff = Left(fff, Len(fff) - 1) '末尾のLFを削除する。 '→書き出す objadOut.WriteText fff, adWriteLine End If Loop '閉じる objadIn.Close Next 'csvファイルとして保存する。 '今回は、F:\に出力する。 'オブジェクトの内容をファイルに上書き保存 objadOut.SaveToFile ("F:\test.csv"), adSaveCreateOverWrite '閉じる objadOut.Close '解放 Set objadIn = Nothing Set objadOut = Nothing Set objFile = Nothing Set objFolder = Nothing Set fso = Nothing End Sub ++++++++++++++++ 尚、取り急ぎ作成したコードなので 荒い部分がありますので、適時修正していただけると幸いでございます。 また、 フォルダ/ファイルパスや、検索する文字列も、 ご利用にあわせて、修正してください。 その他、コード内のURLも、ご参考いただけると幸いでございます。 もし、ご希望の内容と異なっていれば、すみません。 以上 ありがとうございました。

参考URL:
http://d.hatena.ne.jp/niemands/20090316/1237225383