2つの、膨大なCSVデータがあります。

(仮にAとBとします。各5~8万件)

これらを突き合わせて、重複のチェックをします。
Aに含まれているデータを、Bから除きたいのです。
Bの中には同一データが複数入っている可能性があります。
突合せをする項目はIDです。表記のゆれはありません。

件数が多いのでexcelが使えません。
accessは一応入ってます(不慣れですが)。

accessないし他の方法で、上記の重複チェック⇒重複分削除をする方法をお教えください。

条件がありまして、作業の際に人為的ミスを起こしたくないので、「なるべくステップの少なく確実な手順」を希望します。宜しくお願いします!

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/09/28 01:22:58
  • 終了:2006/10/05 01:25:03

回答(5件)

id:mizki101 No.1

mizki101回答回数209ベストアンサー獲得回数52006/09/28 04:26:39

ポイント20pt

Accessで不一致クエリを作成すれば出来ます。

http://makotowatana.ld.infoseek.co.jp/access/achowFindUnmatchedQ...


さらにそこから削除クエリを動かせばデータを削除できます。

http://www.nurs.or.jp/~ppoy/access/access/acQ018.html


もしくはこんな方法も

http://www.accessclub.jp/bbs3/0125/superbeg43581.html


逆に考えて、一致するデータだけ取り出して新しいデータファイルを作るのも

一つの手です。

多分こちらの方が簡単です。

id:akibare No.2

akibare回答回数157ベストアンサー獲得回数52006/09/28 04:32:13

ポイント20pt

Accessでのやり方です。

1) [ファイル - 外部データ - インポート]でAとBをインポートします(それぞれテーブル名はAとBとする)。

2) 新規クエリを作成します。デザインビューで[ビュー - SQLビュー]を選択して以下のクエリを貼り付けます

DELETE *

FROM B

WHERE ID IN (SELECT B.ID FROM B INNER JOIN A ON B.ID = A.ID);

3) [!]ボタンでクエリを実行します。

http://dummy.co.jp/

id:goldman No.3

goldman回答回数86ベストアンサー獲得回数02006/09/28 10:05:05

ポイント20pt

ファイルA.TXTのIDが3項目、ファイルB.TXTのIDが6項目目にあると仮定して、

// ファイルAを3項目目でソートする

srtcsv A A.OUT (3)

// ファイルBを6項目目でソートする

srtcsv B B.OUT (6)

// ファイルAとファイルBを指定した項目番号で照合しファイルAからファイルBを

// 除いたレコードを抽出する

CSVMAT2 A.OUT B.OUT OUTPUT.CSV [(3)][(6)]

でOUTPUT.CSVに出力されます。

http://www.vector.co.jp/soft/winnt/util/se403833.html

id:Mook No.4

Mook回答回数1312ベストアンサー獲得回数3912006/09/28 11:02:08

ポイント20pt

MS が提供しているフリーの logparser というプログラムで CSV ファイルを DB のように制御できます。

CSV をはじめ、Windows のさまざまなリソースを SQLで制御できます。

(詳細はヘルプをご参照ください。)


   1、Logparser.msi をダウンロードし、インストールします。


   2、タイトル行を挿入します。

CSVの先頭にID,DATA のように、タイトル行を作成します(SQL内で使用)。


   3、下記のバッチを作成し、実行します。

      ファイル名、項目名はサンプルです。実際のファイルにあわせて、変更して下さい。

@echo off

set command="C:\Program Files\Log Parser 2.2\LogParser.exe"

:: 入力ファイル名

set InFile='D:\B.CSV'

set refFile='D:\A.CSV'

:: 出力ファイル名

set OutFile='D:\NewB.CSV'

Echo 実行には数分かかります。

%command% "SELECT ID, DATA INTO %OutFile% FROM %InFile% WHERE ID NOT IN ( SELECT ID FROM %refFile% )" -i:CSV -o:CSV

Pause


   4、newB.CSV の先頭行(タイトル行)を削除します。


といった手順でできるかと思いますが、どうでしょうか。

ID と DATA を持った、65000 行の二つのファイルで試してみましたが、6分ほどで処理ができました。

id:OHTO No.5

OHTO回答回数11ベストアンサー獲得回数02006/09/29 20:31:38

ポイント20pt

あんまり難しい方法はわからないんですが・・・

件数さえ少なければ、エクセルで操作はできるのですよね?

それであれば、CSVファイルをテキストエディター等で開いて、A,Bそれぞれを2つに分けて、保存する。

それぞれのファイルで、重複チェックをかければやれますよね。ルーチンワークじゃなくって、数回の作業であれば、その方が断然早いです。


http://www.hatena.ne.jp/

URLはダミーです。

  • id:goldman
    【CORE2 DUO E6600 MEM_2GBで 製品の比較してみました】
    10万件のCSVファイル(A)と1万件のCSVファイル(B)を比較してAにのみ存在するレコード9万件を取得する。
    ※比較するキーは第1項目の値
    ----------------------------------------------
    製品1の場合:1.1秒
    ----------------------------------------------
    2006/09/28 23:43:43.01
    G:\WORK>SRTCSV A.CSV A.OUT (1)
    2006/09/28 23:43:43.53
    G:\WORK>SRTCSV B.CSV B.OUT (1)
    G:\WORK>CSVMAT2 A.OUT B.OUT C.OUT [(1)][(1)]
    [CsvMat2]Start:2006/09/28 23:43:43.81
    マッチング条件 [(1)][(1)]
    読込件数A [00100000]
    読込件数B [00010000]
    出力件数 [00090000]
    [CsvMat2]End :2006/09/28 23:43:44.02

    ----------------------------------------------
    製品2の場合:28.6秒
    ----------------------------------------------
    ECHO ID,DATA >H.CSV
    COPY H.CSV+A.CSV AA.CSV
    COPY H.CSV+B.CSV BB.CSV
    set command="F:\Program Files\Log Parser 2.2\LogParser.exe"
    set InFile='AA.CSV'
    set refFile='BB.CSV'
    set OutFile='CC.CSV'
    %command% "SELECT ID, DATA INTO %OutFile% FROM %InFile% WHERE ID NOT IN ( SELECT ID FROM %refFile% )" -i:CSV -o:CSV
    統計情報:
    ---------
    処理された要素: 100000
    出力された要素: 90000
    実行時間: 28.64 秒
  • id:Mook
    性能は段違いですね。
    一応ツールの特徴の比較をしてみました。

    --------------
    製品C の場合
    --------------
    【メリット】
     ・処理が早い・・・◎
     ・UNIX でも使える・・・○

    【デメリット】
     ・独自コマンド・・・△
     ・有料(というか商品?・・・ただし試用期間有り)

    --------------
    ツールL の場合
    --------------
    【メリット】
     ・無料・・・○
     ・SQL が使える人には簡単・・・○
     ・扱えるデータが多い(レジストリ、XML、EventLog 、IISなど)・・・Windows Userには ◎
     ・世界中で使われているのでバグは少ない?・・・○
      (フォーラムも有る・・・http://www.logparser.com/instantforum33/default.aspx)

    【デメリット】
     ・遅い・・・×
     ・Windows でしか使えない・・・△

    しかし、速さは雲泥だなぁ。
    SQLを知らないのなら、新しく覚えるのは一緒なので、試用期間でやっちゃた方が良いかな。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません