我有这个巨大的csv文件,它是4GB,不知道有多少行而是320列。
因为它无法在任何程序中打开(除了使用第三方程序将文件拆分成多个部分)我正试图提取一种方法来提取我需要的数据。我只需要大约10-15列。
我在网上看到了很多解决方案(大多数是在vbs中),但是我无法让它们中的任何一个工作。我会得到错误,我不知道vbs能够解决它们。
任何人都可以帮忙吗?
谢谢
PS这里是我发现并尝试使用的vbs代码的一个例子,我没有运气。
原始错误是“800a01f4变量未定义”,在网上建议取出OPTION EXPLICIT。一旦我这样做,下一个错误是“800a01fa class not defined”。
在这两种情况下,给出错误的行是“Set adoJetCommand = New ADODB.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
答案 0 :(得分:1)
如果您的CSV文件很简单,在意外的地方没有换行符或逗号,那么标准的* nix工具awk
会很有用。它允许您轻松地将要查找的15列提取到新的CSV文件中。 This blog post说明了如何在CSV文件中使用它。
假设您要从file.csv
中提取第1,3和7列,那么您可以使用命令
awk -F, '{print $1","$3","$7;}' file.csv
您的Windows计算机可能没有安装awk
。有几个选择:
你可以找到它 MSYS,基本上 在Windows中为您提供类似Unix的shell环境。对我而言,这似乎是最简单的方法。
另一种选择似乎是Gawk for Windows,但我 没有经验,所以没有保证。
您可以尝试使用Windows获得相同的结果 PowerShell,如this blog post中所述 - 如果有的话。再一次,我没有尝试过的经验。
最后但并非最不重要的是,您可以切换到Linux,例如在
虚拟机。 awk
通常在* nix环境中可用。
如果您要解析更尴尬的CSV文件,请查看parse csv file using gawk以获取一系列建议。
答案 1 :(得分:0)
在VBE编辑器中
然后在列表中找到Microsoft Activex数据对象库。 不确定哪个版本可能合适,但可能是6
看起来您的代码不知道ADODB.COMMAND是什么,这应该解决这个问题。 我只知道我能够复制你的代码,并且能够在设置引用时成功完成它。 希望这有助于解释