windows - 获取csv文件动态列的批处理脚本问题?

标签 windows batch-file

这是我用来从 csv 导出数据并写入 .trn 扩展文件的脚本。代码对 csv 文件数据的某些列执行正确,我的意思是说,如果该列没有索引 A 到 Z,代码执行正确,但是当 Z 列之后表示 AA、AB 等时,数据会出错。您可以在此处查看代码:

批处理脚本

@echo off
   set "line1=^%%a,cf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,,,,,,,,,,,,,"
   set "line2=^%%a,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,qbconid,,,^%%b,,,,,,,,,"
   .......................................................................................
   .......................................................................................
   set "line26=^%%a,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,txtstate,,,^%%z,,,,,,,,,"
   set "line27=^%%a,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,pmtper,,,^%%aa,,,,,,,,,"
   set "line28=^%%a,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,minfee,^%%ab,,,,,,,,,"
(for /F "tokens=1-28 skip=1 delims=," %%a in ('type "NewPortfolios.csv"') do ( 
        echo %line1%
        echo %line2%
        ............
        ............
        echo %line26%
    echo %line27%
    echo %line28%

    )) >"file.trn"

csv文件数据为:

 A               B             C               AA           AB
$portcode   $qbconId    $name     ....... $pmtper   #minfee
asingh12    123456789   Ajay Singh....... ajay           123

输出是:

asingh12,cf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,,,,,,,,,,,,,
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,qbconid,,,123456789,,,,,,,,,
...................................................................................
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,pmtper,,,asingh12a,,,,,,,,,
asingh12,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,minfee,asingh12b,,,,,,,,,

在上面两行中,您可以看到列值出现错误。 正如您所看到的 CSV 数据,最后 2 列值应该是 ajay 和 123,但它是 asingh12a 和 asingh12b。这些是 a 和 b 的值。它应该来自 AA 和 AB。

有人可以帮我吗?

                            **EDITED HERE**

嗨,Aacini - 希望你一切顺利。我再次面临 .csv 文件转换为 .txt 文件的问题。现在,这次使用引号(“)从 .csv 获取数据,这就是批处理脚本无法正常运行的原因。请找到 .csv 中的示例数据到 .txt 格式 - “_portcode”,“_qbconId”,“_name”,“_address”,“_city”,“_state”,“_zip”,“_bmeth”,“_ffee”,“_brak1”,“_rate0”,“_brak2”,“_rate1” ","_brak3","_rate2","_brak4","_rate3","_brak5","_rate4","_rate5","_bre","_custact","_custody","_qbmgrid","_refby", “_txstate”,“_pmtper”,“_minfee”

“schorira”,“001c000000WtrL1AAJ”,,“9232 Collegeview Cir”,“布卢明顿”,“MN”,“55437”,“T”,,“1000000.0”,“1.25”,,,,,,,, ,“1.0”,“罗伯特·斯科菲尔德 IRA 滚存”,,“施瓦布”,“JTB”,“帕特里克·斯蒂芬斯”,“明尼苏达”,“季刊”,“0”。上次 .csv 数据中没有引号。请帮帮我。如果您需要我方面的更多说明,请告诉我。感谢您提前提供的帮助。

嗨阿西尼,

到目前为止,我们正在等待您的回复。请帮帮我。

最佳答案

编辑:我修复了一些细节,它现在应该可以正确运行。

编辑#2:修复了细微的错误,并添加了一个示例

@echo off
set "letter=abcdefghijklmnopqrstuvwxyz"
   set "line1=!a!,cf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,,,,,,,,,,,,,"
   set "line2=!a!,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,qbconid,,,!b!,,,,,,,,,"

   set "line26=!a!,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,txtstate,,,!z!,,,,,,,,,"
   set "line27=!a!,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,pmtper,,,!aa!,,,,,,,,,"
   set "line28=!a!,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,minfee,!ab!,,,,,,,,,"
setlocal EnableDelayedExpansion
(for /F "usebackq skip=1 delims=" %%a in ("NewPortfolios.csv") do (
   set i1=0
   set "line=%%a"
   for %%b in ("!line:,=" "!") do for /F "tokens=1,2" %%i in ("!i1! !i2!") do (
      if %%i lss 26 (
         set var=!letter:~%%i,1!
      ) else (
         set var=a!letter:~%%j,1!
      )
      set "!var!=%%~b!
      set /A i1+=1, i2=i1-26
   )
   echo %line1%
   echo %line2%

   echo %line26%
   echo %line27%
   echo %line28%
)) > file.trn

以前的批处理程序最多可以输出 52 列 (a..z aa..az),但增加此范围非常容易。使用此输入数据:

 A,        B,       C,        D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z, AA,    AB
$portcode,$qbconId,$name,     D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$pmtper,#minfee
asingh12,123456789,Ajay Singh,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,ajay,123

输出是:

asingh12,cf,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,,,,,,,,,,,,,
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,qbconid,,,123456789,,,,,,,,,
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,txtstate,,,Z,,,,,,,,,
asingh12,$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,pmtper,,,ajay,,,,,,,,,
asingh12,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,y,minfee,123,,,,,,,,,

关于windows - 获取csv文件动态列的批处理脚本问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21133922/

相关文章:

c - Windows 上 C 语言的 xlsxwriter 安装

c - 如何使用 VBO 绘制三角形?

batch-file - Inno Setup - 从外部源(文件或文件夹内容)创建组件/类型的动态列表

windows - 'P""' ' 不是内部或外部命令,也不是可运行的程序或批处理文件

windows - 删除文本文件的第一行

windows - 使用 mklink 将一个文件夹中的 dll 文件符号链接(symbolic link)到另一个文件夹

windows - 从卷影副本备份

php - 如果您习惯在 Mac 上使用 TextMate,您会在 Windows 上使用哪个 PHP IDE?

c# - 为什么 List<float>.Sum() 和手动数字求和在 C# 中给出不同的结果?

windows - 批处理文件循环 x 次,将每个数字添加到字符串的末尾