テキストファイルの一部分の抽出方法

このQ&Aのポイント
  • テキストファイルの中から特定の部分を抽出する方法についてご質問があります。
  • ログファイルのようなテキストファイルの中から必要な情報だけを抽出したい場合、ExcelのVBAを使用することで効率的に処理できます。
  • 具体的な例として、テキストファイル内の特定の行から次に出てくる特定の行までを抽出する方法を考えています。
回答を見る
  • ベストアンサー

テキストファイルの一部分を抽出する方法について

ログファイルのようなテキストファイルの中から一部分だけ抽出することは可能でしょうか。 たとえばタイトルや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

einsiedler
質問者

お礼

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

その他の回答 (1)

  • finabi
  • ベストアンサー率0% (0/3)
回答No.1

逆に質問を。 このログに対してあなたが何らかの仕様を追加できますか? もしできるのであれば簡単な方法があります。 たとえばほしいデータの最終行にvbtab等のコードを入れておけば そのコードが出現するまでデータをExcelシートに書き込み続ける。 といった方法があります。 もしくは、【行取得しました。】という文字列が入った一行が出るまで シートに書き込んでもいいでしょう。 しかし、ヒットしたデータまでログに履く仕様ってどうなんだろうとは思いますが。

einsiedler
質問者

お礼

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

