Stellen Sie sich eine Textdatei vor, in der jeder CSV-Datensatz möglicherweise eine andere Anzahl von Feldern enthält. Die Aufgabe besteht darin, Code zu schreiben, um auszugeben, wie viele Felder sich in jedem Datensatz der Datei befinden. Sie können davon ausgehen, dass die Datei keine Kopfzeile enthält, und Sie können nach Belieben aus einer Datei oder einer Standardeingabe einlesen.
Sie können eine Version von rfc4180 für die CSV-Regeln annehmen, die ich unten für die Definition jeder Zeile der Datei erläutere. Hier ist eine leicht bearbeitete Version des relevanten Teils der Spezifikation:
Definition des CSV-Formats
Jeder Datensatz befindet sich in einer separaten Zeile, die durch einen Zeilenumbruch (CRLF) begrenzt ist. Beispielsweise:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
Der letzte Datensatz in der Datei enthält möglicherweise einen Zeilenumbruch am Ende oder nicht. Beispielsweise:
aaa,bbb,ccc CRLF zzz,yyy,xxx
(Regel 3. gilt nicht für diese Herausforderung)
In jedem Datensatz können sich ein oder mehrere Felder befinden, die durch Kommas getrennt sind. Leerzeichen werden als Teil eines Feldes betrachtet und sollten nicht ignoriert werden.
Jedes Feld kann in doppelte Anführungszeichen eingeschlossen sein oder nicht. Wenn Felder nicht in doppelte Anführungszeichen eingeschlossen sind, werden in den Feldern möglicherweise keine doppelten Anführungszeichen angezeigt. Beispielsweise:
"aaa","bbb","ccc" CRLF zzz,yyy,xxx
Felder, die Zeilenumbrüche (CRLF), doppelte Anführungszeichen und Kommas enthalten, sollten in doppelte Anführungszeichen eingeschlossen werden. Beispielsweise:
"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx
Wenn Felder in Anführungszeichen gesetzt werden, muss ein Anführungszeichen, das in einem Feld steht, durch ein weiteres Anführungszeichen maskiert werden. Beispielsweise:
"aaa","b""bb","ccc"
Beispiel
Eingang:
,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b
bb","ccc","fish",""
Sollte die Ausgabe geben:
2, 3, 3, 5
Sie können die Ausgabewerte so angeben, wie Sie es am bequemsten finden.
Bibliotheken
Sie können jede beliebige Bibliothek verwenden.
Bisher fantastische Antworten, aber wir vermissen eine Kommandozeilen- / Bash-Antwort, die besonders cool wäre.
R , 40 Bytes
Probieren Sie es online!
Gemäß der Dokumentation von erhalten
count.fields
Felder mit Zeilenumbrüchen eine Feldanzahl von NA für die Anfangszeile, sodass wir sie herausfiltern.quelle
JavaScript (ES2018),
42 bis59 ByteCode-Snippet anzeigen
quelle
s
Flagge auf der Regex. Nicht, dass es so wichtig wäre ;-) Und netter Gebrauch davon, übrigens!Gelee , 12 Bytes
Eine Portierung der rekursiven Stax-Antwort - geben Sie Kredit!
Probieren Sie es online!
Wie?
Vielleicht bevorzugen Sie
ṣ”"m2ẎỴċ€”,‘
-Ẏ
ist fest undċ€
zählt die Kommas in jedem.quelle
Python, 63 Bytes
Gibt die Ausgabe in einem iterierbaren
map
Objekt zurück.quelle
lambda
Funktion können Sie diese nach unten bekommen 54 BytesWolfram Language (Mathematica) , 30 Byte
Probieren Sie es online!
quelle
Perl 5 .10.0,
5553 BytesProbieren Sie es online!
Erläuterung:
quelle
Java 10, 101 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
Gelee , 17 Bytes
Probieren Sie es online!
-1 Danke an Jonathan Allan . duh duh duh ...
quelle