Представьте себе текстовый файл, где каждая запись 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, который был бы особенно клевым.
R , 40 байт
Попробуйте онлайн!
Согласно документации о
count.fields
, поле с разрывами строк для подсчета поля НСА для исходной линии, поэтому мы отфильтровывать их.источник
JavaScript (ES2018),
4259 байтПоказать фрагмент кода
источник
s
флага на регулярном выражении. Не то, чтобы это имело такое большое значение ;-) И хорошее использование этого, кстати!Желе , 12 байт
Порт Stax ответ рекурсивного - иди кредит!
Попробуйте онлайн!
Как?
Может быть, вы предпочитаете
ṣ”"m2ẎỴċ€”,‘
-Ẏ
это затянуть иċ€
считать запятые в каждом.источник
Python, 63 байта
Возвращает вывод в итерируемом
map
объекте.источник
lambda
функцию, вы можете уменьшить это до 54 байтовWolfram Language (Mathematica) , 30 байтов
Попробуйте онлайн!
источник
Perl 5 .10.0,
5553 байтаПопробуйте онлайн!
Объяснение:
источник
Java 10, 101 байт
Попробуйте онлайн.
Объяснение:
источник
Желе , 17 байт
Попробуйте онлайн!
-1 спасибо Джонатану Аллану . Дух Дух Дух ...
источник