関連するQ&A

  • テキストファイルから、一部の行を抽出したい

    下記のようなテキストファイルの中から、抽出したい行だけを指定して、取り出す方法はありますでしょうか。 テキストファイルの中身(部分) <h3 align="center">顧客名1</h3> <table><tr><td>ABC商事</td><td>鹿児島県</td></tr></table> <h3 align="center">顧客名2</h3> <p>出版</p> <br> <table> <tr><td>A株式会社</td><td>宮崎県</td></tr> ←抽出したい行 <tr><td>bb株式会社</td><td>長崎県</td></tr> ←抽出したい行 </table>   <p>教育</p> <br> <table>                      <tr><td>TT株式会社</td><td>鹿児島県</td></tr> ←抽出したい行 <tr><td>W株式会社</td><td>東京都</td></tr> ←抽出したい行 </table>                            <p>マスコミ<p> 以下省略 実際には、ファイルが大きく、抽出したい行が多いため、自動で処理できればと考えております。 VBAで作成できればと思っています。 <h3 align="center">顧客名2</h3> のあとに、<table>があれば、抽出を開始し、 </table> で、抽出をやめる、 また、<table>があれば、抽出を開始するということができればと 思うのですがよい方法がありましたら、ご教授いただければ幸いです。 よろしくお願いいたします。

  • テキストファイルからの抽出

    VBAでもコマンドプロンプトでもいいのですが、1000行くらいあるテキストファイルを読み込んで、キーワード「タイムアウト」を含む行の1つ手前の行の文字列を抽出、それらを1つのファイルにまとめて出力させたいのです。 VBAで自分なりにやってみたのが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142881517 の最後の回答にあるマクロに手を少し加えて「タイムアウト」のある行番号をテキストファイルに出力し、その出力ファイルを読み込んで、一つ手前の行番号のリストを作ることまではできました。 ですが、どうやってそのリストから行番号を指定して、元のファイルからタイムアウトを含む行の1つ手前の行を抽出し、1つのファイルにまとめて出力させられるのかが分かりません。 後Powershellはまだ勉強途中なのですが、こっちでならできますか? アドバイスをお願いします。

  • テキストファイルから指定行をExcelに抽出したい。

    「WindowsXP」/「Office2003Professional」を使用しています。 一つのフォルダに格納された複数のテキストファイルから、指定した文字列を含んだ行だけをExcelに抽出し、一覧表にする方法を教えて下さい。 各テキストファイルの抽出したい部分は以下のようになっています。(一部抜粋) ------------------ +製造元 *NEC +型番 *ABC-000 +メモリMAX *512GB +スロット数 *2 +DIMM1 *256 MB *333MHz +DIMM2 *256 MB *333MHz ------------------ 文字の先頭に[+]がついているものが検索文字列で、[*]が抜き出したいデータ部分です。 (実際のテキストでは[+]や[*]は書いてありません。) これをExcelで検索文字列を項目名に指定し、[*]部分を抜き出し全テキストファイルを一覧表にしたいと思っています。(行列反転した表) ------------------     A        B    C    D       E       F     G 1 ファイル名 製造元   型番  メモリMAX スロット数  DIMM1   DIMM2 … 2 aaa.txt NEC   ABC-000  512MB     2 256MB   256MB 3 bbb.txt FUJITU FMV10 1024MB 2 512MB                ・                ・ ------------------ ●テキストファイルの検索文字列とデータの間には半角スペースが入っています。 ●テキストファイルの検索文字列の行位置はファイルごとに異なります。 ●テキストファイルの検索文字列の中にはファイルによっては存在しない文字列もあります。 ●ExcelのA列にはフォルダ内のファイル名が予め全て入力されています。 もしもVBAを使用しなければならない場合は、VBAの知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。 宜しくお願い致します。

  • テキストファイルでの更に細かい抽出

    おはようございます。前回、以下の質問をいたしました。その時は大変お世話になりました。 「テキストファイルに一行ずつ、バラバラの個人情報が入っているのですが (例:千葉県・東京都・茨城県・千葉県・群馬県・千葉県など) それを特定の一つだけを残したいのです。 (例:千葉県・千葉県・千葉県) その抽出方法を教えていただけませんでしょうか?」 この問題は皆さんの回答により、解決することができました。今回はこれより更に細かいものの抽出対象をしたいのです。 千葉県で抽出をすると、必要のない市まで抽出対象ででてきます。 それをコマンドプロンプトで千葉県を抽出する時に、必要のない特定の市を消す・または抜かすことはできますでしょうか? コマンドプロンプトで抽出した場合、テキストファイルの一行目と二行目の間に勝手に、 「□□□.TEXT」←抽出する前のファイル名 が作られてしまいます。 これをいちいち消すのが面倒くさいのです。 さらにその後開いて名前を付けて保存しなくてはならないのですが、デスクトップに「2005.06.11.dat」というように日付をダットファイルで保存できますでしょうか? 以上です。説明が下手で分かりにくいと思いますので、その都度、補足していきます。どうぞよろしくお願いいたします。

  • データのテキストファイル抽出

    データの抽出に困っています。 エクセルデータにてA~Lのフィールドに値が入っていて、1000レコード程のデータを ・1レコードずつ ・A列のフィールドをファイル名に ・テキストファイルに出力 ・テキストファイルには1レコードを縦に、フィールドごと改行して並べる 上記のようにして作成する必要があります。 今までは、 A B C...K L となっているデータの列と行を入れ替えて A B C . . K L としてテキストファイルを作成し、セルAのフィールドをファイル名にして、 手作業で1列ごとにコピー&ペーストして行っていました。 非常に効率が悪いので、全自動化もしくは一部自動化出来ないかと試行錯誤していますが 良い方法が見つけられません。 何か良い方法をご存知の方がおりましたら教えて下さい。

  • テキストファイル→抽出した行をexcelに

    VBAで、下記のようなログファイルのテキストを読み込んで、必要な文字が含まれる行だけを、エクセルに書き込むコードを教えていただけると助かります。 読み込むファイルの例(実際は、数万行あります) (1行目)dammy.co.jp - - [01/Jan/2015:00:03:51 +0900] "GET /west/index.html      HTTP/1.0" 200 ..... (2行目)smotor.co.jp - - [01/Jan/2015:00:03:51        +0900] "GET /drink/orange/index.html HTTP/1.0" 200 ..... たとえば、/west/ が含まれる行だけを抽出して、excelシートに書き込みたい ログファイルは、改行コードがCRLFです。  どなたかお分かりになる方、お助けください。 当方、VBAは初心者なので、説明も加えていただけると非常に助かります。

  • [VBS] テキストファイルから任意の値を抽出する

    規則性のあるテキストから、1行づつ処理を行い ある文字列の設定値を抽出したいです。 例:Bの値だけを抽出したい。(AとBの間は半角スペース) 【テキストファイルの中身】 ---------------------------------------- 1行目| A="あ" B="あ" A="い" B="い" A="う" 2行目| A="え" B="う" A="お" B="え" A="か" 3行目| A="き" B="お" A="く" B="か" A="け" ---------------------------------------- 【出力結果】(Bの値だけ) --------------------- 1行目| あ,い 2行目| う,え 3行目| お,か --------------------- 色々方法はあると思いますが、どうしても複雑になってしまうので 簡単に出来る方法(観点)があれば、ご教示頂きたいです。

  • テキストから単語だけを抽出する

    たとえば「この中からテキストファイルだけを抽出してください」という一文があったとして、「中」「テキストファイル」「抽出」という単語だけを自動で抜き出すことができるソフトなど、方法などはありませんか?

  • windowsXP コマンドプロンプトでテキストファイルを閲覧する方法

    こんにちは。 コマンドプロンプト初心者です。 テキストファイルを、最終行から10行~最終行指定して、 閲覧する方法などがあれば教えて下さい。 ※本当は、IPMsgの送受信を、コマンドプロンプト上で行いたいのですが、 方法が思い浮かばなくて、ログファイルの中から、 新しいめのデータを抽出しようと思っております。 IPMsgの受信データを自動的にコマンドプロンプトに出力することが できれば一番なのですが・・・。 よろしくお願いいたします。

  • テキストから文字列の抽出法

    テキストから文字列を抽出して、比較したいのですが、良いアプリケーションをご存じないでしょうか? 具体的には2つの異なるフォーマットのファイルがあり、それぞれに(同一の文字列かどうか)比較したい文字列は1行ずつソートされた形で含まれています。しかしその同じ行に時刻などの付加情報が含まれているため、行単位で比較することができないのです(行単位で比較できるアプリは知っています)。 文字列とはファイル名ですので、*.* の形で指定して、抽出できればと思うのですが... もしご存知の方がいらっしゃいましたら、教えてください。

専門家に質問してみよう