ruebensau
Goto Top

Output einer Stapelverarbeitungsdatei fehlerhaft

Hi Community,

habe folgendes Phänomen und kann es mir nicht erklären bzw. komme alleine nicht mehr weiter. Bitte um Hile!!!^^

Ich habe folgende Datei: (uldokumente.csv)
A10020-1-975639001-20040525-ARA-51147;25.05.2004;ARA;1;04NK13730;51147;975639001
A10020-1-975639001-20041215-ARA-51147;15.12.2004;ARA;1;04NK29630;51147;975639001
A10020-1-995584001-CAPM;;CAPM;1;;;995584001
A10020-1-QF;;QF;1;;;

Hier ist die Batch dazu: (uldaten.bat)
for /F "tokens=1,2,3,4,5,6,7 delims=;" %%a in (uldokumente.csv) do call :step1 %%a %%b %%c %%d %%e %%f %%g

:step1
for /R %%f in (%1.*) do echo %4;%3;%7;%2;%5;%6;%%~dpnxf >> test.txt

Hier der Output: (test.txt)
1;ARA;975639001;25.05.2004;04NK13730;51147;C:\test\uldaten\2004-05-25\A10020-1-975639001-20040525-ARA-51147.rtf
1;ARA;975639001;15.12.2004;04NK29630;51147;C:\test\uldaten\2004-12-15\A10020-1-975639001-20041215-ARA-51147.rtf
995584001;1;;CAPM;;;C:\test\uldaten\A10020-1-995584001-CAPM.tif
;1;;QF;;;C:\test\uldaten\A10020-1-QF.rtf

Frage:
Warum sind die letzten beiden Zeilen des Outputs so verdreht. Eigentlich müsste doch dieser Output entstehen:
1;CAPM;995584001;;;;C:\test\uldaten\A10020-1-995584001-CAPM.tif
1;QF;;;;;C:\test\uldaten\A10020-1-QF.rtf

Kann mir hier jemand weiterhelfen, wie ich den von mir gewollten Output erzeugen kann?

MfG
Rübe


[Edit Biber] Von "Windows" nach "Batchkrams" verschoben [/Edit]

Content-ID: 93303

Url: https://administrator.de/contentid/93303

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

bastla
bastla 31.07.2008, aktualisiert am 18.10.2012 um 18:36:02 Uhr
Goto Top
Hallo rübensau!

Auf Basis der in diesem Beitrag neulich dargestellten Lösungsvorschläge könnte das so gehen:
@echo off & setlocal
for /f "delims=" %%i in (uldokumente.csv) do set "EinZeile=%%i" & call :ProcessLine  
goto :eof

:ProcessLine
for /F "tokens=1-7 delims=;" %%a in ("%EinZeile:;;=;$;%") do call :Step1 %%a %%b %%c %%d %%e %%f %%g  
goto :eof

:Step1
set "AusZeile=%4;%3;%7;%2;%5;%6"  
for /R %%f in (%1.*) do echo %AusZeile:$=%;%%~ff >> test.txt
goto :eof
Voraussetzung ist, dass Deine Daten kein "$" enthalten - falls doch, einfach in den Zeilen 7 und 11 durch ein geeignetes Zeichen ersetzen.

Wenn es keine "!" in Deinen Daten gibt, lässt sich durch Verwendung von "delayedExpansion" noch eine kürzere Schreibweise (wie im oben angesprochenen Beitrag) erzielen:
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%i in (uldokumente.csv) do (  
	set "EinZeile=%%i"  
	for /F "tokens=1-7 delims=;" %%a in ("!EinZeile:;;=;$;!") do call :Step1 %%a %%b %%c %%d %%e %%f %%g  
)
goto :eof

:Step1
set "AusZeile=%4;%3;%7;%2;%5;%6"  
for /R %%f in (%1.*) do echo %AusZeile:$=%;%%~ff >> test.txt
goto :eof
Grüße
bastla
ruebensau
ruebensau 31.07.2008 um 13:18:04 Uhr
Goto Top
super, klappt!
Danke

Hab nämlich den gesamten Vormittag damit verbracht und wollte einfach nicht klappen.
Vielleicht hast du bei meiner letzten Kniffelstelle zu diesem Thema auch einen Ansatz.


Datei
A10020-1-975639001-20040525-ARA-51147;25.05.2004;ARA;1;04NK13730;51147;975639001
A10020-1-975639001-20041215-ARA-51147;15.12.2004;ARA;1;04NK29630;51147;975639001
A10020-1-995584001-CAPM;;CAPM;1;;;995584001
A10020-1-QF;;QF;1;;;
Also das ganze ist ja wie man sieht semikolon getrennt.
Als zusätzliches Outputfeld pro Zeile hätte ich noch gerne den alphanumerischen Wert vor dem ersten - Zeichen, damit der Output folgendermaßen aussieht:

A10020;1;ARA;975639001;25.05.2004;04NK13730;51147;C:\test\uldaten\2004-05-25\A10020-1-975639001-20040525-ARA-51147.rtf
A10020;1;ARA;975639001;15.12.2004;04NK29630;51147;C:\test\uldaten\2004-12-15\A10020-1-975639001-20041215-ARA-51147.rtf
A10020;1;CAPM;;;;995584001;C:\test\uldaten\A10020-1-995584001-CAPM.tif
A10020;1;QF;;;;;C:\test\uldaten\A10020-1-QF.rtf

Ich habs schon versucht einen zusätzlichen Delimmer - einzubauen, so dass ich das Feld aufspalten kann und mir den Wert nehmen kann, aber das geht wieder nur mit Zeilen in der Datendatei die die gleiche Anzahl an - Zeichen haben, denn sonst ist die Anzahl der Spalten pro Zeile unterschiedlich. Hier dazu ein Besipiel was ich meine wenn ich - und ; als delimmer gleichzeitig benutze:

Output
A10020;1;975639001;20040525;ARA;51147;A10020-1-975639001-20040525-ARA-51147;25.05.2004;ARA;1;04NK13730;51147;975639001
A10020;1;975639001;20041215;ARA;51147;A10020-1-975639001-20041215-ARA-51147;15.12.2004;ARA;1;04NK29630;51147;975639001
A10020;1;995584001;CAPMA;10020-1-995584001-CAPM;;CAPM;1;;;995584001
A10020;1;QF;A10020-1-QF;;QF;1;;;
Ach, einfach schwer zu erklären, im Grunde will ich eigentlich nur diese Spalte mit A10020(kann auch andere Nummer sein) als zusätliche Spalte in dem Output.

Falls jemand das nicht versteht, was ich meine, einfach hier reinschreiben, versuche es dann anders zu erklären.

Danke schonmal
bastla
bastla 31.07.2008 um 13:42:43 Uhr
Goto Top
Hallo rübensau!

Ich habs schon versucht einen zusätzlichen Delimmer - einzubauen
Du musst ja nicht alles in einem Durchgang erledigen - ersetze Zeile 9 durch
for /f "delims=-" %%t in ("%EinZeile%") do set "AusZeile=%%t"  
set "AusZeile=%AusZeile%;%4;%3;%7;%2;%5;%6"  
Grüße
bastla

P.S.: Ein "Delimmer" macht's oft noch schlimmer - versuch's mal mit einem "Delimiter" ... face-wink *SCNR*
ruebensau
ruebensau 31.07.2008 um 13:54:56 Uhr
Goto Top
danke bastla,
du hast mir den tag gerettet

gruß
rübe