Quais são os metadados "sep =" que você pode adicionar aos CSVs?

24

Ao tentar descobrir como abrir CSVs corretamente no Excel em um PC em espanhol (pertencente a um cliente), encontrei muitas respostas recomendando o uso sep=,na parte superior do arquivo:

Aparentemente, essa abordagem funciona, mas nenhuma dessas respostas fornece mais informações sobre de onde vem essa opção de metadados. Tentei procurar o que significa (e, portanto, encontrei todas essas respostas), mas não consegui obter mais informações, especialmente porque a pontuação é notoriamente difícil de procurar.

Minha principal preocupação é se esse é um recurso específico do Excel . Eu suspeito que seja, mas não encontrei nada definitivo para confirmá-lo.

Algumas questões relacionadas são:

  • Quais caracteres podem ser usados ​​nessa configuração?
  • Quais outras configurações estão disponíveis (por exemplo, caractere de terminação de linha, caractere de citação, etc.).
  • Existem outras ferramentas que suportam oficialmente esse recurso?

Espero que exista uma documentação em algum lugar em que alguém possa me indicar que responda a todas essas perguntas e muito mais; Só não consegui encontrá-lo.

Alguns esclarecimentos:

O sep=não é um parâmetro para um analisador. Ele deve ser colocado dentro do CSV. Exemplo:

sep=|
"LETTER"|"ANIMAL"
"a"|"aardvark"
"b"|"bear"
"c"|"cow"
Burhan Ali
fonte
4
Sim, isso é específico para o Excel .
Raystafarian 21/02
2
Você conseguiu algo sobre isso? Estou perplexo com a mesma pergunta e ainda não encontrei nenhuma especificação da Microsoft que descreva esse recurso. Se esse recurso não foi documentado pela MS, como diabos saiu em primeiro lugar?
Toddlermenot 24/12/2015
@toddlermenot Infelizmente não. Tudo o que recebo são pessoas fazendo afirmações de que é específico do Excel, sem nada para fazer backup dessa afirmação, o que é decepcionante.
Burhan Ali

Respostas:

7

O RFC 4180 é geralmente reconhecido como o padrão para o formato CSV e não menciona nenhum desses recursos.

O modelo W3C para dados tabulares e metadados na Web o menciona como um recurso que não está dentro do seu escopo:

Muitos arquivos "CSV" incorporam metadados, por exemplo, em linhas antes da linha de cabeçalho do documento CSV. Esta especificação não define nenhum formato para incorporar metadados em arquivos CSV, além dos nomes das colunas na linha do cabeçalho.

Portanto, embora eu não tenha encontrado nenhuma prova direta de que esse recurso seja específico do Excel, isso aparentemente ainda é o caso, pois parece não haver um documento de padronização que cubra esse recurso.

Stefan Kögl
fonte
Boa fonte. Uma coisa que devo dizer é que sep = | define o separador para uso no Excel como o caractere de barra vertical ('|'). Não é amplamente utilizado, mas não é exclusivo do Excel. É uma diretiva de separador. As versões internacionais do Excel iirc possuem caracteres diferentes, por exemplo, o idioma europeu em uma máquina executando o Excel usa ponto e vírgula.
usar o seguinte
11
Estou ciente do uso (talvez isso não esteja totalmente claro na minha resposta). Eu estava apenas apontando que parece que o Excel introduziu esse recurso, com base em qualquer tipo de padrão (público).
Stefan Kögl
0

Para contribuir com uma resposta a uma de suas perguntas: "Existem outras ferramentas que suportam oficialmente esse recurso?"

Isso não é suportado pelo Apple Numbers (eu testei usando o Numbers versão 3.6.2).

