我想创建一个通用脚本,将固定宽度的平面文件转换为csv。以下是我的方法:
0,9
9,3
12,11
23,7
30,1
31,1
32,5
37,9
46,9
55,3
58,9
67,9
76,9
85,9
94,1
我正在使用的配置文件包含子字符串的参数,这些参数表示子字符串的位置和字符数。
配置文件包含:
1234<space>678 [col1=678,col2=space,col3=678]
源文件包含实际已修复的源文件。
现在使用我的代码我得到了结果但是对于源中没有值/空的字段没有反映在最终输出中。 例如:
来源:
{{1}}
输出(当前):
1234,678
输出(预期):
1234,,678
请帮忙
答案 0 :(得分:0)
您的for %%p in (!VAR!) do (…)
循环对(…)
中用空格分隔的所有字符串执行已定义的!VAR!
命令。因此,如果!VAR!
导致所有空格,则后续for %%p in ( ) do (…)
循环不执行任何操作。下一个代码段可以提供帮助:
echo off
setlocal EnableDelayedExpansion
echo a,b,c>final.txt
rem replace the €€€ string with any unused one
set "fooString=€€€"
for /f "tokens=1 delims=;" %%i in (source.txt) do (
set "x=%%i"
for /f "tokens=1,2 delims=," %%a in (config.txt) do (
call SET "VARraw=!x:~%%a,%%b!%fooString%"
rem replaced with respect to the OP's comment: for %%p in (!VARraw!) do (
for /F "tokens=*" %%p in ("!VARraw!") do (
set "rav=%%p"
set "var=!rav:%fooString%=!"
echo/|set /p "=!var!,"
) >>final.txt
)
)
修改:请注意for /F "tokens=*" %%p in ("!VARraw!") do (
会从!VARraw!
字符串中删除前导空格。