• ベストアンサー

テキスト比較について

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

  • テキストファイルの一部置換したファイルをたくさん作りたい

    テキストファイル(a.txt)があるのですが このファイルの一部の文字列aaaをbbbに置換したファイル(b.txt)を作りたいです。 また文字列aaaをcccに置換したファイル(c.txt)も作りたいです。 続けてd.txtやe.txt・・・と作っていきたいですが簡単にできるフリーソフトはないでしょうか? 現状はa.txtを開いてaaaをbbbに置換して、別名で保存するのを繰り返し(10回以上)するので大変です。 このようなことが楽にできるフリーソフトがあれば教えてください。

  • テキストファイルから指定行を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の知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。 宜しくお願い致します。

  • フォームのテキストボックスを抽出条件とするクエリー

    Access2003を使って、「フォームのテキストボックスを抽出条件とするクエリー」 を作成していて困っています。 まず Like [Forms]![顧客氏名検索]![テキスト2] とすると、完全一致したものだけが抽出できています。そこで 【値の一部が一致】 Like "文字列*"   ※文字列にある文字列を直接入力するとちゃんと抽出できる。 これを参考に Like "[Forms]![顧客氏名検索]![テキスト2]*" とすると、値の一部が一致するものが抽出されません。(何を入力しても該当0件) 抽出条件が正しく設定されてないように思います。 フォームのテキストボックスの値を利用する場合、""や*の使い方がおかしいのでしょうか?

  • 定型書式のテキストファイルをExcelに取り込むマクロについて

    以下のような定型書式のテキストファイル(ファイル名はdata(連番).txt。Shift-JIS。改行コードLF)から、 ・<h2>~</h2>で囲まれたテキストのうち、改行やコメントを取り除いたもの(あああああああ) ・<!--コメント2-->直後の、最初の「DAT」に続く文字列(いいい) を、ExcelのC列、D列に取り込みたいのですが、抽出方法がよくわかりません。 なお、テキストファイルの体裁は一切変更できません。 ------------------------- data1.txt …… <h2> <!--コメント1--> あああ ああああ <!--コメント終了--> </h2> <!--コメント2--> DATいいいDATDうううDDATえええ …… -------------------------

  • テキストファイルからExcelへデータ抽出

    「WindowsXP」/「Office2003Professional」を使用しています。 フォルダに格納された複数のテキストファイルのある部分(指定文字列を含んだ行)をExcelにて抽出し、表にする方法を教えて下さい。 各テキストファイルは以下のようになっています。(一部抜粋) ------------------ System,Vendor ***** System,Model ***** MotherBoard,Vendor ***** MotherBoard,Product ***** MotherBoard,SerialNo ***** Memory,MaxCapacity ***** Memory,Slot * DIMM1 *** MB *** MHz **** ***** DIMM2 *** MB *** MHz **** ***** ------------------ 左側の文字列が指定する検索文字列で、[*]部分がデータになります。 (テキスト内はこの部分だけではありません。) これをExcelで検索文字列を項目名に指定し、[*]部分を抜き出した下記の様な表にしたいと思っています。(行列反転した表) ------------------ ファイル名 System,Vendor  System,Model MotherBoard,Vendor MotherBoard,Product … aaa.txt     *****        *****       *****          ***** bbb.txt     *****        *****       *****          ***** ------------------ ※検索文字列とデータの間にはスペースが入っています。 Excelの関数等で出来れば良いのですが、関数が不可能であればフリーソフト等でも構いません。 もしもVBAを使用しなければならない場合は、VBAの知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。 宜しくお願い致します。

  • 外部テキスト読み込み

    外部テキストを読み込んで そのテキストの中に、検索したい文字列が入っているかどうかが知りたいのですが、上手くいきません ソース System.useCodepage = true; my_lv = new LoadVars(); my_lv.onLoad = function() { find_num = my_lv.indexOF("検索したい文字列"); trace(find_num); }; my_lv.load("date.txt");

    • ベストアンサー
    • Flash
  • 複数の文字を検索してくれるソフト

    ワードやエクセルで検索するとき、文字を検索したいと思っているのですが、 A B C Dという、4つの文字を検索したい場合、1つずつ検索をかけなければならないのですが、一度に複数の文字列を検索してくれるソフトはありますでしょうか? 文書は、ワード、エクセル、テキスト、HTMLとさまざまですが、文字だけ探してくれれればいいので・・・。 そういうソフトはありますでしょうか?

  • テキスト内の文字列を引用してフォルダ名を改名したい

    A.txtというテキストの内容文字列を引用して、 C:\oldというフォルダを、C:\『A.txt内の文字列』(『』は不要)と改名したいのですが、 どうやればテキストの内容をひっぱってこれるのでしょうか? A.txtの内容は『9999999999999』のような13桁の数字の羅列で改行等はしておりません 具体的にはZBarというバーコード画像からISBNコードを取得できるソフトで、 zbarimg --raw C:\バーコード画像.jpg >C:\ISBNold.txt で、バーコード画像.jpgからISBNold.txtにISBNコードの文字列を出力 その出力されたISBNコードを元に、c:\oldフォルダの命名をしたいと思っています。 具体的にはこんな感じです C:\old→9999999999999に改名したい C:\old\B.jpg(バーコード画像) C:\ISBNold.txt(内容は『9999999999999』のような13桁の数字の羅列) どなたかコマンドフロンプトに詳しい方、教えていただけると幸いです。

  • テキスト置換なのですが

    テキストドキュメントの中の文字列をあいまいに検索して置換できるソフトなどはないのでしょうか? 例えば検索条件を aaabbb****ccc として(*はすべての文字列)として、検索し、それを aaabbbxxxxccc など置換するといったことがしたいのです。 かなり調べてみましたが、分かりませんでした。(もしかするとものすごく初歩が分かっていないのかもです)よろしくお願いします。

  • テキストファイルを開きたいです。

    まだC言語を勉強し始めて4ヶ月です。宜しくお願い致します。 cygwinをWindowsに入れて作成しています。 テキストファイルを画面上に開きたいのですが、system( )以外にありますでしょうか? system("notepad c:/test/test.txt"); (¥では上手くいかず、↑なら開けました) しかし、上記だと特定の1つのファイルしか開けないので、困っています。 例えば、名前、年齢を入力させて、テキストファイルを名前.txtで作成し、 作成直後に確認のため、名前.txtを開くといった事をしたいです。 namefile[128]といった文字列に"notepad c:/test/test.txt"を入れて、 system(namefile)としたところ、 シェルで認識できませんといった内容が表示されてできませんでした。 (やり方が悪いとは思いますが・・) これができれば、名前をからめてアドレスを文字列にできるかなと・・(泣)。 何か案があれば教えて下さい。 環境:WindowsXP     cygwinにてコンパイル(gcc)     sakuraエディタにて作成

専門家に質問してみよう