Представьте себе текстовый файл, где каждая запись 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, который был бы особенно клевым.