Hilfe bei schreiben einer batch-Skript zu Parsen von CSV-Datei und Ausgabe einer text-Datei
Ich bin kämpfen, um die Erstellung einer batch-script zum Lesen einer CSV-Datei wie unten
Name:, City:, Country:
Mark, London, UK
Ben, Paris, France
Tom, Athens, Greece
Gibt es eine Kopfzeile in der CSV-Datei. Es sollte die Ausgabe in eine text-Datei wie folgt:
Name:Mark
City:London
Country:UK
Name:Ben
City:Paris
Country:France
Name:Tom
City:Athens
Country:Greece
Das Trennzeichen (:) in der obigen Ausgabe wird voraussichtlich in der header-Zeile selbst. Also alle, die ich tun müssen, verketten Sie das Feld Bezeichnung und Ihr Wert.
Die Anzahl der Spalten in dieser CSV-Datei ist nicht behoben, also sollte das script nicht zu begrenzen 3 Token. Bitte helfen!
- sprachneutral (kann ich liefern Hinweise, wie dieses Problem zu lösen, das in perl)?
- Dank Programmierung in perl ist nicht beunruhigend mich.
use strict; use Data::Dumper; my $filename = $ARGV[0]; open FILE, $filename or die; my $header = <FILE>; my @keys = split /,/, $header; my @data; for my $line (<FILE>){ chomp; my @values = split /,/, $line; my %data_rows; @data_rows{@keys} = @values; push @data, %data_rows; } print Dumper(\\@data);
Aber ich brauche eine Windows-batch-Skript-Lösung. Ich finde es schwierig, in vollem Umfang mit dem batch-Skript. - 1. Da sind immer Leerzeichen nach den Kommas? 2. Können Token (ob Header oder-Werte), Leerzeichen enthalten? 3. Gibt es eine maximal mögliche Anzahl von Token? 4. Können Token Kommas enthalten?
- 1.Es wird kein Leerzeichen nach dem Komma, obwohl es besser wäre zu fangen, der Fall. 2. Token können keine Leerzeichen enthalten. 3. Die keine. der Token ist nicht behoben. Allerdings, wenn Sie beziehen sich auf maximal zulässige Token ja, kann sein fest auf einen vernünftigen Wert (10 oder so). 4. Token strikt enthalten, nicht Kommas.
- Die perl-Lösung, die ich herausgefunden getan werden kann, mit einem one-liner selbst.
perl -F, -lane "if ($.==1) {@keys = @F} else{print @keys[$_].$F[$_] foreach(0..$#F)} "
Warum Brauch ich batch-Skript ist, weil es einfacher ist, gemeinsam mit meinen Kolleginnen und Kollegen, die möglicherweise nicht die Rechte zur Installation von perl auf Ihre Maschinen. - Es sei denn, deine Kollegen haben absurd alten Windows-Maschinen, haben Sie Zugriff auf VBScript und JScript, keine Notwendigkeit, etwas zu installieren neu. Entweder dieser ist wesentlich schöner zu Programmieren als batch-Sprache.
- Stimmt... für einige Grund, der nicht durch meinen Kopf. Auch wenn ich nicht tüchtig an ist, werde ich versuchen, einen code aus ihm heraus. Inzwischen, wenn Sie etwas fertig haben, um zu starten, bitte teilen. Diese Art der Aufgabe ist durchaus üblich und zu wiederholen, ich bin sicher, dass viele Leute es nützlich finden.
- OK, ich habe um zu tun, ein Vbscript für diese Funktion (habe ich gerade geändert, ein code-Beispiel zur Verfügung, auf dem Netz). Ich Teile es, damit andere es verwenden können.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese batch-scipt:
akzeptiert einen parameter, den Namen der Datei zu verarbeiten;
nicht überprüfen, das Vorhandensein von
:
am Ende ein header-token, und wenn die Werte angezeigt werden, Sie werden unmittelbar nach der entsprechenden header-Token;trimmt die führenden Leerzeichen (aber nicht die nachfolgende Länder);
Auffassung der ersten Zeile um die Kopfzeile handelt, die bestimmt auch die Anzahl der tokens, um Prozess in den nachfolgenden Zeilen;
unterstützt bis zu 10 Token, und die beiden Bereiche Fett-und Kursivdruck hervorgehoben sind dafür verantwortlich, dass (also, wenn Sie müssen, ändern Sie die maximale Anzahl, ändern beide Bereiche: wenn Sie die Anzahl erhöhen, müssen Sie erweitern die
"%%a" "%%b" "%%c" …
Liste, und ebenso, wenn Sie verringern Sie die Zahl ein, dann schrumpft die Liste).Ich weiß, das ist eine alte Frage, aber diese Art von Frage ist mein Favorit hier ist Sie also meine Antwort:
Diesem Programm keine Beschränkung in der Anzahl der Felder. Diese version erfordert das einschließen in Anführungszeichen, die Elemente, die möglicherweise Leerzeichen oder anderen Batch-Trennzeichen, aber diese Einschränkung kann leicht behoben werden.
IN()
Klausel der gleichen Weise, wie Räume, danke!Python macht dies so einfach, es sollte von der Regierung geregelt werden.
Edit: ich denke, Sie brauchen etwas, native zu den Windows-Befehls-shell. Naja.