VBScriptを使用してテキストファイルの間違いを探す方法

このQ&Aのポイント
  • VBScriptを使用してテキストファイルの内容の間違いを見つける方法を教えてください。
  • CSV形式のテキストファイルで、一部の行の内容が正しくありません。特定の条件で間違った行を見つけて、別のファイルに書き出したいです。
  • A列とB列の値が一致する行のC列のデータが正しいか確認するための効果的なアルゴリズムを教えてください。
回答を見る
  • ベストアンサー

VBScriptでテキストファイルの内容の間違い探しは出来るでしょうか

VBScriptでテキストファイルの内容の間違い探しは出来るでしょうか? CSVをテキスト形式で読み込んでいるファイルなのですがごくごくたまに一部内容が違っています。 例: <Aテキスト> "AAAAA","BBB","CC" "DDDDD","EEE","FF" "GGGGG","HHH","II" <Bテキスト> "AAAAA","BBB","CC" "DDDDD","EEE","F8" "GGGGG","HHH","II" とほとんどあっているのですが一部違う行をみつけて別ファイルにその行を書き出したいのです。 CSV形式で見たときA列+B列の値が一致したもののC列データが正しいか確認したいのですがどういったアルゴリズムがいいのでしょうか? お願いします。

  • mr-r00
  • お礼率93% (480/516)

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

色々な方法があります。 (1)データを読み込んで配列に溜め、比較を行う。 (2)fcコマンドを実行して標準出力をモニタする。 (3)クエリを使う。 (3)はJetドライバがインストールされていれば可能です。 (2)はWSHのExecでfcコマンドを走らせ、StdOutを読み込みます。  あるいはリダイレクトして出力ファイルを見る方法もあります。 (1)はまぁ、コテコテとプログラムすることになります。 (3)の例を示します。 Dim C, R Set C = CreateObject("ADODB.Connection") C.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _     "Data Source=C:\~;" & _     "Extended Properties=""text;HDR=No;FMT=Delimited""" Set R = CreateObject("ADODB.Recordset") R.Open "SELECT A.*,B.F3 FROM comp1.txt A INNER JOIN comp2.txt B" & _     " ON A.F1=B.F1 AND A.F2=B.F2 AND A.F3<>B.F3", A, 0 Do Until R.EOF     '★R.Fields(n).Value をファイルに書き出す Loop R.Close C.Close ConnectionStringに設定する文字列でSourceに指定するのはパスで、 ファイル名でないことに注意してください。1行目がフィールド名でない という指定(HDR=No)にしているので、フィールド名はF1,F2,F3・・・に なります。

mr-r00
質問者

お礼

ありがとうございます。 参考にさせていただきます。 どうしてもJETがうまく入らず・・・試行錯誤しておりますがお礼をさせていただきます

その他の回答 (1)

  • bajutsu
  • ベストアンサー率20% (139/693)
回答No.1

こういうのって、アルゴリズムを考える工程が 一番楽しいんだよね。 よって、自分で考えてください。 たいして難しくはない。 ファイルの入力順は合ってる前提? 入力件数は必ず一致? 必ず文字コードの昇順or降順で統一されてるとか、されてないとか。 A列+B列は、必ずユニークになるのか? その辺がどうなっているのかによって 作りも難易度も変わってきますが…。

mr-r00
質問者

お礼

ありがとうございます

