アプリ版:「スタンプのみでお礼する」機能のリリースについて

テキストファイルを比較して抽出したいのですが、
どのようなソフトがいいのかわかりません。
私がしたいことは

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は初心者なもので…

よろしくお願いします。

A 回答 (4件)

Windows 7 を持っていないので正確な情報ではありませんが、標準で付属するであろう findstr コマンドが使えます。


(少なくとも Windows XP には findstr コマンドが付属しています。)

使用方法は今回のような場合、コマンドプロンプトから以下のように実行します。

>findstr /lg:a.txt b.txt

この回答への補足

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

補足日時:2010/02/03 21:08
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/02/03 21:15

追伸


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

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

お礼日時:2010/02/03 23:19

>操作可能なプログラムまたはバッチファイルと(略とでて起動不可でした。


ひょっとしてソースをそのままコピー?
あのソースは見やすくするために、タブを全角スペース二文字で置換してあります。
これを元のタブに戻して試してください。
なお、実際のa.txtとb.txtの一部を正確に示してください。
正規表現に手を加えないとならないかもしれません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/02/03 23:12

本来はSED (

http://ja.wikipedia.org/wiki/Sed_(%E3%82%B3%E3%8 … )を使うべきでしょう。数万行あっても極めて短時間で終了する。特徴( http://ja.wikipedia.org/wiki/Sed_(%E3%82%B3%E3%8 … )
 しかし、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 … )
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/02/03 20:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!