テキストデータの抽出方法とは?

このQ&Aのポイント
  • テキストデータの抽出方法について教えてください。秀丸を使って、特定のキーワードが含まれる行とその後の3行を抜き出したいです。データの形式はID、日付、名前、予約情報の3行組で構成されています。
  • 具体的には、以下のようなデータが2万件ほどあります。抽出したいデータは、ID、日付、名前、予約情報の3行をカンマ区切りでまとめた形式です。
  • ご希望のデータを簡単にまとめると、IDと「==予約==」の後の3行をカンマ区切りで一行にまとめたいということです。秀丸を使って対象のデータから特定の行を抽出し、必要な形式に整形することができます。
回答を見る
  • ベストアンサー

テキストデータの抽出について教えてください。

テキストデータの抽出について教えてください。 秀丸を使っています。 あるキーワードを見つけたら、そのあと3行を抜き出すのような作業は可能でしょうか。具体的には ///////////////////////////////////// ID:20202,2010/5/19,山田太郎 ==予約== sono1:video1 sono2:video2 sono3:video3 ==コメント== コメントコメント ID:20203,2010/5/19,山田二郎 ==予約== sono1:video10 sono2:video11 sono3:video12 ==コメント== コメントコメント ///////////////////////////////////// というデータが2万件ぐらいあり、欲しいデータは以下です。 ID:20202,2010/5/19,山田太郎,sono1:video1,sono2:video2,sono3:video3 ID:20203,2010/5/19,山田二郎,sono1:video10,sono2:video11,sono3:video12 つまり、IDが入る一行 と「==予約==」の後の3行をカンマ区切りで一行にまとめたいのです。 予約は必ず3つあります。 IDと「==予約==」の間にもデータがあることがあります。 拙い説明で申し訳ございません。不足があればご指摘ください。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.3

#ANo2 の補足です。 申し訳ない。質問者さまのデータの方の:(セミコロン)は全角ですね。半角で記述してしまいました。 以下の通り修正いたします。 ■1回目 検索欄(置換の欄は空白) ^(?!ID:[0-9]+|sono1:|sono2:|sono3:).*\n ■2回目 検索欄 ^(ID:.+)\n(sono1:.*)\n(sono2:.*)\n(sono3:.*)\n 置換欄 \1,\2,\3,\4\n (コピペの時に、\nの後ろに不要なスペースが入ることがあるのでご注意)

ca6513110
質問者

お礼

JaneDueさん ありがとうございました。無事解決しました。 正規表現は私にとってややこしく、解説書を読んでもなかなか頭に入ってこなかったのですが おかげ様で手掛かりを得た感じです。 この度は大変お世話になりました。頑張ります!!

その他の回答 (2)

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.2

他のデータが不規則に入るかも知れない、ということですね。 一発で置換できればよかったのですが、複数行で思うように動いてくれないので、少々ドン臭いですが、 1.必要な行以外を削除 >> 2.データを連結 でいきましょうか。 1.不要な行を削除する----------- 置換ウィンドウを開いて、正規表現にチェックを入れる ■検索欄に ^(?!ID:|sono1:|sono2:|sono3:).*\n ■置換の欄は空白のまま 2.必要なデータを連結する------- ■検索欄に ^(ID:.+)\n(sono1:.*)\n(sono2:.*)\n(sono3:.*)\n ■置換の欄に \1,\2,\3,\4\n で試してみてください。

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.1

置換ウィンドウを開いて 正規表現にチェックを入れる ■検索欄に (ID.+)\n.*\n==予約==\n(sono1:.+)\n(sono2:.+)\n(sono3:.+)\n\n==コメント==\n.*\n\n ■置換の欄に \1,\2,\3,\4\n でいけると思います。 こちらの手元では動作しましたが、言うまでもなくバックアップしてテストして下さい。 (こちらの環境:秀丸Ver7.09 正規表現DLL: HMJRE.DLL V1.92)

ca6513110
質問者

補足

ご回答ありがとうございます! こんなに早くいただけるなんて感激しています。 正規表現は勉強中で、頭から煙を出している状態です。 質問文に挙げたデータは簡素化したデータでございまして この場合はうまくいったのですが、入力データが必ずしもこの形になっているとは限らず 関係ないデータも沢山入っている場合はどうしたらいいのでしょうか。 上のデータをいじってみました。 説明が足らずで2度手間になり申し訳ございませんが、どうぞよろしくお願いします。 //////////////////////////////////// ID:20202,2010/5/19,山田太郎 ==確認事項== 会員証の確認 ==予約== sono1:video1 sono2:video2 sono3:video3 ==コメント== 延滞多し。 来店時間遅め。 店長の友人。 ID:20203,2010/5/19,山田二郎 ==予約== sono1:video10 sono2:video11 sono3:video12 ==コメント== コメントコメント ==その他== アルバイト希望 /////////////////////////////////////

