プロが教える店舗&オフィスのセキュリティ対策術

ログファイルのようなテキストファイルの中から一部分だけ抽出することは可能でしょうか。
たとえばタイトルやSQL文、それに結果がダラダラと並んでいる一連のログファイル(テキストファイル)の中から、使いたい結果の部分だけ使用したいと考えております。

具体的には次のような感じです(テキストファイル部分は一字下げています):

 --------------------
 18,購入年月
 SQL>******(省略します)*******
 SQL>******(省略します)*******
 SQL>******(省略します)*******

 顧客番号  購入年月   購入個数
 ----------------------------------
 0000012   2010/01   4
 0000530   2009/12   16
 0001234  2009/11  398

 3行取得しました。

 ----------------------
 19,顧客層
 SQL>******(省略します)*******
 SQL>******(省略します)*******
 SQL>******(省略します)*******
 ・・・

以上のテキストファイルの中から、
(1)「顧客番号  購入年月   購入個数」
から
(2)「3行取得しました。」
までを抽出したいです。
検索して範囲指定して切り取り…というのが原始的な方法ですが
対象ファイルが数個あるので、Excelで開き、VBA等で対応できればと思っています。
ちなみに(1)の項目名の間は複数スペースで区切られており、顧客~個数まで固定で、同一ファイル内に同じ文字列はないので、検索の条件に使えると考えています。(2)は抽出件数によって「*行」の箇所が変わるうえ、同一ファイル内の他の部分にも登場する文字列です。

(1)から次に初めて出てくる(2)までを抽出

といったことができればと思うのですが、なかなか良い方法が浮かびません。
何か良い方法がありましたらご教示いただければ幸いです。

A 回答 (2件)

古いVBAで、とりあえずご提示された条件を満たすだけの最低限の内容ですが。



Sub Data_Extract()

Dim TextLine As String
Dim Cell_Row As Long
Dim Atama_Four As String
Dim SW As Integer

Cell_Row = 0
SW = 0

Open "c:\Data.txt" For Input As #1

Do While Not EOF(1)
Line Input #1, TextLine

' 行中に"顧客番号"という文字を発見した場合にスイッチを入れる
If InStr(1, TextLine, "顧客番号") <> 0 Then
SW = 1
End If

' SWが1で、かつ行中に"行取得しました。"という文字を発見した場合にスイッチを切る
If InStr(1, TextLine, "行取得しました。") <> 0 And SW = 1 Then
Cell_Row = Cell_Row + 1
Cells(Cell_Row, 1) = TextLine
SW = 0
End If

'スイッチが入っていればその行を書き出す
If SW = 1 Then
Cell_Row = Cell_Row + 1
Cells(Cell_Row, 1) = TextLine
End If
Loop

Close #1

End Sub
    • good
    • 2
この回答へのお礼

こちらの希望する通りのご回答、ありがとうございます!
確認させていただいた瞬間、感動さえ覚えました。
ご回答の内容に加えて、対象ファイルを選択する方法を組み込めば
目的は達成できそうです。
本当にありがとうございました!

お礼日時:2010/02/09 20:42

逆に質問を。


このログに対してあなたが何らかの仕様を追加できますか?

もしできるのであれば簡単な方法があります。

たとえばほしいデータの最終行にvbtab等のコードを入れておけば
そのコードが出現するまでデータをExcelシートに書き込み続ける。
といった方法があります。

もしくは、【行取得しました。】という文字列が入った一行が出るまで
シートに書き込んでもいいでしょう。
しかし、ヒットしたデータまでログに履く仕様ってどうなんだろうとは思いますが。
    • good
    • 2
この回答へのお礼

なるほど、そのような方法があるのですね。
ただ、ログに対しての仕様追加は残念ながらできません。
ですので、一テキストファイルと考えて、
一度Excelで開いてから(情報はA列にしか入りませんが)
部分選択⇒切り貼りが一番手っ取り早いかと考えるのですが、
そのうまいやり方わかりません…。
ご回答(ご質問)ありがとうございました。

お礼日時:2010/02/08 23:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A