タイトルがきめれない。(仮)

つまらないサラリーマンがたまに書いてる場末のブログです。

Windows 備忘録

【備忘録】テキストファイルから任意の文字列を抽出する

投稿日:

仕事で3万行ぐらいあるそこそこ規則的なテキストファイルから任意の文字列を抽出しました。
今後も同じことを何度かやるので備忘録として、完全に個人的なメモです。

例えばこんな感じのテキストデータから、任意の文字列を抽出したい。

食事のログかなんかだと思っていただければ幸い。
日付の後にくるのがその日に摂取した炭水化物、炭水化物の後に角括弧[]で囲まれている部分がその日の炭水化物のトッピングでいわゆる「ご飯の友」、そのうしろがひと言メモという構成。

抽出したいのは白米だった日のご飯の友、ついでに重複する文字列は削除してひとつにしたい。最終的に目標とする形は下のようなもの。

実際にはもっと複雑な構成のログファイルから特定の操作を行ったIPアドレスを抽出する作業をしています。上の例文程度ならもっと効率的な方法があると思うし、僕がアホなだけでもっと簡単に処理できる方法は絶対にあるはず。

使ったもの(環境)

  • Windows 10
  • Mery Ver 2.6.7 (テキストエディタ)

下準備

Meryの機能を拡張するため、マクロを追加します。

  1. テキスト整形 -MeryWiki にアクセスし、『スターターパック』の項目にある『テキスト整形.zip』をダウンロード。
  2. ZIPファイルを展開し、ファイルふたつをMeryのインストールフォルダにある『Macros』フォルダにコピー。
  3. Meryを起動し、メニューの『マクロ』→『カスタマイズ』を開く。
  4. 『マクロのカスタイマイズ』というウインドウが開いたら『追加』をクリックし、保存した『テキスト整形.js』を開く。『OK』ボタンを押して『マクロのカスタイマイズ』ウインドウを閉じれば準備完了。

手順

1.特定の行だけを抽出

まずは『白米』と書かれた行のみを残し、その他の行を削除します。

  1. Meryでファイルを開き、テキストをすべて選択。
  2. メニューから『マクロ』→『テキスト整形』を選択。さらにコンテキストメニューみたいなものが表示されるので、『除去/削除』→『入力文字列を含む行を削除…』を選択。
  3. 表示されるウインドウに『白米』と入力して『OK』ボタンをクリック。

パンとかパスタの行が消えて、下のようになります。

2.特定の文字列を抽出

各行の『白米』に続く角括弧内の文字だけを抽出します。
角括弧内の文字列は不規則なので、各行とも括弧開き以前と括弧閉じ以降の文字列を削除し、角括弧内の文字列のみを残す方法を取ります。

括弧開き以前を削除

メニューから『検索』→『置換』を選択。
『置換』ウインドウが開いたら『正規表現を使用する』にチェックを入れ、『検索する文字列』に下のとおり入力。

最初のドットとアスタリスクは正規表現で「任意の文字が0個以上」という意味。4文字目は指定したい半角の角括弧開き。半角の角括弧は正規表現の処理でも使われる文字なので、今回は処理用ではなく文字として扱うよう、3文字目にバックスラッシュ(Windowsだと\マーク)を入れます。

『置換後の文字列』は空欄のまま、『すべて置換』をクリックします。結果は下のとおり。

括弧閉じ以降を削除

やり方は括弧開き以前を削除したときと同じ。『検索する文字列』のみ下のとおり変更します。

これで「角括弧閉じ以降の0個以上の任意の文字列」という意味になります。『すべて置換』をクリックしたあとの結果は下のとおり。

3.重複する文字列(同じ内容の行)を削除してひとつにする。

今回は統計をとるわけではなく単純に種類を知りたいだけなので、同じ内容の行がふたつ以上あった場合は削除し、ひとつだけ残します。操作は特定の行だけを抽出したときとほぼ同じ。

  1. テキストをすべて選択。
  2. メニューから『マクロ』→『テキスト整形』を選択。さらにコンテキストメニューみたいなものが表示されるので、『除去/削除』→『重複行を単一化』を選択。

例では2行あった『納豆』が1行のみになります。

目的の形になったので以上で処理はおしまい。

その他所感

最初の方にも書いたけど今回抽出したかったはIPアドレス。正規表現でIPアドレスを検索する方法はなんとなく把握してる。

検索はできるんだけどIPアドレス以外の部分を削除してIPアドレスだけを残す方法がわからない。なんかこう、サクッとできる方法はないもんか。

諸々含めてたぶんサクラエディタとかの方が簡単にできるんだろうけど、テキストエディタとしてはMeryの方が好き。Meryでなんとかしたい。

-Windows, 備忘録
-, ,

執筆者:


コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

【備忘録】『Subscribe2』で記事投稿時の通知メールが送信できなかったときにやったこと

仕事で構築したWebサイトのお話。 WordPressのメール配信プラグイン『Subscribe2』で、記事投稿時に登録ユーザーに対して通知メールを送信するよう設定したにも関わらず送信できない現象に遭 …

スタンダードプランからスタンダードプランへ。速くなったさくらインターネットの新レンタルサーバに引っ越してみました。

2006年から12年もやってるのに記事が150件ちょっとしか投稿されていないこちらのしょーもないブログ『タイトルが決められない。(仮)』。開設時よりサーバはさくらインターネットのレンタルサーバ スタン …

ASUS Eee PC 1215B

ASUS Eee PC 1215BにWindows 10 Insider Previewをインストールしてみました

2011年に購入したノートPC『ASUS EeePC 1215B』にWindows 10 Insider Previewをインストールしてみたので、動作状況などを書いておきたいと思います。正式リリース …

【自分メモ】『ESET ファミリー セキュリティ』導入後、インターネットに接続できなくなったときにやったこと

数か月前に、自宅用のセキュリティソフトとして『ESET ファミリー セキュリティ』を導入しました。 今までは端末ごとにフリーのセキュリティソフトを入れていましたが、ちょっと前に妻が偽通販サイトに騙され …

pageruといいます。
茨城県水戸市生まれ、生まれてから36年間住み続けた水戸市を離れ、現在は栃木県某町に住む1980年生まれのサラリーマンです。
フラメンコにハマる5つ年上の嫁とふたりの息子(7歳と2歳)の4人でまあまあ楽しく暮らしています。
写真を撮るのとゲームで遊ぶのが好きですが、どちらもたいして上手なわけではなく、残念な趣味になっています。
特撮・SF作品が好きですが、観たことのある作品には偏りがあります。