从CSV文件提取的数据缺少一些数据

从CSV文件提取的数据缺少一些数据,csv,batch-file,batch-processing,Csv,Batch File,Batch Processing,我有一个脚本,它从CSV文件中提取数据,并将其重新打印到另一个文件中,当与搜索字符串匹配时,从最后一条记录中删除额外字段。见下文 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!^")

我有一个脚本,它从CSV文件中提取数据,并将其重新打印到另一个文件中,当与搜索字符串匹配时,从最后一条记录中删除额外字段。见下文

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_YYYYMMDD.CSV"" (
        echo %%G,%%H,%%I,%%J >> output.csv
        goto EOF
    ) else (
        echo %%G,%%H,%%I,%%J,%%K,%%L,%%M,%%N,%%O,%%P,%%Q >> output.csv
    )
    set /a cur=cur+1
  )
)
:EOF
echo %cur%
pause
我的问题有两方面

  • 文件名_YYYYMMDD根据创建输入文件的日期而变化。如何使其与文件名部分匹配?即%%G在%%G==FILENAME\u 20150610或FILENAME\u 20150611或FILENAME\u XYZ时为匹配项
  • 该脚本大部分工作正常,但许多记录缺少最后一个字段。总共有7/190条记录丢失%%Q。这些不完整的记录随机散布在我的输出文件中
  • 示例如下:

    之前

    "Parent","CODE1","Child ONE",CODEA,"COMPANY","","Address1",,"SUBURB","STATE","2000"
    "FILENAME_20150529.csv","20150529","15:09:30",187,"","","","","","",""
    
    之后

    "Parent","CODE1","Child ONE",CODEA,"COMPANY","","Address1", ,"SUBURB1","STATE2" 
    "FILENAME_20150529.csv","20150529","15:09:30",187
    
  • 阅读
    help set
    并使用
    set=:~
    子字符串提取

    set fn=%%G
    set fn=!fn:~1,9!
    if /i !fn!==FILENAME_ (
    
  • BAT解析(使用
    for
    或使用
    set
    )不适用于复杂的csv解析器,因为有关于逗号和引号的复杂规则。在您的情况下,字段中可能有一些不平衡的引号或逗号,导致解析失败


  • 提示:将
    如果不是“%comspec%”==%comspec:EXE=%回显匹配的输出与
    如果不是“%comspec%”==%comspec:YXY=%回显匹配的输出进行比较
    2。请回答您的问题,并添加原始记录和更改记录的示例作为原始记录。可以以逗号开头,或者在数据字段中包含额外的逗号(不管是否用双引号括起来)。@JosefZ,在我编辑问题后,我马上解决了问题。“Child ONE”字段中有逗号,导致最后一个字段不出现。