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 CRLFO ú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,xxxOs 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,xxxSe 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.