Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Kann for mit Semikolon innerhalb von Texttrennern umgehen?

Frage Entwicklung Batch & Shell

Mitglied: kristov

kristov (Level 2) - Jetzt verbinden

20.03.2013 um 16:24 Uhr, 1724 Aufrufe, 5 Kommentare

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ß.

01.
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?
Mitglied: Endoro
21.03.2013 um 01:01 Uhr
Hallo kristov,

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

bb
Bitte warten ..
Mitglied: format-c
21.03.2013 um 20:17 Uhr
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?
Bitte warten ..
Mitglied: bastla
21.03.2013, aktualisiert um 23:53 Uhr
@ 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
Bitte warten ..
Mitglied: format-c
22.03.2013 um 02:26 Uhr
Stimmt, hast Recht.
Bitte warten ..
Mitglied: format-c
22.03.2013 um 13:27 Uhr
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
Bitte warten ..
Ähnliche Inhalte
iOS
Apple: Aktivierungssperre des iPads lässt sich umgehen

Link von runasservice zum Thema iOS ...

PHP
gelöst PHP XML Statt Semikolon ein Zeilenumbruch (2)

Frage von Judo99 zum Thema PHP ...

Neue Wissensbeiträge
Batch & Shell

Batch - ein paar Basics die man kennen sollte

Tipp von Pedant zum Thema Batch & Shell ...

Microsoft

Restrictor: Profi-Schutz für jedes Window

(6)

Tipp von AlFalcone zum Thema Microsoft ...

Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
gelöst Benutzer lässt sich nur an einem Clientcomputer anmelden (17)

Frage von Ammann zum Thema Windows Server ...

Netzwerke
SFP Modul (miniGibic) (11)

Frage von apranet zum Thema Netzwerke ...

Batch & Shell
gelöst Gruppenzugehörigkeit von AD Usern ermitteln - die Perfektion fehlt (11)

Frage von Stefan007 zum Thema Batch & Shell ...