
ログファイルのようなテキストファイルの中から一部分だけ抽出することは可能でしょうか。
たとえばタイトルや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)までを抽出
といったことができればと思うのですが、なかなか良い方法が浮かびません。
何か良い方法がありましたらご教示いただければ幸いです。
No.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
こちらの希望する通りのご回答、ありがとうございます!
確認させていただいた瞬間、感動さえ覚えました。
ご回答の内容に加えて、対象ファイルを選択する方法を組み込めば
目的は達成できそうです。
本当にありがとうございました!
No.1
- 回答日時:
逆に質問を。
このログに対してあなたが何らかの仕様を追加できますか?
もしできるのであれば簡単な方法があります。
たとえばほしいデータの最終行にvbtab等のコードを入れておけば
そのコードが出現するまでデータをExcelシートに書き込み続ける。
といった方法があります。
もしくは、【行取得しました。】という文字列が入った一行が出るまで
シートに書き込んでもいいでしょう。
しかし、ヒットしたデータまでログに履く仕様ってどうなんだろうとは思いますが。
なるほど、そのような方法があるのですね。
ただ、ログに対しての仕様追加は残念ながらできません。
ですので、一テキストファイルと考えて、
一度Excelで開いてから(情報はA列にしか入りませんが)
部分選択⇒切り貼りが一番手っ取り早いかと考えるのですが、
そのうまいやり方わかりません…。
ご回答(ご質問)ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】テキストファイルから特定の文字列を抽出して、エクセルに出力する
Excel(エクセル)
-
テキストファイルから指定行をExcelに抽出したい。
Excel(エクセル)
-
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
-
4
Excel.VBA テキストファイルを指定行数からの読み込む
Excel(エクセル)
-
5
[エクセル VBA]テキストファイルから特定の行のみを抜き出したい 下記のようなテキストファイルから
Excel(エクセル)
-
6
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
7
テキストファイルから特定の文字列が入った行を取得したいです。 例えば下記のような文が記載されたテキス
Visual Basic(VBA)
-
8
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
9
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
10
一つのTeratermのマクロで複数のTeratermのウィンドウを立ち上げることはできますか?
サーバー
-
11
複数のテキストファイルをexcelでそれぞれ別シートに書き出したい
Excel(エクセル)
-
12
ある文字列を含む行の抽出
Excel(エクセル)
-
13
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
14
【VBA】複数のtxtファイルから特定区間の複数行を呼び出し、エクセルにまとめたい。
Visual Basic(VBA)
-
15
特定フォルダ内のテキストファイルの内容を全てエクセルに書き出す方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
WORDのVBAで差し込み印刷時、デ...
-
テキストファイルの一部分を抽...
-
バイナリファイルの区別
-
ファイル変換
-
テキストファイル内容の、16進...
-
accessでクエリをExcelにエクス...
-
コマンドプロンプトのテキスト...
-
CSVファイルの時刻の形式について
-
C++によるファイル送受信プログ...
-
VB6.0でExcel,PDF,Word出力方法
-
2GB以上のファイルを扱う方法
-
CSV形式で保存するとファイ...
-
Excel で「OLE は現在使用でき...
-
ファイルの排他について
-
openglで音楽を再生する
-
Thunderbird 受信メールからの...
-
jamファイルだけが転送できませ...
-
ファイルのダウンロードが遅い
-
RPGでメッセージファイル利用
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
WORDのVBAで差し込み印刷時、デ...
-
[VB.NET] 処理の高速化を行いた...
-
テキストファイル固定長データ...
-
Excel VBAが徐々に遅くなる
-
ファイル変換
-
c言語での単語数のカウント
-
パイソンでのテキストデータの...
-
ストリームについて。
-
「VB.net」DataGridViewへの選...
-
テキストファイル内の文字の有...
-
最新日付のテキストファイルを...
-
C言語
-
バイナリファイルの区別
-
Javaのプロパティファイルの文...
-
VB(VBA)で、バイナリデータを使...
-
C言語でテキストファイルをバイ...
-
EXCEL VBAでカンマ区切りテキス...
-
C言語のソースからコメントを抜...
おすすめ情報