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-Key: 203668

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

Printed on: April 24, 2024 at 01:04 o'clock

Member: Endoro
Endoro Mar 21, 2013 at 00:01:49 (UTC)
Goto Top
Hallo kristov,

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

bb
Member: format-c
format-c Mar 21, 2013 at 19:17:25 (UTC)
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?
Member: bastla
bastla Mar 21, 2013 updated at 22:53:09 (UTC)
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
Member: format-c
format-c Mar 22, 2013 at 01:26:54 (UTC)
Goto Top
Stimmt, hast Recht.
Member: format-c
format-c Mar 22, 2013 at 12:27:21 (UTC)
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