Meus dados csv são assim:
título1, título2, título3, título4, título5, valor1_1, valor2_1, valor3_1, valor4_1, valor5_1, valor1_2, valor2_2, valor3_2, valor4_2, valor5_2 ....
Como você lê esses dados e converte para uma matriz como esta usando Javascript ?:
[título1: valor1_1, título2: valor2_1, título3: valor3_1, título4: valor4_1, título5: valor5_1], [título1: valor1_2, título2: valor2_2, título3: valor3_2, título4: valor4_2, título5: valor5_2] ....
Eu tentei esse código, mas sem sorte !:
<script type="text/javascript">
var allText =[];
var allTextLines = [];
var Lines = [];
var txtFile = new XMLHttpRequest();
txtFile.open("GET", "file://d:/data.txt", true);
txtFile.onreadystatechange = function()
{
allText = txtFile.responseText;
allTextLines = allText.split(/\r\n|\n/);
};
document.write(allTextLines);<br>
document.write(allText);<br>
document.write(txtFile);<br>
</script>
javascript
jquery
Mahesh Thumar
fonte
fonte
file://...
é permitidoXMLHttpRequest
.Respostas:
NOTA: Eu inventei essa solução antes de me lembrar de todos os "casos especiais" que podem ocorrer em um arquivo CSV válido, como aspas de escape. Estou deixando minha resposta para quem quer algo rápido e sujo, mas recomendo a resposta de Evan para precisão.
Esse código funcionará quando o
data.txt
arquivo for uma sequência longa de entradas separadas por vírgula, sem novas linhas:data.txt:
javascript:
O código a seguir funcionará em um arquivo CSV "verdadeiro" com quebras de linha entre cada conjunto de registros:
data.txt:
javascript:
http://jsfiddle.net/mblase75/dcqxr/
fonte
allText.split(/\r\n|\n/)
divide. Se todos os seus dados são de fato uma longa sequência de dados separados por vírgula sem novas linhas, não é um arquivo CSV real.1, "IETF allows ""quotes"", commas and \nline breaks"
que é permitido, já que a string é cercada por aspas duplas e as aspas duplas são escapadas.var allTextLines = allText.split("\r");
. Obrigado!Não há necessidade de escrever o seu próprio ...
A biblioteca jQuery-CSV possui uma função chamada
$.csv.toObjects(csv)
que faz o mapeamento automaticamente.Nota: A biblioteca foi projetada para lidar com todos os dados CSV compatíveis com RFC 4180 , incluindo todos os casos extremos desagradáveis que a maioria das soluções "simples" ignora.
Como o @Blazemonger já afirmou, primeiro você precisa adicionar quebras de linha para tornar os dados válidos em CSV.
Usando o seguinte conjunto de dados:
Use o código:
A saída salva em 'dados' será:
Nota: Tecnicamente, a maneira como você escreveu o mapeamento de valores-chave é JavaScript inválido. Os objetos que contêm os pares de valores-chave devem ser colocados entre colchetes.
Se você quiser experimentar por si mesmo, sugiro que você dê uma olhada na Demonstração básica de uso na guia 'toObjects ()'.
Disclaimer: Eu sou o autor original do jQuery-CSV.
Atualizar:
Editado para usar o conjunto de dados que a operação forneceu e incluiu um link para a demonstração em que os dados podem ser testados quanto à validade.
Update2:
Devido à interrupção do Google Code. jquery-csv mudou-se para o GitHub
fonte
csv
passado é uma string csv - leia o arquivo csv como texto para obter a string csv.Não divida em vírgulas - ele não funcionará para a maioria dos arquivos CSV, e essa pergunta tem muitas visualizações para que o tipo de dado de entrada do solicitante seja aplicado a todos. A análise de CSV é meio assustadora, pois não existe um padrão verdadeiramente oficial e muitos redatores de texto delimitados não consideram casos extremos.
Essa pergunta é antiga, mas acredito que há uma solução melhor agora que o Papa Parse está disponível. É uma biblioteca que escrevi, com a ajuda de colaboradores, que analisa texto ou arquivos CSV. É a única biblioteca JS que conheço que suporta arquivos em tamanho de gigabytes. Ele também lida com entrada malformada normalmente.
Arquivo de 1 GB analisado em 1 minuto:
( Atualização: com o Papa Parse 4, o mesmo arquivo levou apenas 30 segundos no Firefox. O Papa Parse 4 agora é o analisador CSV mais rápido conhecido para o navegador.)
A análise de texto é muito fácil:
A análise de arquivos também é fácil:
O streaming de arquivos é semelhante (veja um exemplo que transmite um arquivo remoto):
Se sua página da web trava durante a análise, o Papa pode usar profissionais da web para manter seu site reativo.
O Papa pode detectar automaticamente delimitadores e combinar valores com colunas de cabeçalho, se uma linha de cabeçalho estiver presente. Também pode transformar valores numéricos em tipos de números reais. Ele analisa adequadamente quebras de linha, aspas e outras situações estranhas e até lida com entradas malformadas da maneira mais robusta possível. Eu me inspirei nas bibliotecas existentes para criar o Papa, então adoro outras implementações de JS.
fonte
Estou usando o d3.js para analisar o arquivo csv. Muito fácil de usar. Aqui estão os documentos .
Passos:
Usando Es6;
Consulte os documentos para obter mais informações.
Atualização - a solicitação d3 está obsoleta. você pode usar d3-fetch
fonte
Você pode usar o PapaParse para ajudar. https://www.papaparse.com/
Aqui está um CodePen. https://codepen.io/sandro-wiggers/pen/VxrxNJ
fonte
Aqui está uma função JavaScript que analisa dados CSV, contabilizando vírgulas encontradas entre aspas.
Exemplo de uso da função para analisar um arquivo CSV parecido com este:
em matrizes:
Veja como você pode transformar os dados em objetos, como o analisador csv do D3 (que é uma solução sólida de terceiros):
Aqui está um violino funcional desse código .
Aproveitar! - Curran
fonte
Aqui está outra maneira de ler um CSV externo em Javascript (usando jQuery).
É um pouco mais demorado, mas, ao ler os dados em matrizes, você pode seguir exatamente o processo e facilitar a solução de problemas.
Pode ajudar alguém.
O exemplo do arquivo de dados:
E aqui está o código:
Espero que isso ajude alguém no futuro!
fonte
)
sinal na linha 45, então a adicionei, mas agora na linha 9 está me dando um erro no console.Uncaught ReferenceError: $ is not defined at index.html:9
Você poderia ajudar nisso?Eu gosto de ter o regex fazer o máximo possível. Essa regex trata todos os itens como entre aspas ou não, seguidos por um delimitador de coluna ou delimitador de linha. Ou o fim do texto.
É por isso que essa última condição - sem ela, seria um loop infinito, pois o padrão pode corresponder a um campo de comprimento zero (totalmente válido em csv). Mas como $ é uma afirmação de comprimento zero, ele não progride para uma não correspondência e termina o loop.
E, para sua informação, eu tive que fazer a segunda alternativa excluir aspas em torno do valor; parece que estava sendo executado antes da primeira alternativa no meu mecanismo javascript e considerando as aspas como parte do valor não citado. Não vou perguntar - apenas fiz funcionar.
fonte
Pela resposta aceita ,
Eu consegui isso, alterando o 1 para 0 aqui:
alterado para
Ele calculará o arquivo com uma linha contínua como tendo um allTextLines.length de 1. Portanto, se o loop iniciar em 1 e executar enquanto for menor que 1, ele nunca será executado. Daí a caixa de alerta em branco.
fonte
Se você deseja resolver isso sem usar o Ajax , use a
FileReader()
API da Web .Exemplo de implementação:
.csv
arquivofonte
fonte