Por que continuamos usando CSV? [fechadas]

13

Por que continuamos usando CSV?

Recentemente, mudei para o trabalho no domínio da saúde e, apesar do maravilhoso trabalho nos padrões de transferência de dados, toda a transferência de dados é em CSV , tanto para relatórios para organizações externas quanto para migrações de dados ao implementar novos sistemas.

Infelizmente, o uso de CSV é a causa da repetição sem fim dos mesmos erros estúpidos, com o mesmo desperdício de tempo do desenvolvedor. (escape ruim, falha ao manipular campos nulos etc.)

Eu sei que podemos fazer melhor, e qualquer coisa entre JSON e XML (dependendo da instância) ficaria bem. (Na maioria das vezes, são dados passando de um MS SQLserver 2005 para outro!)

Sinto como se cada vez que vejo isso acontecendo, estou literalmente assistindo a um desenvolvedor desperdiçar mais tempo.

Então, por que continuamos nos moldando? Quando vamos parar?

Stephen
fonte
20
Se você está apenas entrando no domínio da saúde e acha que o CSV é ruim ... espere até encontrar o HL7!
G__
3
@ Greg LOL, não assustá-lo, a surpresa é sempre melhor :)
James Love
47
-1 Este é um discurso anti-CSV contra problemas não causados ​​por CSV. O que exatamente você acha que aconteceria se você lesse e escrevesse XML sem uma biblioteca? Seus problemas seriam cem vezes piores.
precisa
12
"Então, por que continuamos nos trocando? Quando vamos parar?" Não sei, onde trabalho, conseguimos usar o CSV muito bem sem que ninguém se deixe enganar (de fato - é o estágio XML que é muito mais frustrante). Talvez você e seus colegas de trabalho estejam fazendo algo errado?
FrustratedWithFormsDesigner
3
Até o momento, toda a discussão perde um problema muito real com CSV: o caracter delimitador provavelmente aparece nos dados e o CSV adota uma abordagem menos do que ótima para esse problema (colocar aspas nos dados apenas empurra o problema para baixo) . Uma abordagem melhor seria usar arquivos delimitados por canal.
Larry Coleman

Respostas:

10

No seu caso, parece que o CSV não é um bom ajuste devido à falta de especificação rígida.

Para dados não triviais, não é a escolha certa.

Por que / quando o CSV é uma boa escolha? Provavelmente muitas instâncias para mencionar, os benefícios da simplicidade para dados simples são óbvios. Desde que os dados sejam higienizados / escapados corretamente, não há problemas. De um modo geral, todos esses casos seriam simples / triviais. Obviamente, o delimitador padrão que aparece no conteúdo costuma ser um problema ao lidar com CSV.

Mas se você está fazendo algo mais envolvido do que conseguir que um cliente não técnico envie dados de uma planilha do Excel ou de algum outro caso de uso semelhante, o CSV provavelmente é insuficiente para qualquer uso sério.

XML é um ajuste muito melhor (sim, ainda mais que JSON), pois você é capaz de fazer especificações de esquema padronizadas detalhadas para ele. (Sem mencionar que as especificações / esquemas desfrutam da flexibilidade de vários estilos de implementação, XSD, DTD e Relax NG)

Para sistemas de circuito fechado, especialmente onde a largura de banda é uma preocupação, o JSON pode ser mais adequado que o XML, mas a falta de linguagem (s) de especificação de esquema geralmente a impede de aplicativos de nível corporativo.

ocodo
fonte
3
De fato "Desde que os dados sejam higienizados / escapados adequadamente". No entanto, para muitos programadores, de alguma maneira, parece que são capazes de entender isso errado, escrevendo os seus próprios (em pseudo-código write('"');write(fld1);write('"');ad nauseum.) Então eles sentem falta de colocar aspas em torno de algo. Então eles escrevem seu próprio analisador ....
Gerry
3
Sim, a tripulação do grupo deve começar a usar essa coisa da Internet , talvez até aprender o significado da palavra ... Biblioteca.
ocodo 15/02
partilhando informação! código reutilizável! idéias estúpidas e novas. Repetir erros de outras pessoas foi bom o suficiente para o meu bisavô ^ 50, e é bom o suficiente para mim!
Steve314
@ Steve314 - / me "faz cara de horror e diversão".
Ocodo 15/02
Mas o CSV tem uma especificação difícil . Nosso problema agora é o habitual - o Excel não está em conformidade 100%.
Gbjbaanb
63

Deixe-me jogar alguns pontos a favor do CSV:

  • O CSV é simples (r do que qualquer alternativa sugerida no OP) para implementar e analisar
  • O CSV é entendido por quase todos os softwares do planeta (passado e presente)
  • O CSV força um esquema bastante plano e simples (há uma única lista plana de campos)
  • O CSV é mais legível por humanos que XML, JSON ou (UGH!) HL7 (V2.x, pré-xml)
