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, 1691 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

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

Viren und Trojaner
Exploit Kits umgehen erweiterten Windows-Schutz

Link von magicteddy zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...