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 CRLFDer 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,xxxFelder, 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,xxxWenn 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.