将固定宽度平面文件转换为csv的脚本

时间:2016-02-19 14:32:24

标签: batch-file cmd

我想创建一个通用脚本,将固定宽度的平面文件转换为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

请帮忙

1 个答案:

答案 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!字符串中删除前导空格。