尾随逗号在CSV中的数据提取结束

关于我的问题的一点背景:

我有MS Access中的查询创build的CSV文件。 CSV文件的主体包含列; 姓名,地址,邮政编码,date等。文件的最后一行包含数据摘要; 文件名,date,时间戳和logging总数。 由于所有字段都包含string,我们不希望系统截断或者尝试和计算date和邮政编码,所以我们用引号输出这些字段。

最后两行看起来像这样:

"Name","Code","Address","Address2","Office","Location","City","State","PostCode","Date" "FileName","DDMMYYYY","HH:MM:SS",TotalRecords,"","","","","","" 

我需要删除最后一行中的额外逗号,所以它看起来像这样:

 "FileName","DDMMYYYY","HH:MM:SS",TotalRecords 

我已经看了一遍,并尝试在这里的解决scheme: CSV文件有额外的逗号

这将创build我的原始文件的副本,但保留所有逗号不变。 如果我删除所有的引号,这个解决scheme工作。

如果你在Excel中,你可以在VBA中做这一行:

 left(Activecell.text,len(trim(replace(replace(activecell.Text,","," "),""""," ")))) 

我会从中间解释一下:

 replace(replace(activecell.Text,","," "),""""," ") 

用空格replace所有逗号和双引号

 trim(replace(replace(activecell.Text,","," "),""""," ")) 

修剪它,即删除起始和尾随空格

 len(trim(replace(replace(activecell.Text,","," "),""""," "))) 

获取修剪文本的长度

 left(Activecell.text,len(trim(replace(replace(activecell.Text,","," "),""""," ")))) 

最后给我一个ORIGINALstring的左边部分,其字符数被设置为我们所做的长度减去逗号和双引号的开始和结束。

如果string以未知数量的逗号或未知数量结束:

 ,"" 

例如:

 whatever,,,,,,,"","",,,,"","" 

那么这一点的VBA代码将删除该垃圾:

 Sub StringCleaner() Dim s1 As String, sTest As String, sOut As String s1 = "," & Chr(34) & Chr(34) sTest = "whatever" & ",,,,,," & s1 & s1 & ",,," & s1 & s1 sOut = sTest While Right(sOut, 1) = "," Or Right(sOut, 3) = s1 If Right(sOut, 1) = "," Then sOut = Mid(sOut, 1, Len(sOut) - 1) If Right(sOut, 3) = s1 Then sOut = Mid(sOut, 1, Len(sOut) - 3) Wend MsgBox sTest & vbCrLf & sOut End Sub 

感谢大家的帮助。

我用了一条不同的路线来解决我的问题。 我创build了一个批处理脚本,用于提取logging并将数据重新打印到新文件中,并在文件结尾处省略额外的逗号。

我的代码如下,任何批评,以改善它,赞赏。

 echo off setlocal EnableDelayedExpansion pause set cur=0 FOR /F "delims=" %%A in (input.csv) DO ( set line=%%A set line=!line:,,=, ,! FOR /F "tokens=1-11 delims=," %%G in (^"!line!^") DO ( if "%%G"=="" (echo.) if "%%G"==""FILENAME"" ( echo %%G,%%H,%%I,%%J >> test_%date:~-4,4%%date:~-7,2%%date:~-10,2%.csv goto EOF ) else ( echo %%G,%%H,%%I,%%J,%%K,%%L,%%M,%%N,%%O,%%P,%%Q >> test_%date:~-4,4%%date:~-7,2%%date:~-10,2%.csv ) set /a cur=cur+1 ) ) :EOF echo %cur% pause