G__
fonte
14
Você não precisa fazer o papel de "advogado do diabo" ... todos esses argumentos são válidos e explicam por que o CSV ainda é usado. É simplesmente mais simples.
GrandmasterB
7
@ Stephen: Quantas variações diferentes de CSV você conhece?
FrustratedWithFormsDesigner
3
@FrustratedWithFormsDesigner Em quantas convenções de fuga você consegue pensar?
Stephen
3
@ Pierre 303 Eu gostaria que fosse à prova de idiotas. Eu ficaria feliz se fosse à prova de desenvolvedor.
Stephen
8
@ Pierre303, prova idiota ... Se você acha que já 'prova' alguma coisa, não a testou com idiotas suficientes.
Ocodo 15/02
29

Compatibilidade com versões anteriores. Se o serviço da web de organizações externas manipular CSV e todas as suas ferramentas existentes manipularem CSV, nenhuma das partes terá motivação para migrar para um novo serviço. Por que sua organização externa começou a oferecer suporte a um formato diferente? Ninguém com quem trabalham pode usá-lo! Por que você começaria a produzir um formato diferente? Nenhuma das organizações com as quais você trabalha aceita!

O verdadeiro problema que vejo aqui é: por que seus desenvolvedores lançam seu próprio código CSV toda vez? Se eles usassem uma biblioteca CSV estável e sólida, eles não teriam os problemas que você descreve. Os problemas são causados ​​pelos desenvolvedores lançando sua própria solução em vez de usar uma biblioteca, e sinceramente não vejo como a migração para JSON ou XML corrige isso de maneira mágica. Você ainda teria pessoas tentando aumentá-las em vez de usar uma biblioteca.

Anon.
fonte
4
+1 para rodar sozinho sempre. Vejo desenvolvedores que não aprendem, não um formato de dados defeituoso. :-)
G__ 14/02
'compatibilidade com versões anteriores' - você está certo, é claro - mas não avançar está custando milhares.
Stephen
É bom rolar sua própria biblioteca CSV ... basta reutilizá- la!
GrandmasterB
5
@ Stephen: Não, reimplementar o CSV toda vez que você precisar está custando milhares. Como o formato CSV é bom, os desenvolvedores que não conseguem acertar são o problema.
Anon.
6
@ Stephen: Então, seu problema com o CSV é que é muito simples e você quer algo mais complexo?
Anon.
15

O CSV é um pouco mais rápido , menor em tamanho , muito fácil de manusear (mesmo no Excel) e muitos aplicativos existentes entendem, é um padrão amplamente usado .

Ainda é a primeira escolha em muitas situações.

Eu pessoalmente ainda gosto muito desse formato. Mas também uso o JSON, mas para outros aplicativos como a interface do usuário da web.


