Immagina un file di testo in cui ogni record CSV può avere un numero diverso di campi. L'attività è scrivere codice per generare quanti campi ci sono in ogni record del file. Puoi presumere che non ci sia una riga di intestazione nel file e che puoi leggere da un file o da un input standard, a tua scelta.
Puoi assumere una versione di rfc4180 per le regole CSV che spiegherò di seguito per la definizione di ogni riga del file. Ecco una versione leggermente modificata della parte pertinente delle specifiche:
Definizione del formato CSV
Ogni record si trova su una riga separata, delimitata da un'interruzione di riga (CRLF). Per esempio:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLFL'ultimo record nel file può avere o meno un'interruzione di riga finale. Per esempio:
aaa,bbb,ccc CRLF zzz,yyy,xxx
(La regola 3. non si applica a questa sfida)
All'interno di ogni record, ci possono essere uno o più campi, separati da virgole. Gli spazi sono considerati parte di un campo e non devono essere ignorati.
Ogni campo può essere racchiuso tra virgolette doppie o meno. Se i campi non sono racchiusi tra virgolette doppie, le virgolette doppie potrebbero non apparire all'interno dei campi. Per esempio:
"aaa","bbb","ccc" CRLF zzz,yyy,xxxI campi che contengono interruzioni di riga (CRLF), virgolette doppie e virgole devono essere racchiusi tra virgolette doppie. Per esempio:
"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxxSe le virgolette doppie vengono utilizzate per racchiudere i campi, è necessario evitare una virgoletta doppia che appare all'interno di un campo precedendola con un'altra virgoletta doppia. Per esempio:
"aaa","b""bb","ccc"
Esempio
Ingresso:
,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b
bb","ccc","fish",""
Dovrebbe dare l'output:
2, 3, 3, 5
Puoi fornire i valori di output nel modo che ritieni più conveniente.
biblioteche
Puoi usare qualsiasi libreria che ti piace.
Finora risposte fantastiche, ma ci manca una risposta da riga di comando / bash che sarebbe particolarmente interessante.