1

私はこの巨大なcsvファイルを持っています。それは4GBで、行数はわかりませんが、320列です。

どのプログラムでも開くことができないため(サードパーティのプログラムを使用してファイルを複数の部分に分割する場合を除く)、必要なデータを抽出する方法を見つけようとしています。私はそれから約10-​​15列だけが必要です。

私はネット上で多くの解決策を見ましたが(ほとんどはvbsで)、それらのどれも機能させることができませんでした。エラーが発生し、トラブルシューティングできるvbsがわかりません。

誰か助けてもらえますか?

ありがとうございました

PSこれは私が見つけて使ってみたvbsコードの一例です。

元のエラーは「800a01f4変数は未定義です」でしたが、ネット上ではOPTIONEXPLICITを削除することが提案されました。これを行うと、次のエラーは「800a01faクラスが定義されていません」です。

どちらの場合も、エラーが発生する行は「Set adoJetCommand =NewADODB.Command」です。

Option Explicit



Dim adoCSVConnection, adoCSVRecordSet, strPathToTextfile
Dim strCSVFile, adoJetConnection,adoJetCommand, strDBPath


Const adCmdText = &H0001

' Specify path to CSV file.
strPathToTextFile = "C:\Users\natalie.rynda\Documents\Temp\RemailMatch\"

' Specify CSV file name.
strCSVFile = "NPIOld.csv"

' Specify Access database file.
strDBPath = "C:\Users\natalie.rynda\Documents\Temp\RemailMatch\NPIs.mdb"

' Open connection to the CSV file.
Set adoCSVConnection = CreateObject("ADODB.Connection")
Set adoCSVRecordSet = CreateObject("ADODB.Recordset")

' Open CSV file with header line.
adoCSVConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & strPathtoTextFile & ";" & _
    "Extended Properties=""text;HDR=YES;FMT=Delimited"""

adoCSVRecordset.Open "SELECT * FROM " & strCSVFile, adoCSVConnection

' Open connection to MS Access database.
Set adoJetConnection = CreateObject("ADODB.Connection")
adoJetConnection.ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb);" _
    & "FIL=MS Access;DriverId=25;DBQ=" & strDBPath & ";"
adoJetConnection.Open

' ADO command object to insert rows into Access database.
Set adoJetCommand = New ADODB.Command


Set adoJetCommand.ActiveConnection = adoJetConnection
adoJetCommand.CommandType = adCmdText

' Read the CSV file.
Do Until adoCSVRecordset.EOF
    ' Insert a row into the Access database.
    adoJetCommand.CommandText = "INSERT INTO NPIs " _
        & "(NPI, EntityTypeCode, ReplacementNPI, EIN, MAddress1, MAddress2, MCity, MState, MZIP, SAddress1, SAddress2, SCity, SState, SZIP, ProviderEnumerationDate, LastUpdateDate, NPIDeactivationReasonCode, NPIDeactivationDate, NPIReactivationDate) " _
        & "VALUES (" _
            & "'" & adoCSVRecordset.Fields("NPI").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Entity Type Code").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Replacement NPI").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Employer Identification Number (EIN)").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider First Line Business Mailing Address").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Second Line Business Mailing Address").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Business Mailing Address City Name").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Business Mailing Address State Name").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Business Mailing Address Postal Code").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider First Line Business Practice Location Address").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Second Line Business Practice Location Address").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Business Practice Location Address City Name").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Business Practice Location Address State Name").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Business Practice Location Address Postal Code").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Provider Enumeration Date").Value & "', " _
            & "'" & adoCSVRecordset.Fields("Last Update Date").Value & "', " _
            & "'" & adoCSVRecordset.Fields("NPI Deactivation Reason Code").Value & "', " _
            & "'" & adoCSVRecordset.Fields("NPI Deactivation Date").Value & "', " _
            & "'" & adoCSVRecordset.Fields("NPI Reactivation Date").Value & "')"
    adoJetCommand.Execute
    adoCSVRecordset.MoveNext
Loop



' Clean up.
adoCSVRecordset.Close
adoCSVConnection.Close
adoJetConnection.Close
4

2 に答える 2

1

CSVファイルが単純で、予期しない場所に改行やコンマがない場合は、標準の*nixツールawkが便利です。探している15列を新しいCSVファイルに簡単に抽出できます。このブログ投稿では、CSVファイルでの使用方法について説明しています。

から列1、3、および7を抽出するfile.csvとし、コマンドを使用してこれを実行できます。

awk -F, '{print $1","$3","$7;}' file.csv

お使いのWindowsマシンはおそらくインストールされていませんawk。いくつかのオプションがあります:

  • これは MSYSにあり、基本的にWindowsでUnixライクなシェル環境を提供します。私には、これが簡単な方法のようです。

  • もう1つのオプションはGawkforWindowsのようですが、私はそれを経験したことがないので、保証はありません。

  • このブログ投稿で説明されているように、Windows PowerShellを使用して同じ結果を達成しようとすることができ ます。これが利用可能な場合は、繰り返しますが、私はそれを試した経験がありません。

  • 最後になりましたが、たとえば仮想マシンでLinuxに切り替えることができます。awk通常、*nix環境で使用できます。

より厄介なCSVファイルを解析している場合は、gawkを使用してcsvファイルを解析して多数の提案を確認してください。

于 2012-07-27T01:05:21.133 に答える
0

VBEエディターで

ここに画像の説明を入力してください

次に、リストでMicrosoftActivexデータオブジェクトライブラリを見つけます。どのバージョンが適切かはわかりませんが、おそらく6

ここに画像の説明を入力してください

あなたのコードはADODB.COMMANDが何であるかを知らないようで、これはそれを解決するはずです。参照が設定されたとき、私はあなたのコードをコピーすることができ、それをうまくステップスルーすることができたことを知っているだけです。これが説明に役立つことを願っています

于 2012-07-27T19:56:07.967 に答える