Também não é suportado pelo csv2json ( https://www.npmjs.com/package/csv2json ) nem pelo csvtojson ( https://www.npmjs.com/package/csvtojson ).

Kintel
fonte
-1

A instrução sep = é usada em todos os países onde a vírgula é usada como delimitador decimal, como a Itália. Como o Excel exporta CSV usando ponto-e-vírgula em vez de vírgulas nesses países, se você quiser ter certeza de que o arquivo pode ser lido nos EUA ou em outros países, PRECISA

sep =;

em cima do arquivo. Isso é específico do Excel e pode ser ignorado por outros aplicativos.

Dario de Judicibus
fonte
-2

Praticamente qualquer ferramenta que possa importar arquivos .csv reconhece que a vírgula não é o único separador possível; as guias são comuns há muito tempo, por exemplo. Eu acho que isso remonta aos dias dos cartões perfurados, que é necessário que haja algum caractere reconhecido como final do campo de dados - com exceção dos sistemas que usam campos de largura fixa ou campos prefixados de comprimento, praticamente todos os sistemas precisam disso desde o advento dos computadores.

Os três itens essenciais são um separador de campos, um separador de registros e um marcador de fim de dados. O csv, por padrão, usa vírgula, nova linha e final de arquivo para eles, respectivamente, mas praticamente qualquer entrada válida pode ser usada; no entanto, você precisa de um mecanismo para escapar dos marcadores especiais se eles ocorrerem nos seus dados válidos.

Um sistema histórico que encontrei usava nova linha para final de campo, 2 linhas em branco para final de registro e *!*!* END *!*!*para o final dos dados. Geralmente, me deparei com todos os ,\t|:usados ​​como separador de campos, além de vários caracteres de controle.

Uma coisa a ser cautelosa é que os franceses e outros usam vírgula como ponto decimal - isso pode causar todo tipo de diversão e jogos. Há um grau de padronização para arquivos csv no rfc4180, mas há momentos em que você precisa editar manualmente os arquivos ao exportar de um programa e importar para outro.

Para responder à segunda parte da sua pergunta, o Python, por exemplo, inclui um leitor / gravador csv como uma das bibliotecas padrão que oferece as seguintes opções:

  • delimiter- Este é o separador de campos (a menos que tenha escapado).
  • doublequote- Se verdadeiro, um " dentro de um campo será representado como""
  • escapechar- remove qualquer significado especial de qualquer caractere a seguir, por exemplo, se estiver definido como \, as aspas podem ser representadas como\"
  • lineterminator- normalmente um dos \n, \r, \r\nou\n\r
  • quotechar- caractere usado para citar strings, geralmente "ou'
  • quoting - sinalizar como um dos seguintes:
    • ALL - Cada campo está entre aspas, ou seja: "1","Free Beer","ASAP"
    • MINIMAL - Apenas cite campos com caracteres especiais, ou seja: 1,"Beer, (Free)", Now, Please
    • QUOTE_NONNUMERIC - Cite qualquer coisa que não seja um número, ou seja: 1,"Beer, (Free)", "Now", "Please"
    • NONE - Não cite escape, ou seja: 1,Beer\, (Free), Now, Please
  • skipinitialspace- pule qualquer espaço à esquerda de cada campo para poder usá-lo , e não apenas ,como um separador de campos.

Geralmente, a ferramenta mais flexível e bem pensada que pode importar arquivos csv é a mais dessas opções (possivelmente com nomes e / ou mecanismos diferentes) que ela terá.

Steve Barnes
fonte
2
Isso não responde à minha pergunta. Explica o que são CSVs, dos quais eu já estou ciente. Minha pergunta é sobre uma parte específica da sintaxe. Existe algum plano de fundo que eu possa adicionar à minha pergunta para esclarecer as coisas?
precisa
11
Obrigado, mas isso ainda não ajuda. sep=não é um parâmetro para um analisador. Eu adicionei alguns esclarecimentos à minha pergunta.
precisa
11
@SteveBarnes Mas alguma ferramenta, por exemplo, a biblioteca Python mencionada, permite opções como parte do conteúdo do arquivo? Acho que esse é o ponto principal da questão.
precisa
11
"Porque eles são uma das muitas esquisitices excelentes." É mesmo? Isso faz parte do que estou tentando descobrir. Não quero saber o que é um CSV. Não quero saber como analisar um CSV. Eu quero saber o que sep=é e de onde vem.
precisa
11
sep = é um método de dica específico do Microsoft Excel que não é coberto por nenhuma especificação que não seja da Microsoft que eu possa encontrar. Vem de uma parte da Microsoft.
Steve Barnes