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ß.
Das funktioniert aber nur, wenn jedes token der Quelle "sauber" mit einem ; getrennt ist:
Leider habe ich auch Zeilen mit Texttrenner und Semikolon:
Und da ist der Hund begraben:
Die Schleife gibt ohne Texttrenner und Semikolon aus:
Mit Texttrenner folgendes:
Gibt's irgendeine Chance, auch mit Texttrenner das gewünschte Ergebnis zu erhalten?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 203668
Url: https://administrator.de/contentid/203668
Ausgedruckt am: 22.11.2024 um 07:11 Uhr
5 Kommentare
Neuester Kommentar
Zitat von @kristov:
Gibt's irgendeine Chance, auch mit Texttrenner das gewünschte Ergebnis zu erhalten?
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?
@ format-c
Ansonsten kann die Kombination sehr wohl sinnvoll sein, denn auch bei Verwendung von "
Grüße
bastla
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
bastla