- PR -

CSVファイル中の不要行削除方法について

1
投稿者投稿内容
初心者たろう
常連さん
会議室デビュー日: 2005/10/13
投稿数: 30
投稿日時: 2007-09-04 17:33
よろしくおねがいします。
レコード数が1000万行のCSVファイルがあるのですが、そのなかに同じレコードが複数あります。そのレコードが削除できればレコード数も激減するのですが、
何かよいやり方などありませんでしょうか。
たとえば、コマンドプロンプトで実行して不要行削除するとか。

ちなみにACCESSで取り込みSQL実行を試みると1Gを超えるので無理です。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-09-04 17:52
いったん特徴的な項目ごとに別ファイルに分割保存して、それぞれのファイルで重複除去というのはどうでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-09-04 18:19
VBScript でも書いてファイルを作り直せば OK だったりするのでしょうか?

コード:

    Call Main()

    Private Sub Main()
        Dim cConnection 'As ADODB.Connection
        Set cConnection = WScript.CreateObject("ADODB.Connection")
        Call cConnection.Open("Driver={Microsoft Text Driver (*.txt; *.csv)}; DBQ=C:\")

        Dim cRecordset 'As ADODB.Recordset
        Set cRecordset = cConnection.Execute("SELECT DISTINCT * FROM Hoge.csv")

        Dim stResult 'As String
        Do While Not cRecordset.EOF
            Dim i 'As Integer
            For i = 0 To cRecordset.Fields.Count - 2
                stResult = stResult & cRecordset(i) & ","
            Next

            stResult = stResult & cRecordset(cRecordset.Fields.Count - 1)
            stResult = stResult & vbNewLine

            Call cRecordset.MoveNext()
        Loop

        Call MsgBox(stResult)
    End Sub


これは 「表示」 するだけなので、小さいファイルで試さないと死にます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
m.m.
常連さん
会議室デビュー日: 2003/04/22
投稿数: 20
投稿日時: 2007-09-04 18:20
cygwinが使えるなら、sortとuniqで簡単にできそうですが。
Win32版sortやuniqでも良さそうですね。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-09-04 20:35
ソートされているなら、
1.1行読み込む
2.覚えておく
3.前行と同じなら書き出さない
4.前行と違うなら書き出す
5.1へ戻る
で出来ると思います。(プログラムで)

ACCESSでダメなら、SQLServerやらOracleやらMySQLやら色々あると思います。
別に自動取り込み機能を使わなくても、コードで1行ずつインサートすればよいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)