fonte
1
Eu concordo com tudo isso, exceto o uso inicial de "um pouco".
Orbling
3
Pode ser uma base absoluta com o Excel se você tiver dados que precisam reter zeros à esquerda .... pergunte-me como eu sei! ... além disso, o Excel fornece uma boa interface.
Dal
@ Dal: Eu trabalhava em uma cooperativa de crédito e tinha que lidar com arquivos CSV que continham números de cartão de crédito. Quais têm 16 dígitos. O Excel foi arredondado para 15. #
dan04 15/02/11
Ou pior, que os converteu em notação científica. :( Lembro-me da primeira vez em que recebi um erro no processamento do ACH que um número de conta remota era inválido, apenas para descobrir que alguém havia editado o csv no excel (apenas para remover uma linha) e que havia mudado um monte de 30 números de conta de dois dígitos em 2.3456356e29 e tal #
cabbey 15/02
1
@ Jeanne: Se o CSV realmente tivesse uma distinção de número / string como o JSON, seria muito fácil dizer ao Excel qual o tipo de valores. Esses problemas devem-se muito ao fato de o CSV ter sido digitado estritamente.
dan04 27/02
15

Primeiro e acima de tudo, porque apesar de consumir dados CSV pode ser (um pouco) não trivial, gerá-los é extremamente fácil.

Eu também apontaria que nem JSON nem XML são realmente mais fáceis de acertar (tanto para o produtor quanto para o consumidor). De fato, mal é preciso olhar em volta para saber que muitas pessoas tentam usar expressões regulares para analisar dados XML, mesmo que não haja dúvida de que isso não pode e não funcionará.

A maioria dos problemas que podem (e ocorrem) com o CSV também pode (e ocorre) com JSON e XML. O XML, em particular, adiciona muitos outros problemas em potencial. Uma biblioteca para analisar dados XML geralmente é maior, mais lenta e mais difícil de usar do que uma biblioteca semelhante para dados CSV.

Jerry Coffin
fonte
1
parecer produzi-lo corretamente é extremamente fácil, consumir algo que carece de uma especificação não é trivial quando você possui dados não triviais.
14111 Stephen
2
@ Stephen: note que eu não incluí "corretamente" nessa primeira frase. Sua omissão foi intencional!
Jerry Coffin
4

Primeiro, concordo que há alguns problemas reais com o formato:

  • É digitado rigorosamente.
    • Sem fazer distinção entre valores numéricos e de texto, o Excel irá adivinhar errado e estragar seus códigos postais e números de cartão de crédito.
    • Não há uma maneira padrão de representar dados binários.
    • Não há uma maneira padrão de distinguir entre NULLe '', o que é um problema ao importar arquivos CSV para bancos de dados SQL.
  • Suporte deficiente para "caracteres especiais".
    • A falta de referências de caracteres numéricos como (XML &#xNNNN;ou JSON \uNNNN) significa que não há uma maneira padrão de representar caracteres de controle ou caracteres não ASCII.
    • Muitas implementações não implementam corretamente quebras de linha em um campo.
  • A falta de um padrão. Existe o RFC 4180 , mas não é seguido universalmente.

Mas por outro lado:

  • As alternativas são piores. JSON e XML, projetados em torno de árvores, são pouco adequados para dados baseados em tabela, especificamente em termos de ...
  • COMPACIDADE! No XML, você precisa ter uma marca de início e uma marca de fim para cada coluna em cada linha. No CSV, você escreve apenas os cabeçalhos das colunas uma vez.
  • CSV é muito fácil de gerar.
  • Não programadores podem abrir arquivos CSV no Excel.
dan04
fonte
ao contrário; usar esses dados no excel seria uma ofensa sackable, o CSV é fácil de gerar mal, a compactação não é um problema, as árvores são mais adequadas para esses dados.
Stephen
4

Como muitos analistas usam o Excel (para tabelas dinâmicas e outras), e é muito mais fácil gerar CSV do que gerar o formato nativo do Excel.

Nota de rodapé: dados os problemas que eu já vi no Excel de lidar com arquivos CSV, como remover zeros à esquerda e perder precisão, essa provavelmente é uma falsa sensação de ser mais fácil.

Scott McIntyre
fonte
Este +1000. O Excel é o aplicativo matador (quando você o conhece) para análise rápida e suja de dados. A capacidade de exportar para o Excel dá grandes poderes a não desenvolvedores em negócios, pesquisa etc. O Excel é o mundo. As exportações de CSV executam o Excel.
Johannes
2

Se há algo errado com o CSV, é que o CSV parece tão simples que muitos desenvolvedores tentam inventar seus próprios analisadores / gravadores e depois culpam o CSV por não lidar com a fuga corretamente. Com um bom analisador de CSV (muitos bons por aí), não haverá nenhum problema.

Alguém mencionou que o CSV não é bom para dados não triviais, mas não concordo. O XML permite dados não triviais, porque diferentes conjuntos de dados podem ser colocados em diferentes tags "container". Com o CSV, você sempre pode colocar dados diferentes em arquivos diferentes para obter o mesmo efeito.

Além disso, na minha opinião, o uso de XML para transferência de dados contraria fundamentalmente o objetivo do XML - a transferência de dados geralmente implica um contrato estável entre fornecedores e consumidores, enquanto o XML visa transportar informações expansíveis sujeitas a interpretação quando consumidas.

Codism
fonte
1

Eu acho que o CSV é bom quando você tem apenas dados de texto simples, com apenas vírgulas e ponto-e-vírgula / linha final no final.

Dados arquitetados em árvore ou dados compostos dificilmente podem ser usados ​​com CSV.

CSV é apenas uma matriz 2D simples de texto como no Excel, nada muito ...

jokoon
fonte
1

É realmente tudo sobre mainframes e excel aqui.

Mainframes porque esses sistemas antigos descobriram como se comunicar usando CSV. Portanto, os grandes aplicativos que despejam os dados podem lê-los e gravá-los e não têm motivos para mudar agora.

Excel porque ele pode abrir CSVs diretamente. De fato, ele assume a extensão .csv quando você a instala. Os usuários apenas clicam no ícone do excel, que parece um pouco engraçado, e ele abre e cria uma grade agradável com a qual eles podem se familiarizar.

Agora, as versões modernas do excel são capazes de ler, digamos, XML diretamente. Mas, para fazer isso, o usuário precisa entender um pouco mais do que "clicar duas vezes nessa imagem". E clicar duas vezes na imagem certa pode ser pedir demais em alguns setores. . .

Wyatt Barnett
fonte
-1

Eu já vi muitas respostas técnicas, mas desconfio que o motivo pelo qual as pessoas usam o CSV é o mesmo porque as pessoas usam muitas outras técnicas / tecnologias: porque é a que elas estão mais familiarizadas

Homde
fonte
-1

por que eu uso isso?

  1. o cliente quer
  2. é mais rápido que xml na rede (carga de rede menor)
  3. nada mais complexo é necessário para transmitir os dados
  4. plataforma cruzada
  5. legível por humanos
  6. fácil de implementar leitores e escritores para ele

etc etc.

jwenting
fonte