kristov
Goto Top

Kann for mit Semikolon innerhalb von Texttrennern umgehen?

Hallo,

mir ist kein besserer Titel eingefallen. Es geht darum, eine csv-Datei zu filtern und das Ergebnis in eine neue csv-Datei zu schreiben. Die csv-Datei beginnt mit einer Zahl gefolgt von einem Semikolon, das ist auch das Filterkriterium. Momentan wird nach Zeilen gesucht, die mit 1; beginnen, und das Ergebnis (nur relevante Spalten davon) in eine neue Datei geschrieben. Auf den Aufbau der Quelldatei habe ich keinen Einfluß.

for /f "skip=1 tokens=1-7 delims=;" %%a in ('findstr /brc:"1;" "quelle.csv"') do >>ziel.csv echo %%a;%%f;%%b;%%g;%%d;  

Das funktioniert aber nur, wenn jedes token der Quelle "sauber" mit einem ; getrennt ist:

1;zweiter Eintrag;dritter Eintrag;vierter Eintrag;fünfter Eintrag;"sechster Eintrag";siebenter Eintrag;

Leider habe ich auch Zeilen mit Texttrenner und Semikolon:
1;"zweiter Eintrag;44;66";dritter Eintrag;vierter Eintrag;fünfter Eintrag;"sechster Eintrag";"siebenter Eintrag;22;99;";


Und da ist der Hund begraben:

Die Schleife gibt ohne Texttrenner und Semikolon aus:
1;"sechster Eintrag";zweiter Eintrag;siebenter Eintrag;vierter Eintrag;

Mit Texttrenner folgendes:
1;vierter Eintrag;"zweiter Eintrag;fünfter Eintrag;66";

Gibt's irgendeine Chance, auch mit Texttrenner das gewünschte Ergebnis zu erhalten?

Content-ID: 203668

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

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

Endoro
Endoro 21.03.2013 um 01:01:49 Uhr
Goto Top
Hallo kristov,

die Forschleife kann nicht mit " (double quotes) escapete Delimiter erkennen. Dafür musst du einen Parser selber bauen.

bb
format-c
format-c 21.03.2013 um 20:17:25 Uhr
Goto Top
Zitat von @kristov:
Gibt's irgendeine Chance, auch mit Texttrenner das gewünschte Ergebnis zu erhalten?

Welches Ergebnis ist denn von dir gewünscht? Willst du, dass 44 und 66 mit beim zweiten Ergebnis erscheinen, also dass alles, was innerhalb von "" steht, als ein zusammenhängender Eintrag erkannt wird?

BTW: wozu benötigst du den Schalter /r bei findstr, wenn du gleichzeitig /c verwendest?
bastla
bastla 21.03.2013 aktualisiert um 23:53:09 Uhr
Goto Top
@ format-c
wozu benötigst du den Schalter /r bei findstr, wenn du gleichzeitig /c verwendest?
Die Frage sollte eher lauten: Wozu in diesem Fall überhaupt "/r" oder "/c"?

Ansonsten kann die Kombination sehr wohl sinnvoll sein, denn auch bei Verwendung von "/r" gilt ein Leerzeichen als Trennzeichen zwischen mehreren (voneinander unabhängigen) Suchbegriffen - Beispiel:
D:\TEMP>type Text.txt
123 45 678
1234 567 8
1 23 4 5 6
D:\TEMP>findstr /r "[0-9][0-9][0-9][0-9] [0-9][0-9]" Text.txt
123 45 678
1234 567 8
1 23 4 5 6
D:\TEMP>findstr /rc:"[0-9][0-9][0-9][0-9] [0-9][0-9]" Text.txt
1234 567 8
Grüße
bastla
format-c
format-c 22.03.2013 um 02:26:54 Uhr
Goto Top
Stimmt, hast Recht.
format-c
format-c 22.03.2013 um 13:27:21 Uhr
Goto Top
Falls ein automatischer Ablauf bei dir nicht unbedingt erforderlich ist, kann ich dir das Tool "CSVed" wärmstens empfehlen. Dort kannst du die Reihenfolge der Spalten mit drag&drop ändern und er erkennt Werte innerhalb der "" als zusammenhängende Werte.


Grüße
format-c