関連するQ&A

  • エクセルでのデータ抽出方法について

    Excel2010で、IDと氏名を結びつけたリスト表を作成しようと考えています。 例として以下のようなエクセル表があったとします。 ※列A・列B→ID及び氏名   列D・列E→列A・列Bから抽出したい情報        【列A】    【列B】    【列C】    【列D】    【列E】      【行1】   11111   山田 太郎    -      11119    (※「山田 九郎を」入れたい) 【行2】   11112   山田 二郎    -      11112    (※「山田 二郎を」入れたい)     【行3】   11113   山田 三郎    -       11118    (※「山田 八郎を」入れたい)     【行4】   11114   山田 四郎    -       11114    (※「山田 四郎を」入れたい) 【行5】   11115   山田 五郎              【行6】   11116   山田 六郎                【行7】   11117   山田 七郎           【行8】   11118   山田 八郎 【行9】   11119   山田 九郎         : D列は既に入力済み(確定)で、IDが割り振られている人の氏名をE列に挿入したい場合の エクセルの操作方法について教えていただきたく、よろしくお願いします。

  • Excel(マクロ?VBA?)で最大日付の行を抽出

    Excelのデータ抽出で困っております。 下記のようなデータがあり、各IDの最大日付の行を抽出しようとしていますが、抽出方法がわからず、困っています。  氏名  ID   日付   山田太郎 10 2012/12/01 山田太郎 10 2013/08/01 山田太郎 10 2014/12/01 山田太郎 10 2015/08/01 山田花子 20 2012/12/01 山田花子 20 2013/08/01 山田花子 20 2013/12/01 この際に、 山田太郎 10 2015/08/01 山田花子 20 2013/12/01 という2つの行を抽出したいですが、抽出方法がわかりません。 関数を使ってやろうとも思いましたが、関数をどれを使えばいいかわかりません。 別シートに抽出でも全く問題ありませんので、恐れ入りますが、抽出方法を教えてください。 よろしくお願いいたします。

  • 条件を抽出し、フラグを立てる関数

    下記条件の場合、D列に「○」フラグを立てたいです。 D列に入力する関数を教えてください。 どうぞよろしくお願い致します。 ・ B列が同じ名前の行を抽出。 ・ 抽出した行のC列に「鉛筆」「消しゴム」「ペン」が入力されている場合、   D列に「○」をつけたい。 ・ ただし、B列が同じでも、C列に「鉛筆」「消しゴム」「ペン」以外が入っていた 場合、D列には何も入れない。 ※B列には飛び飛びに同じ名前が入力されている場合もあります。 ※行は1000行ほどあります。 【前】      B列    C列 山田太郎  鉛筆 山田太郎  ペン 伊藤二郎  缶 伊藤二郎  鉛筆 鈴木五郎  ペン 鈴木五郎  消しゴム 木村三郎  消しゴム 木村三郎  鉛筆 山田太郎  消しゴム 鈴木五郎  パソコン 【後】   B列    C列    D列 山田太郎  鉛筆    ○ 山田太郎  ペン    ○ 伊藤二郎  缶 伊藤二郎  鉛筆 鈴木五郎  ペン 鈴木五郎  消しゴム 木村三郎  消しゴム  ○ 木村三郎  鉛筆    ○ 山田太郎  消しゴム  ○ 鈴木五郎  パソコン わかりにくくて申し訳ありませんが、よろしくお願いいたします。

  • vlookup関数で複数の数値を順番に抽出する方法

    注文者IDをキーにして1行毎に未払い金のデータを抽出したいです。 たとえば表が ID 名前 滞納額 01 山田 太郎 10000円 03 鈴木 健二 5000円 01 山田 太郎 50000円 と並んでいるときに、二行目・三行目の金額を合算して出力または、 セルを2つ使って該当者を抽出したいです。 01 山田 太郎 60000円 または 01 山田 太郎 10000円 50000円 どのように関数を使えば、上記のような結果を出力させることが できるかお教えください。  

  • EXCELで条件を満たす時コピー挿入したい

    EXCEL2002ですが、以下のようなデータがあるとします。      A      B 1    山田太郎 100 2    山田花子 100,200,300 3    鈴木一郎 300 B列にカンマ区切りで入力しているデータがある場合、      A      B 1    山田太郎 100 2    山田花子 100 3    山田花子 200 4    山田花子 300 5    鈴木一郎 300 上記のように、B列のカンマ区切り分を振り分けたレコードを新たに 挿入したいのです。 尚参考までに、A列は名前などでデータ内容は多様になり、B列は ある程度決まった選択肢(20~30通り)になります。 一般の関数では無理なような気がするのですが、VBAなどでは可能でしょうか? もし可能であれば、マクロなども組んだことがないものですから、 やさしくご教授いただければ幸いです。 よろしくお願いいたします。

  • replaceを使って更に重複レコード削除するには?

    下記のように空白除去、ソート、重複行削除を行いたいのですが、 なかなかうまくいきません。どなたか力を貸して下さい。 ----------------- name    | laptime ----------------- 山田太郎  | 50 鈴木 花子 | 20 山田 太郎  | 10 齊藤 二郎 | 60 山田 太郎  | 30 ------------------ ↓ ----------------- name    | laptime ----------------- 山田太郎  | 10 鈴木花子 | 20 齊藤二郎 | 60 ------------------ * laptime が小さい順 * nameの空白除去 * 空白除去後のnameの重複行削除(laptimeが一番小さいものを残す) 下記のようにSQL文を作って発行してみたのですが、 SELECT DISTINCT replace( replace( trim( name ) , ' ', '' ) , ' ', '' ) AS name_a, laptime FROM tyouhuku ORDER BY laptime ASC ----------------- name_a  | laptime ----------------- 山田太郎 | 10 鈴木花子 | 20 山田太郎 | 30 山田太郎 | 50 齊藤二郎 | 60 ------------------ と、空白削除とlaptimeソートまで出来てるのですが、重複行削除ができませんでした。 どなたかご助言、宜しくお願いします!

    • ベストアンサー
    • MySQL
  • 関数を使って重複するデータを抽出するには?

    今各年度の重複データの抽出の方法がわからなくて困っています。 H20年度         平成21年度 ID   氏名   住所  ID   氏名   住所 102 山田太郎  東京  505 山田次郎  福岡 205 山田花子  京都  603 山田五郎  滋賀 505 山田次郎  福岡  205 山田花子  京都 のような表があって H20と21で重複する人を別表に抽出したり、逆に重複しない人を抽出するにはどのような関数を使えばいいのでしょうか? よろしくお願いします

  • テキストデータの解析

    ユーザが操作したデータの解析を行っています。 データを秀丸で開き、コマンド一覧表(CSV)約1000行から 日本語名を手入力してます。 ユーザが操作したデータ(LOG)は↓のイメージです。 データ量は、10MB~1000MB(10万行~ ------------------------------ Command001 ~~~~~~(詳細) Command002 ~~~~~~(詳細) Command003 ~~~~~~(詳細) ------------------------------ 手入力しているのは、コマンド一覧表から日本語名を 一行下に追記する「//切り取り」「//コピー」などと入力 ↓がイメージです。 ------------------------------ Command001 //コピー ~~~~~~(詳細) Command002 //貼り付け ~~~~~~(詳細) Command003 //切り取り ~~~~~~(詳細) ------------------------------ 秀丸とコマンド一覧表(CSV)を使って、この作業を自動化出来ないでしょうか。 よく使うコマンドは、秀丸のキー操作を使って行っていますが どうしても漏れが出てしまい、正確な解析が出来ません。 LOGをWORDに貼り付けて、置換マクロを組んでみましたが案の定 「置換」なので、Command001が「//コピー」となってしまいます。 どなたかアドバイスお願いします。 もしくは、こんなソフトお勧めがありましたら教えて下さい

  • データ変換に伴なうエクセルの操作について

    他のソフトからCSV形式でエクスポートしたデータをエクセルでテキストファイルウィザードからカンマ区切りで開いた場合、一部のセルの中に余白が入ってしまいます。この余白を纏めて外したいのですが、その方法を教えてください。 例 no   名前          生年月日   1  山田 花子         1830/02/25   2  山田 太郎         1850/03/01  この時名前の後ろに空白が8文字分程入ってしまいます。 説明が下手ですみません、宜しくお願いします。

  • 改行

    秀丸というテキストファイルを使っています。 その中のカンマ区切りされているデータを カンマ毎に改行したいのですが、可能でしょうか? よろしくお願いします。