这是我用来从 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/