Textdatei mit leeren Feldern umwandeln
Hallo zusammen,
ich möchte eine Textdatei (Gebührendatensätze aus einer TK Anlage) per batch umwandeln damit ich sie in eine Firebird Datenbank einlesen kann. Mit Hilfe dieses Forums habe ich schon einiges gelöst, leider komme ich nun nicht mehr weiter:
Die ursprüngliche Datei hat als Trennzeichen Semikolon, mein Problem ist nun, daß einige Felder (je nach Art der Verbindung) manchmal gefüllt sind und manchmal nicht:
10.08.06;08:40:09;1;11;;00:01:14;0943211234;;2;;;0;1;
10.08.06;08:45:36;1;11;00:06;00:02:48;;;1;;;;;
usw.
mit:
FOR /F "tokens=1-13 delims=;" %%a IN (%1) DO echo '%%a','%%b',%%c,%%d,%%e,%%f,%%g,%%h,%%i,%%j,%%k,%%l,%%m >> temp.txt
werden nun die leeren Felder übersprungen, und je nach Verbindungsart verschiebt sich das Ganze.
Weis hier jemand eine Lösungsmöglichkeit?
Besten Dank schon mal,
Frank
ich möchte eine Textdatei (Gebührendatensätze aus einer TK Anlage) per batch umwandeln damit ich sie in eine Firebird Datenbank einlesen kann. Mit Hilfe dieses Forums habe ich schon einiges gelöst, leider komme ich nun nicht mehr weiter:
Die ursprüngliche Datei hat als Trennzeichen Semikolon, mein Problem ist nun, daß einige Felder (je nach Art der Verbindung) manchmal gefüllt sind und manchmal nicht:
10.08.06;08:40:09;1;11;;00:01:14;0943211234;;2;;;0;1;
10.08.06;08:45:36;1;11;00:06;00:02:48;;;1;;;;;
usw.
mit:
FOR /F "tokens=1-13 delims=;" %%a IN (%1) DO echo '%%a','%%b',%%c,%%d,%%e,%%f,%%g,%%h,%%i,%%j,%%k,%%l,%%m >> temp.txt
werden nun die leeren Felder übersprungen, und je nach Verbindungsart verschiebt sich das Ganze.
Weis hier jemand eine Lösungsmöglichkeit?
Besten Dank schon mal,
Frank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 37984
Url: https://administrator.de/forum/textdatei-mit-leeren-feldern-umwandeln-37984.html
Ausgedruckt am: 13.05.2025 um 22:05 Uhr
9 Kommentare
Neuester Kommentar
Moin stoner,
auch dafür gibt es eine Strategie...
wenn Deine Zeile so aussieht:
10.08.06;08:45:36;1;11;00:06;00:02:48;;;1;;;;;
und Du diese Zeile in eine Variable packst:
...dann ersetze alle aufeinanderfolgenden Trennzeichen (z.B.";") durch Trennzeichen-Dummy-Trennzeichen.
Wobei "Dummy" ein Zeichen ist, dass NIE (oder eigentlich nie *gg) in einer Zeile vorkommt, z.B. ein "@".
Auf bätschisch also
Und jetzt das Ganze in Deinem Batch:
Hope That Helps
Biber
auch dafür gibt es eine Strategie...
wenn Deine Zeile so aussieht:
10.08.06;08:45:36;1;11;00:06;00:02:48;;;1;;;;;
und Du diese Zeile in eine Variable packst:
set zeile=10.08.06;08:45:36;1;11;00:06;00:02:48;;;1;;;;;
Wobei "Dummy" ein Zeichen ist, dass NIE (oder eigentlich nie *gg) in einer Zeile vorkommt, z.B. ein "@".
Auf bätschisch also
..
set zeile=10.08.06;08:45:36;1;11;00:06;00:02:48;;;1;;;;;
set zeile=%zeile:;;=;@;%
REM %zeile% ist jetzt "10.08.06;08:45:36;1;11;00:06;00:02:48;@;;1;@;;@;;" , da nicht alle ";;" ersetzt wurden.
REM Warum, das leuchtet beim kurzen Nachdenken aber ein...
REM ...also machen wir das dreimal:
set zeile=%zeile:;;=;@;%
set zeile=%zeile:;;=;@;%
...
Und jetzt das Ganze in Deinem Batch:
.. -------- ungetesteSkizze.bat
REM ..hier bedeutet Parameter 1 (%1) noch: NameDerInputdatei.xyz
...
FOR /F "delims=" %%a IN (%1) DO call :NormalizeIt %%a
goto :eof
:normalizeIt [parameter 1 ist die ´komplette Zeile]
set zeile=%1
set zeile=%zeile:;;=;@;%
REM ...machen wir das dreimal:
set zeile=%zeile:;;=;@;%
set zeile=%zeile:;;=;@;%
FOR /F "tokens=1-13 delims=;" %%a IN (%1) DO echo '%%a','%%b',%%c,%%d,%%e,%%f,%%g,%%h,%%i,%%j,%%k,%%l,%%m >> temp.txt
goto :eof
Hope That Helps
Biber
Moin stoner,
dann versuchs hiermit:
[Inputdate heißt bei mir Stoner.In; Outputdatei stoner.Out]
Demo am CMD-Prompt:
Gruß
Biber
dann versuchs hiermit:
[Inputdate heißt bei mir Stoner.In; Outputdatei stoner.Out]
::---------stoner.bat parameter1=Inputdatei
@echo off & setlocal
del stoner.out >nul
%JustADebugLine% echo Input %: & type %1
FOR /F "delims=" %%a IN (%1) DO call :normalize %%a
%JustADebugLine% echo Output : & type stoner.Out
goto :eof
:normalize
set "zeile=%*"
set zeile=%zeile:;;=;0;%
set zeile=%zeile:;;=;0;%
set zeile=%zeile:;;=;0;%
FOR /F "tokens=1-13 delims=;" %%a IN ("%zeile%") DO (
echo '%%a','%%b','%%c','%%d','%%e','%%f','%%g','%%h','%%i','%%j','%%k','%%l','%%m'>>stoner.Out
)
goto :eof
$cmd$stoner stoner.In
Input stoner.In:
10.08.06;08:40:09;1;11;;00:01:14;0943211234;;2;;;0;1;
10.08.06;08:45:36;1;11;00:06;00:02:48;;;1;;;;;
Output:
'10.08.06','08:40:09','1','11','0','00:01:14','0943211234','0','2','0','0','0','1'
'10.08.06','08:45:36','1','11','00:06','00:02:48','0','0','1','0','0','0','0'
Gruß
Biber