Imagine um arquivo de texto em que cada registro csv possa ter diferentes números de campos. A tarefa é escrever código para gerar quantos campos existem em cada registro do arquivo. Você pode assumir que não há linha de cabeçalho no arquivo e pode ler de um arquivo ou entrada padrão, conforme desejar.
Você pode assumir uma versão do rfc4180 para as regras csv que explicarei abaixo para a definição de cada linha do arquivo. Aqui está uma versão levemente editada da parte relevante da especificação:
Definição do formato CSV
Cada registro está localizado em uma linha separada, delimitada por uma quebra de linha (CRLF). Por exemplo:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
O último registro no arquivo pode ou não ter uma quebra de linha final. Por exemplo:
aaa,bbb,ccc CRLF zzz,yyy,xxx
(A regra 3. não se aplica neste desafio)
Dentro de cada registro, pode haver um ou mais campos, separados por vírgulas. Os espaços são considerados parte de um campo e não devem ser ignorados.
Cada campo pode ou não estar entre aspas duplas. Se os campos não estiverem entre aspas duplas, as aspas duplas podem não aparecer dentro dos campos. Por exemplo:
"aaa","bbb","ccc" CRLF zzz,yyy,xxx
Os campos que contêm quebras de linha (CRLF), aspas duplas e vírgulas devem ser colocados entre aspas duplas. Por exemplo:
"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx
Se aspas duplas forem usadas para delimitar campos, uma aspas dupla aparecendo dentro de um campo deverá ser escapada precedendo-a com outra aspas dupla. Por exemplo:
"aaa","b""bb","ccc"
Exemplo
Entrada:
,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b
bb","ccc","fish",""
Deve dar a saída:
2, 3, 3, 5
Você pode fornecer os valores de saída da maneira que achar mais conveniente.
Bibliotecas
Você pode usar qualquer biblioteca que desejar.
Respostas impressionantes até agora, mas falta uma resposta de linha de comando / bash que seria particularmente interessante.
R , 40 bytes
Experimente online!
De acordo com a documentação de
count.fields
, os campos com quebras de linha obtêm uma contagem de campos de NA para a linha inicial, portanto os filtramos.fonte
JavaScript (ES2018),
4259 bytesMostrar snippet de código
fonte
s
bandeira no regex. Não que isso importe tanto ;-) E bom uso, btw!Gelatina , 12 bytes
Uma resposta Stax recursiva - vá dar crédito!
Experimente online!
Quão?
Talvez você prefira
ṣ”"m2ẎỴċ€”,‘
-Ẏ
é apertar eċ€
conta as vírgulas em cada uma.fonte
Python, 63 bytes
Retorna a saída em um
map
objeto iterável .fonte
lambda
função, você podeWolfram Language (Mathematica) , 30 bytes
Experimente online!
fonte
Perl 5 .10.0,
5553 bytesExperimente online!
Explicação:
fonte
Java 10, 101 bytes
Experimente online.
Explicação:
fonte
Gelatina , 17 bytes
Experimente online!
-1 graças a Jonathan Allan . duh duh duh ...
fonte