2016-02-19 83 views
1

我想制作一个通用脚本,它将固定宽度平面文件转换为csv。下面是我的方法:我正在使用包含在哪里做的串和多少个字符其中规定了子参数将固定宽度平面文件转换为csv的脚本

`echo off 
setlocal EnableDelayedExpansion 

echo a,b,c>final.txt 

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 VAR=!x:~%%a,%%b! 

for %%p in (!VAR!) do (echo/|set /p ="%%p," 
) >>final.txt 

) 

) 
` 

配置文件。

配置文件包含:

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] 

输出(电流):

1234,678

输出(预期):

1234 ,, 678

请帮

+0

你能给的Source.txt – SachaDee

回答

0

for %%p in (!VAR!) do (…)循环执行在!VAR!白色空间(S)分隔找到所有字符串定义(…)命令。因此,如果!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!字符串中删除前导空格。

+0

我用你的代码片段,但我似乎面临一个issue.Please找到下面的输出的外观:


'资料来源: S3340MAAAAAAAAA AA 77M12

当前输出: S,334,0,M AAAAAAAAA,A,A ,, 77,男,12

预期输出: 小号,334,0,男,AAAAAAAAAAA,77,男,12 '

正如你可以看到它正在考虑为新的字段的字段之间的空间。 – user3032562

+0

截图附在这里[link](http://tinypic.com/r/orlzcy/9) – user3032562