• ベストアンサー

比較の方法について

テキストファイルAとBがあり、二つを比較して相違のある部分だけエクセルファイルCに書き込むプログラムはどんな感じになりますか? VBにこだわらずバッチなどでも構いません。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

マッチング処理のアルゴリズムを文章で説明します。 (1)まず、AファイルとBファイルに共通のキー(IDの役をする)が無ければなりません。 (2)そしてAファイルとBファイルを(1)のキーでソートします。勿論昇順・降順は両者統一しておく必要があります。 (3)初めにA,Bファイルを1レコードずつ読みこむ (4)Aのキー項目(AKと略記)とBのキー項目(BK)を比較する。 (5)AK>BK、AK=BK、AK<BKの場合があり得るが、 (6)AK>BKならBKは追加されたものと扱う。 (7)AK<BKならAKは削除されたものと扱う。 (8)AK=BKならフィールド(氏名・住所と言うような項目)の数だけ、比較し、違っているものが見つかれば 変更されたと言う事で、変更のコメントと共に、印刷したり、表示したりする。 (9)1レコードの処理が終わると、キーが小さかった方のファイルを読みに行くこと。 (10)同じキーの時はマルチレコードかどうかで処理が変る。1:1なら両者とも読みこむ。 (11)(9)か(10)の区別のため、片方を読むか、両方を読むかのスイッチ(サイン)を通常用いる。

yuki0909
質問者

お礼

こんなに詳しくありがとうございました。 やはりかなり難しそうですね。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2のご回答に触発されて、#1のような仮定が出来ないなら、「BM法」と言う手法が使えるか考えてみてはどうでしょう。BM法でWEB紹介すると沢山記事が出る有名な アルゴリズムです。 http://www2.starcat.ne.jp/~fussy/algo/algo7-3.htm http://www.i.kyushu-u.ac.jp/~takeda/PM/BM/bm.html

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

行毎、或いは文字毎に比較をおこなっていくことになりますが 全パターンを比較するのは天文学的な比較回数になってしまい実際不可能です。 そこでダイナミックプログラミングというアルゴリズムを用い 一致数が最大になるように求め、変更部分を見つけるわけです。

