Уявіть текстовий файл, де кожен запис csv може мати різну кількість полів. Завдання полягає в тому, щоб написати код, щоб вивести, скільки полів є в кожному записі файла. Ви можете припустити, що у файлі немає рядка заголовка, і ви можете читати його з файлу чи стандартного вводу, як вам захочеться.
Ви можете припустити версію rfc4180 для правил csv, яку я поясню нижче для визначення кожного рядка файлу. Ось злегка відредагована версія відповідної частини специфікації:
Визначення формату CSV
Кожен запис розташований на окремому рядку, відмежованому перервою рядка (CRLF). Наприклад:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLFОстанній запис у файлі може мати або не мати розриву закінчення рядка. Наприклад:
aaa,bbb,ccc CRLF zzz,yyy,xxx
(Правило 3. у цьому виклику не застосовується)
У межах кожного запису може бути одне або кілька полів, розділених комами. Пробіли вважаються частиною поля і їх не слід ігнорувати.
Кожне поле може бути або не може бути укладено у подвійні лапки. Якщо поля не укладені подвійними лапками, то подвійні лапки можуть не з’являтися всередині полів. Наприклад:
"aaa","bbb","ccc" CRLF zzz,yyy,xxxПоля, що містять розриви рядків (CRLF), подвійні лапки та коми повинні бути укладені у подвійні лапки. Наприклад:
"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxxЯкщо для закриття полів використовуються подвійні лапки, то подвійну цитату, що з’являється всередині поля, необхідно уникнути, передуючи їй ще однією подвійною цитатою. Наприклад:
"aaa","b""bb","ccc"
Приклад
Вхід:
,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b
bb","ccc","fish",""
Слід дати вихід:
2, 3, 3, 5
Ви можете дати вихідні значення будь-яким способом, який вам зручніше.
Бібліотеки
Ви можете використовувати будь-яку бібліотеку, яка вам подобається.
Наразі чудові відповіді, але нам не вистачає відповіді командного рядка / bash, що було б особливо класно.