In Textdatei zeilenweise ein Zeichen ersetzen und csv-Datei erzeugen
Hallo Leute,
ich bin neu im Forum und noch relativ unerfahren in Sachen Batch Dateien.
Ich habe eine Textdatei mit mehreren hundert Zeilen in folgendem Format (Pipes sind nur als Spaltentrenner eigefügt):
00148 | 81.7 | 5.4 | 9.2 | 7.2 | 0.5 | 1.5 | 42 | 0 | 265 | 80.00 | 04:57:27 | 05:06:38 | 8 | 1001510 RA | 12.02.2009
1.Problem: Die 0 in Spalte 9 soll in jeder Zeile in eine 1 umgewandelt werden. Aber nur diese 0, die anderen nicht.
Mein Versuch über eine Zeichenkette in der Art: " 0 " -> " 1 ". klappt nicht. Hier der Code:
for /F "delims=" %%a in (quelle.txt) do (
set text=%%a
set text=text: 0 = 1 >>ziel.txt
)
Ist die Herangehensweise eigentlich richtig, oder gibt es andere Möglichkeiten?
2.Problem: Trennzeichen
Auf den ersten Blick scheinen sich Leerzeichen als Trenner anzubieten. Kann ich aber nicht nehmen weil Spalte 15 Leerzeichen enthalten kann und diese Spalte würde es mir ja auch trennen. Da ich diese Textdatei zeilenweise in eine Datenbank einlesen möchte, brauche ich aber eine Art CSV-Datei mit eindeutigen Trennzeichen.
Am liebsten wäre mir das Semikolon.
Lässt sich sowas per Batch realisieren, oder muss ich doch über Excel gehen?
Please Help ....?!?
[Edit Biber] Am 17.02.2009 auf "Gelöst" gesetzt. [/Edit]
ich bin neu im Forum und noch relativ unerfahren in Sachen Batch Dateien.
Ich habe eine Textdatei mit mehreren hundert Zeilen in folgendem Format (Pipes sind nur als Spaltentrenner eigefügt):
00148 | 81.7 | 5.4 | 9.2 | 7.2 | 0.5 | 1.5 | 42 | 0 | 265 | 80.00 | 04:57:27 | 05:06:38 | 8 | 1001510 RA | 12.02.2009
1.Problem: Die 0 in Spalte 9 soll in jeder Zeile in eine 1 umgewandelt werden. Aber nur diese 0, die anderen nicht.
Mein Versuch über eine Zeichenkette in der Art: " 0 " -> " 1 ". klappt nicht. Hier der Code:
for /F "delims=" %%a in (quelle.txt) do (
set text=%%a
set text=text: 0 = 1 >>ziel.txt
)
Ist die Herangehensweise eigentlich richtig, oder gibt es andere Möglichkeiten?
2.Problem: Trennzeichen
Auf den ersten Blick scheinen sich Leerzeichen als Trenner anzubieten. Kann ich aber nicht nehmen weil Spalte 15 Leerzeichen enthalten kann und diese Spalte würde es mir ja auch trennen. Da ich diese Textdatei zeilenweise in eine Datenbank einlesen möchte, brauche ich aber eine Art CSV-Datei mit eindeutigen Trennzeichen.
Am liebsten wäre mir das Semikolon.
Lässt sich sowas per Batch realisieren, oder muss ich doch über Excel gehen?
Please Help ....?!?
[Edit Biber] Am 17.02.2009 auf "Gelöst" gesetzt. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 109044
Url: https://administrator.de/contentid/109044
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
4 Kommentare
Neuester Kommentar
Hier mal eine Loesung fuer dein Problem:
Ziele 02: ersetzen der 0 durch eine 1 in Spalte 9
Zeile 03: Zeile wieder zusammensetzen
Zeile 04: " | " durch ";" ersetzen und in Datei rausschreiben
for /F "tokens=1-9* delims=|" %%a in (quelle.txt) do (
if "%%i" equ " 0 " ( set temp= 1 ) else ( set temp=%%i)
set temp=%%a^|%%b^|%%c^|%%d^|%%e^|%%f^|%%g^|%%h^|!temp!^|%%j
ECHO !temp: ^| =;!>>ziel.txt
)
Ziele 02: ersetzen der 0 durch eine 1 in Spalte 9
Zeile 03: Zeile wieder zusammensetzen
Zeile 04: " | " durch ";" ersetzen und in Datei rausschreiben
Hallo watchdogg und willkommen im Forum!
Unter der Annahme, dass in Spalte 9 immer eine "1" stehen soll, und dass die Leerzeichen bis zur Spalte 14 eigentlich nicht benötigt werden, könnte der Batch (welcher, ganz nebenbei, kein Beispiel für übertriebene Eleganz darstellt) so aussehen:
Das Trennzeichen für die neue Datei wird in Zeile 4 festgelegt.
Die Zeile 12 dient dazu, aus den ersten 14 Feldern alle enthaltenen Leerzeichen zu entfernen.
Soferne jede Zeile der Ausgangsdatei (wie in Deinem Beispiel) tatsächlich mit einem Leerzeichen beginnt, müsste in den Zeilen 11 und 13 jeder Wert nach einem "~" (=Startposition des Feldes) um 1 erhöht werden, also zB
Grüße
bastla
Das macht das Problem schwieriger, oder? Denn die Spalten sind ja durch ein oder mehrere Leerzeichen getrennt.
Eigentlich wird es einfacher, denn die Spalten sind zwar durch Leerzeichen getrennt, haben aber vor allem eine fixe Breite, anhand deren die Zerlegung erfolgen kann.Unter der Annahme, dass in Spalte 9 immer eine "1" stehen soll, und dass die Leerzeichen bis zur Spalte 14 eigentlich nicht benötigt werden, könnte der Batch (welcher, ganz nebenbei, kein Beispiel für übertriebene Eleganz darstellt) so aussehen:
@echo off & setlocal
set "Ein=D:\Ausgangsdatei.txt"
set "Aus=D:\Ergebnis.csv"
set "D=;"
if exist "%Aus%" del "%Aus%"
for /f "usebackq delims=" %%i in ("%Ein%") do set "Z=%%i" & call :ProcessLine
goto :eof
:ProcessLine
set "Zeile=%Z:~0,20%%D%%Z:~21,6%%D%%Z:~28,7%%D%%Z:~36,7%%D%%Z:~44,7%%D%%Z:~52,6%%D%%Z:~59,6%%D%%Z:~66,6%%D%1%D%%Z:~80,6%%D%%Z:~87,6%%D%%Z:~94,8%%D%%Z:~103,8%%D%%Z:~112,5%%D%
set "Zeile=%Zeile: =%"
set "Zeile=%Zeile%%Z:~118,15%%D%%Z:~134,8%%D%%Z:~143,7%
>>"%Aus%" echo %Zeile%
goto :eof
Die Zeile 12 dient dazu, aus den ersten 14 Feldern alle enthaltenen Leerzeichen zu entfernen.
Soferne jede Zeile der Ausgangsdatei (wie in Deinem Beispiel) tatsächlich mit einem Leerzeichen beginnt, müsste in den Zeilen 11 und 13 jeder Wert nach einem "~" (=Startposition des Feldes) um 1 erhöht werden, also zB
set "Zeile=%Z:~1,20%%D%%Z:~22,6% ...
bastla