関連するQ&A

  • 値の比較方法

    VBをはじめて2週間の新人です。よろしくお願いします。 早速質問させていただきたいのですが、 データグリッドに入力した列の値(複数)をすべて比較するというプログラムを作りたいのですがどうすればいいのかわかりません。 たとえばデータ列に[A][B][C][D][E]・・・という風にどんどん入力されていき、その値を比較、[A]=[B],[A]=[C],[A]=[D],[A]=[E], [B]=[C],[B]=[D],[B]=[E]・・・・ という感じですべての値が同一にならないよう(同一の場合はエラーを発生)にしたいのです。 ループを使うのだろうなぁとはおもうのですが、うまくいきません。 お助けいただけますでしょうか、よろしくお願いします。

  • セルの比較

    初投稿させていただきます。宜しくお願い致します。 office系のソフトは初心者で何とかならないものかと悩んでます。 excelで特定のセルのデータと行全体を比較して、一致する文字列を含んだセルを返してほしいのです。 それを各セルごとに行い、まとめて別のシートに出力させることは可能でしょうか? たとえば   A    B    C 1 あい  い   う 2 いか  う   えい 3 うみ  え   お 4 えい  お   か 5 うさ  か   き があって Cの各セルとA行全体を比較して結果を別に出力  ・・・ D 1    A3,A5 2    A4 3 4 5 ない場合は空白でも×でもいいのですが こんな感じにできないでしょうか。 実際のデータはファイルが別になっていてファイルAのC行とファイルBのB行のセル(200個くらい)との比較といった感じです。 いろいろ調べては見たのですが、うまくいかず・・・ 欲張った内容かも知れません。 すみませんがどなたかいい方法を教えて頂けませんか。

  • テキストの比較

    2つのテキストファイルを比較するソフトを探しています。 具体的に言うと、 例えば映画のタイトルが書かれた2つのテキストファイルA,Bがあったとします。 Aの中にBのタイトルが含まれているかという比較がしたいのですが、 今まではBのテキストファイルを開いて1つのタイトルごとにコピーして Aのテキストファイルを開き、検索窓にペーストしてという形で含まれているかを確認していたのですが、 A,Bともにタイトル数が多くなってきたので一括で比較を行ってくれるソフトを探しています。書式はA,Bともに同じです。 ご存知の方はお教え願えないでしょうか。

  • C#でのプログラム方法

    C#(コンソールでの実行ファイル)でのバッチファイル実行方法に悩んでいます。 実行イメージとして **************************************** 1. C#(A.exe)をダブルクリックで起動する 2. C#プログラム[A]はバッチファイルを起動する 3. C#(B.exe)をダブルクリックで起動する 4. C#プログラム[B]は2で起動したバッチファイルを終了させる(=DOS窓をCloseさせる?) **************************************** を考えています。 1~2の処理はなんとなくわかったのですが 4にてバッチファイルが起動しているDOS窓をどうCloseさせたらいいのかわかりません。 助けてください。

  • 比較

    2つのテキストファイルの内容を比較 (相異のある個所)できるツールは ありますでしょうか? ご教授お願い致します。

  • 比較の回数を少なくする方法

    例えば、10個のリンゴがあるとします。リンゴの大きさに同じ物は無いと仮定します。(大きさはユニーク) その10個のリンゴの大きさに順位を付けたいのですが、絶対的な値を取得する「計り」の様な装置は無く、天秤にのせて重さの比較をする事により、順位を求めたいです。(天秤にはリンゴをひとつずつしか乗せられないとします。) 比較の作業をなるべく少なくしたいです。どのように比較したらよいでしょうか? また、示した例ではリンゴは10個でしたが、リンゴの数がn個になった時の比較の回数の求め方も知りたいです。 以下、完結できてませんが自分のこれまでの考えです。  ABCDEFGHIJ A□■■■■■■■■■ B□□■■■■■■■■ C□□□■■■■■■■ D□□□□■■■■■■ E□□□□□■■■■■ F□□□□□□■■■■ G□□□□□□□■■■ H□□□□□□□□■■ I□□□□□□□□□■ リンゴをA~Jとした場合、■の部分の比較をすれば良いかと考え、 比較回数は、N*N/2 - Nかなと思ったのですのですが、もっと少ない比較で答えを求める事が可能かと思いました。 なぜかと言うと、例えば、A:B比較後にB:C比較の結果がA<B、B<CならA-C比較は不用になると考えたからです。 A:B、B:C比較の結果がA>B、B<Cになれば、A:Cの比較は必要になるので確立的要素も必要になるのかとも思います。 どのようなご指導でもかまいません、○○について調べろなどのキーワードをくださるだけでもありがたいです。 以上、よろしくご指導の程、お願い申し上げます。

  • 2つのファイルを比較し、不足分を抽出する方法

    テキストファイルAに存在し、テキストファイルBに存在しない行を、テキストファイルCに書き出す手段を模索しています。 具体例を下記に示します。 -------------------------------------------------------- 【テキストファイルA】 a b c d e 【テキストファイルB】 a c 【テキストファイルC】 b d e -------------------------------------------------------- 上記を実現できるソフトウェアなどご存知でしたら、ご教授いただけると幸いです。 処理概要として、下記を実現できればOKかと思います。 (1)テキストファイルAの1行目を読み込む。 (2)テキストファイルBを1行目から最終行目まで検索する。 (3)一致する行がなければ、テキストファイルCに書き出す。 (4)テキストファイルAの2行目から最終行に対して、(1)~(3)を繰り返す。 以上、ご回答のほどよろしくお願い致します。

  • テキスト比較について

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

  • 二つのファイルデータを比較し一致したものを並べる。

    こんにちは。VB初心者です。二つ別のファイル(A とB)のデータを比較して、その中で一致したものを並べたいのですが、とっかかりがつかめません。 例えばですが、商店名から下のデータ(一つのエクセルファイルAのシート1)に一致するものを、 EXCEL FILE A Sheet1 担当者  価格    地域  在庫 商品名 商店名 Bさん           埼玉     卵    佐藤屋 Cさん    250円    神奈川 有り 牛乳    高橋屋 もう一つのエクセルのファイル (下のデータ、エクセルファイルBシート1)の中から探して、商店名から比較したデータの結果をもう一つのシートに書き込みたいのですが、どうしたら情報を行ごとにマッチングできるのかわかりません(行ごとに情報が違うので)。。簡単にVLOOKUPでデータを拾うのではなく、マクロで比較したいのですが、よろしくお願いします。 EXCEL FILE B Sheet1 商店名 商品名 価格    地域  担当者 在庫 山田屋 みかん 100円 東京  Aさん 有り 佐藤屋 卵    200円  埼玉  Bさん 有り 高橋屋 牛乳    250円 神奈川 Cさん 有り あと、情報をマッチングの後、情報が抜けているところ(佐藤屋の価格、在庫)を色(赤)に塗ることができますか?こちらのほうもよろしくお願いします。

  • textを読み込みについて

    textに 10,18,35,......... とあるファイルを 読み込んで 例えば、A(l)を使って、 (l:データ数、A(1)=10,A(2)=18..............) A(l)=A(l)+1の演算をして 表示させると 11,19,36,........... させたいのですが、 どうもうまくいきません。 どのような命令の関数をつかえば、いいのですか? textファイルの数値の区切りは ,(コンマ)でできるのですか? また、同じtextファイルの3つのデータを読み込み、処理はできるのですか? *例えば、textファイルに data1:1,13,34,67,......... data2:2,23,34,56.......... data3:3,45,66,78,......... をdata1にはA(l)を、data2にはB(l)を、data3にはC(l)を使って A(l)、B(l)、C(l)にデータを入れることは可能ですか? ExcelのVB以外の方法を教えてください。 (ExcelのVBでは、プラベート サブが使えないので。)

専門家に質問してみよう