csv-columnの数字を別のファイルのリストの助けによって置き換える必要があります。私はちょうどバッチ処理について学び始め、自分のニーズに合わせたスクリプトを見つけました。バッチファイルcsvの文字列を別のファイルのリストと置き換えます
これは私がちょうど、3番目の列を取る番号を交換し、新しいファイルに古いものと新しいものを書き、私が使用して、最初にこの問題を解決するためのコードです:古いを
@echo off & setlocal enabledelayedexpansion
set "Datei=lohn_prod.csv"
set "MA=Mitarbeiter.csv"
set "Ziel=eGecko.csv"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "tokens=3 delims=;" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
move "%t%" "%Ziel%"
goto :eof
:ProcessLine
for /f "tokens=1 delims=" %%i in ("%Line%") do set "L=%%i"
if not defined L >>"%t%" echo\& goto :eof
echo %L%
for /f "usebackq tokens=1,2 delims=;" %%i in ("%MA%") do set "L=!L:%%i=%%j!"
>>"%t%" echo %Line%, %L%
goto :eof
CSV(lohn_prod.csv)は次のようになります。
15;01.09.2016;105;160,25;1;2100;210;
15;01.09.2016;105;40;1;;217;
15;01.09.2016;105;5;72;;;
15;01.09.2016;107;184;1;2213;210;
15;01.09.2016;107;7,25;1;;213;
15;01.09.2016;107;16;1;;216;
15;01.09.2016;108;241,25;1;3200;210;
15;01.09.2016;108;21,25;1;;222;
15;01.09.2016;113;174,75;1;2111;210;
15;01.09.2016;113;16;1;;216;
...
他のファイル(Mitarbeiter.csv)私は3番目の列を置き換えるために使用するには、次のようになります。
それはそうと105, 4040226
105, 4040226
105, 4040226
107, 4040227
107, 4040227
107, 4040227
108, 40202
108, 40202
113, 40203
113, 40203
115, 40204
170, 40219
170, 40219
172, 4040228
172, 4040228
172, 4040228
185, 40221
185, 40221
185, 40221
...
、それは最初の105を検索し、それを置き換える:
105;40200
107;40201
108;40202
113;40203
115;40204
170;40219
172;40220
195;40222
197;40223
198;40224
199;40225
200;40226
201;40227
220;40228
235;40229
240;40230
...
問題は、しかし、私がこのような結果を得るために、各ループの最初から再びLを反復処理するようだということであり、 40200とし、次のループで40200の200を見つけ、それを40206の107と201と同じ40226に置き換えます。に番号202がないので、Mitarbeiter.csvに108が正しく置き換えられます。
すごい[OK]を、それは魔法のように動作し、そうですはるかに短く、明日のコードを勉強しなければならない、ありがとう! –
Mitarbeiter.csvが可能なすべての3番目の列項目を保持していない場合、eGecko.csvの3番目の列には必要なものが含まれていないというわずかな警告です。 – Compo
私は今あなたのコードを理解したと思う、あなたは$ [%% A] = %% B、素晴らしい解決策を使って(Pythonの言葉で)辞書を作った!そして、情報をありがとう、私はとにかくそれをfoolsproofにする必要がありますので、私は不足アイテムのチェックを入れて、その場合は警告を出すことができるかどうかを確認します。 –