• ベストアンサー

テキスト比較について

テキストファイルを比較して抽出したいのですが、 どのようなソフトがいいのかわかりません。 私がしたいことは a.txt (検索) aac = bcf = cag = dai = b.txt (ベース) aaa = 123456789 aac = 234567891 bbf = 345678912 bcf = 456789123 cae = 567891234 cag = 678912345 dae = 789123456 dai = 891234567 efg = 912345678 このような二つのテキストがあったら b.txtからa.txtの文字列を検索してc.txtに抽出するようにしたいのです。 なので、文字列を抽出したc.txtは以下のようになっているはずです。 c.txt aac = 234567891 bcf = 456789123 cag = 678912345 dai = 891234567 こんな感じです。 必要な文字列を一括で抽出するソフトはありますでしょうか? ちなみに検索文字列は300弱あります。 当方 windows 7 64bitでwordとexcelは入っております。 もし、良いソフトがありましたら教えてください。 また、excelやwordのマクロでできるなら、優しく教えてください。 当方excelは初心者なもので… よろしくお願いします。

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

  • ベストアンサー
noname#227025
noname#227025
回答No.2

Windows 7 を持っていないので正確な情報ではありませんが、標準で付属するであろう findstr コマンドが使えます。 (少なくとも Windows XP には findstr コマンドが付属しています。) 使用方法は今回のような場合、コマンドプロンプトから以下のように実行します。 >findstr /lg:a.txt b.txt

yamato191
質問者

お礼

お手数かけました。 ほかの言葉で検索をかけたら出てきました。 findstr /lg:a.txt b.txt > c.txt これでいけました。 ありがとうございました。

yamato191
質問者

補足

ご回答ありがとうございます。 こちらの方法で一覧がコマンドプロンプトに書き出されました。 しかし、この検索結果をc.txtに書き出すにはどうしたらよいのでしょうか? それができれば完成なのですが。 右クリックでコピーもできないようなので… もしよろしければ追加コマンド等を教えていただけないでしょうか。 いろいろ調べてみたのですが、わかりませんでした…

その他の回答 (3)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.4

追伸  Perlはテキスト処理は、その豊富な正規表現で他の追随を許さない優れたプログラム言語ですが、それ以外にも、画像処理とか驚くような拡張性を持っています。  せっかくインストールされたのなら、せいぜい活用してください。

yamato191
質問者

お礼

そうですね。 現段階では何を書いているのかさっぱりわかりませんが…^^; 習得したらすごく良いものなんだろうなーと思います。 何度もありがとうございました。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

>操作可能なプログラムまたはバッチファイルと(略とでて起動不可でした。 ひょっとしてソースをそのままコピー? あのソースは見やすくするために、タブを全角スペース二文字で置換してあります。 これを元のタブに戻して試してください。 なお、実際のa.txtとb.txtの一部を正確に示してください。 正規表現に手を加えないとならないかもしれません。

yamato191
質問者

お礼

はい、そのままコピーをして貼り付けました。^^;

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

本来はSED ( http://ja.wikipedia.org/wiki/Sed_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF) )を使うべきでしょう。数万行あっても極めて短時間で終了する。特徴( http://ja.wikipedia.org/wiki/Sed_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)#.E7.89.B9.E5.BE.B4 )  しかし、SEDはなれないと使いにくいし、マニュアルもそんなにたくさんありません。 SED Lecture ( http://www.gcd.org/sengoku/sedlec/ ) Retroengine ( http://chimimo.com/Category/4/ )  そこで、圧倒的にマニュアルが多く、よく使われているPerlがよいでしょう。 メモ帳で下記を書いて、a.txtとb.txtと同じ場所に、check.plとして保存して open (IN,"<a.txt"); open (DATA,"<b.txt"); open (OUT,">c.txt"); while(<IN>){ # a.txtのチェック   if( /(\w+)\s*=/ ){ $ckeck{$1} = 1;} } close IN; while(<DATA>){ # b.txtのチェック   if( /(\w+)\s*=\s*(\S+)/ && $ckeck{$1} ){   } } close DATA; close OUT; __END__  ここまで コマンドプロンプトから >perl check.pl とするだけで、c.txtが、できる。千行あっても一秒かからないでしょう。 窓の杜 - ActivePerl ( http://www.forest.impress.co.jp/lib/stdy/program/progdevenv/activeperl.html )

yamato191
質問者

お礼

ご回答ありがとうございます。 ActivePerlをインストールして早速やってみたのですが 操作可能なプログラムまたはバッチファイルと(略 とでて起動不可でした。 こちらの環境設定もあるのかと思います。 でもこういうやり方もあるんだと感心しました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう