2016-02-19 40 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

相關問題