関連するQ&A

  • 2つのCSVを比較して一致していないものを検出したいのですがヒントをい

    2つのCSVを比較して一致していないものを検出したいのですがヒントをいただけないでしょうか? <AのCSV> "AAAAA","BBB","CC" "DDDDD","EEE","FF" "GGGGG","HHH","II" "MMMMM","NNN","OO" ・ ・ ・ <BのCSV> "AAAAA","BBB","CC" "DDDDD","EEE","F8" "GGGGG","HHH","II" "JJJJJJ","KKK","ll" "MMMMM","NNN","OO" ・ ・ ・ ベースになるCSVはBのほうです。 まず、 BのCSVの「A列の値+B列の値」がおなじものをAのCSVから探します。 同じものを見つけたらBのCSVの同じ行のC列の値が一致しているか検索します。 一致していなかったら別テキストに書き出します。 また、BのCSVの「A列の値+B列の値」と同じものがAのCSVに存在しなかったら動揺に別テキストに書き出したいのですがどのようにすればいいでしょうか??? VBすくりぷとで考えています。

  • C言語による「テキストファイルの読み書き(fprintf)」について

    C言語による「テキストファイルの読み書き(fprintf)」について質問です ずぶの初心者ですが、既知のファイルの1行目に指定した文字列を付加させるプログラムを作りたいと思っています。 以下のように作りました。 ------------------------------------------------------------ #include <stdio.h> int main(void) { FILE *fp; fp = fopen("test.csv","r+"); fprintf(fp,"コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56\n"); fclose(fp); return 0; } ------------------------------------------------------------ このとき「test.csv」の内容が以下のようであったとします。(容量は1MBくらいです。) 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj この状態でプログラムをコンパイルして実行すると、「test.csv」の内容が以下のようになってしまいます。(一行目が消える) AAA,BBB,CCC,DDD,EEE 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj またcsvの行が増える度に妙な挙動になっていきます・・・(一行あいたり、先頭行が5行ほど消えたり) 希望する動作としては コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56 001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj 002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj ~(略) 5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj のようになるようにしたいのですがどのようにすればよいのでしょうか。 よろしくお願いします。 (使用ソフト:Borland C++ Compiler, Cpad) 参考にしたサイトの項目:http://homepage3.nifty.com/mmgames/c_guide/17-01.html

  • 複数のファイルを読み込み、1つのファイルとして出力する方法。

    Nakanoです。いつもお世話になっております。 例えばテキストファイルを2つ用意し、1つのテキストファイルとして 出力したいのですが、いまいちやり方が分かりません。出来るのかどうかも 分からないです。(汗) 下にサンプルデータがあります。取り合えず「in1.txt」「in2.txt」 を最終的に『out.txt』の様に仕上げたいのですが… # =in1.txt AAAAA BBBBB CCCCC DDDDD 1,000 2,000 3,000 4,000 1,001 2,002 3,003 4,004 1,010 2,020 3,030 4,040 1,100 2,200 3,300 4,400 =in2.txt EEEEE FFFFF GGGGG HHHHH 5,000 6,000 7,000 8,000 5,005 6,006 7,007 8,008 5,050 6,060 7,070 8,080 5,500 6,600 7,700 8,800 # =out.txt AAAAA BBBBB CCCCC DDDDD EEEEE FFFFF GGGGG HHHHH 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 1,001 2,002 3,003 4,004 5,005 6,006 7,007 8,008 1,010 2,020 3,030 4,040 5,050 6,060 7,070 8,080 1,100 2,200 3,300 4,400 5,500 6,600 7,700 8,800 # ・このデータはタブで区切っています。カンマはない場合もあります。 ・ファイルの中のそれぞれの文字列の数は固定です。行数も固定です。  各文字列の中の文字数はランダムです。  COPYコマンドを利用しても考えてみたのですが、後ろに続いちゃって  上手くいかなかったです。(笑)  Perlだと1つ目のファイルの1行目を配列に入れて、次に2つ目の  ファイルの1行目を配列に入れて、これを一旦出力して、同じ手順の  様な事を行を2行目、3行目、4行目、、とずらして繰り返す。って  感じでイメージしているのですが、どの様にソースを組めばいいのか  分かりませんでした。  どなたかご教授いただけないでしょうか? 宜しくお願い致します。

  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • スペース区切りのテキストデータ

    VB2005.netを使っています。 スペース区切りの2つのテキストデータが 2つのTEXTBOX内あります。 AA BBB CCC DD EEE FF GGG HHH II JJJ AA LLL MMM NN OOO FF QQQ RRR SS TTT このAAの列とCCC列を抜き出して表示させ、 AA CCC-MMM FF HHH-RRR といった計算の後の数字を行にして表示 させたいのですが、何かよい方法があるでしょうか? よろしくお願いします!

  • perlを使用しての特定行抽出について

    何万行も書いてあるテキストファイルがあります。抽出したい文字列の一覧がテキストファイルにまとめられています(文字列は約1000個)。抽出したい文字列は一行にひとつづつ書かれています。何万行も書いてあるテキストファイルから抽出したい文字列と二つ合致したらその行を抽出したいです。ここで、注意していただきたいのが、抽出したい文字列一覧から二つの文字列にヒットした行を抽出したいです。宜しくお願い致します。 何万行も書いてあるテキストファイル aaaaa abc edi bb aert kkkkkkkkkk lllllll ddddd aaaaa anhi kkk    ・・・・・・・・ ・・・・・・・・ 抽出したい文字列一覧のテキストファイル aaaaa bbbbb ddddd iiiiiiiii eeeee ・・・・・ ・・・・・

    • ベストアンサー
    • Perl
  • 外部ファイルからの指定行と指定文字の削除

    perlで、外部のCSVファイル(01_01.csv)を読み込み、「先頭の9行」とその行以降の「先頭9文字」を削除したものを [01_01_out.csv]として保存したいのですがどのようにしたらいいのでしょうか。 ご回答、よろしくお願い致します。 例) 読込ファイル:01_01.csv ---------------------------------------- AAA BBB CCC DDD EEE FFF GGG HHH 00:00:00,1 00:01:00,2 00:02:00,3 00:03:00,4 00:04:00,5 00:05:00,6 (略) 10:00:00,101 10:01:00,102 10:02:00,103 10:03:00,104 10:04:00,105 10:05:00,106 ---------------------------------------- 出力ファイル:01_01_out.csv ---------------------------------------- 1 2 3 4 5 6 (略) 101 102 103 104 105 106 ----------------------------------------

  • ExcelVBAでテキスト出力で最後の行に追記

    エクセルVBAで、すでに色々と書き込まれているテキストファイルがあり 一番最後の行に追記したいです。 具体的に下記のようなテキストにzzzzzzと追記して aaaaa bbbbb ccccc ddddd 下記のようにしたいです。 どのようにしたらよいのでしょうか? aaaaa bbbbb ccccc ddddd zzzzzz

  • perlでのcsv形式のテキストファイルの変換

    perlを使用してcsv形式のテキストファイルを下記のように変換したいと思っています。 【変換前】 10, abc , def , ghi ,jkl    ----1行目 10, abc , def , aaa, bbb   ----2行目 10, abc , def , ccc , ddd  ----3行目 11, abc , def , eee , fff   ----4行目 11, abc , def , aaa , ggg ----5行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 【変換後】 10, abc , def , ghi ,jkl    ----1行目 11, abc , def , eee , fff   ----4行目 11, zzz , def , aaa , ggg  ----6行目 12, abc , def , aaa ,ggg ----7行目 12, zzz , def, aaa , ggg   ----8行目 変換内容はcsv形式のテキストファイルで、”,”で区切った先頭3列が 前の行の先頭3列と同じならその行は出力しない、といった 変換をしたいと思っております。 (例えば2行目ですと先頭3列は10, abc ,defになっており、  1行目の先頭3列と同じ文字列になっているためこの行は出力しない) 当方、Perl初心者で上記のようなことがPerlでできるかも よくわかっておりません。 そこで、上記のような変換はPerlで可能なのか、そしてもし可能であるのなら どのようにPerlで記述すればできるのか教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • テキストファイル読み込みにおける開始行および開始列指定

    最近VBAを始めた者です。 コンマ区切りのテキストファイルの内容をシート上に読み込むプログラムを 書きたいのですが、テキストファイル内に不要な部分があるため、必要な部分のみ 抜き出して読み込みたいと考えています。 具体的なテキストの内容は以下の通りです。 AAA,BBB,CCC,DDD EEE,FFF,GGG,HHH 111,222,333,444 111,222,333,444 111,222,333,444  ・  ・  ・  ・  ・  ・  ・  ・ 行数は特に決まっていませんが1000行程度です。 アルファベットは文字列、数字は数値データです。 このうちの222にあたる列のみを読み取りたいのですが、そのための 読み取り開始行、および開始列の指定方法がわかりません。 クエリを用いた方法でできないことはなかったのですが、クエリテーブルに 残るデータは必要なく、後で消す必要が出てくるためクエリを用いない方法を探しています。 使用ソフトはExcel2007です。 宜しくお願いします。