Mis datos csv se ven así:
encabezado1, encabezado2, encabezado3, encabezado4, encabezado5, valor1_1, valor2_1, valor3_1, valor4_1, valor5_1, valor1_2, valor2_2, valor3_2, valor4_2, valor5_2 ...
¿Cómo lee estos datos y los convierte a una 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] ...
¡Probé este código pero no tuve suerte !:
<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
fuente
fuente
file://...
se permita el uso deXMLHttpRequest
.Respuestas:
NOTA: inventé esta solución antes de recordar todos los "casos especiales" que pueden ocurrir en un archivo CSV válido, como las comillas escapadas. Dejo mi respuesta para aquellos que quieren algo rápido y sucio, pero recomiendo la respuesta de Evan para mayor precisión.
Este código funcionará cuando su
data.txt
archivo sea una larga cadena de entradas separadas por comas, sin nuevas líneas:data.txt:
javascript:
El siguiente código funcionará en un archivo CSV "verdadero" con saltos de línea entre cada conjunto de registros:
data.txt:
javascript:
http://jsfiddle.net/mblase75/dcqxr/
fuente
allText.split(/\r\n|\n/)
divide. Si todos sus datos son, de hecho, una larga cadena de datos separados por comas sin líneas nuevas, no es un archivo CSV real.1, "IETF allows ""quotes"", commas and \nline breaks"
que está permitido ya que la cadena está entre comillas dobles y las comillas dobles se escapan.var allTextLines = allText.split("\r");
Después de eso, ¡funcionó muy bien! ¡Gracias!No es necesario que escribas el tuyo ...
La biblioteca jQuery-CSV tiene una función llamada
$.csv.toObjects(csv)
que realiza la asignación automáticamente.Nota: La biblioteca está diseñada para manejar cualquier dato CSV que cumpla con RFC 4180 , incluidos todos los casos extremos desagradables que la mayoría de las soluciones 'simples' pasan por alto.
Como ya dijo @Blazemonger, primero debe agregar saltos de línea para que los datos sean CSV válidos.
Usando el siguiente conjunto de datos:
Usa el código:
La salida guardada en 'datos' será:
Nota: Técnicamente, la forma en que escribió la asignación de clave-valor es JavaScript no válido. Los objetos que contienen los pares clave-valor deben estar entre paréntesis.
Si desea probarlo usted mismo, le sugiero que eche un vistazo a la Demostración de uso básico en la pestaña 'toObjects ()'.
Descargo de responsabilidad: soy el autor original de jQuery-CSV.
Actualizar:
Editado para usar el conjunto de datos que el operador proporcionó e incluyó un enlace a la demostración donde se puede probar la validez de los datos.
Actualización2:
Debido al cierre de Google Code. jquery-csv se mudó a GitHub
fuente
csv
pasado es una cadena csv: lea el archivo csv como texto para obtener la cadena csv.No se divida en comas: no funcionará para la mayoría de los archivos CSV, y esta pregunta tiene demasiadas vistas para que el tipo de datos de entrada del solicitante se aplique a todos. Analizar CSV es un poco aterrador ya que no existe un estándar realmente oficial, y muchos escritores de texto delimitados no consideran casos extremos.
Esta pregunta es antigua, pero creo que hay una mejor solución ahora que Papa Parse está disponible. Es una biblioteca que escribí, con ayuda de colaboradores, que analiza el texto o los archivos CSV. Es la única biblioteca JS que conozco que admite archivos de gigabytes de tamaño. También maneja la entrada malformada con gracia.
Archivo de 1 GB analizado en 1 minuto:
( Actualización: con Papa Parse 4, el mismo archivo tomó solo unos 30 segundos en Firefox. Papa Parse 4 es ahora el analizador CSV más rápido conocido para el navegador).
Analizar texto es muy fácil:
Analizar archivos también es fácil:
La transmisión de archivos es similar (aquí hay un ejemplo que transmite un archivo remoto):
Si su página web se bloquea durante el análisis, Papa puede usar trabajadores web para mantener su sitio web reactivo.
Papa puede detectar automáticamente delimitadores y unir valores con columnas de encabezado, si hay una fila de encabezado. También puede convertir valores numéricos en tipos de números reales. Analiza adecuadamente los saltos de línea y las comillas y otras situaciones extrañas, e incluso maneja la entrada con formato incorrecto de la manera más sólida posible. Me inspiré en las bibliotecas existentes para hacer Papa, por lo que es compatible con otras implementaciones de JS.
fuente
Estoy usando d3.js para analizar el archivo csv. Muy facil de usar. Aquí están los documentos .
Pasos:
Usando Es6;
Por favor, vea los documentos para más.
Actualización: la solicitud d3 está en desuso. puedes usar d3-fetch
fuente
Puedes usar PapaParse para ayudar. https://www.papaparse.com/
Aquí hay un CodePen. https://codepen.io/sandro-wiggers/pen/VxrxNJ
fuente
Aquí hay una función de JavaScript que analiza los datos CSV, que representan las comas que se encuentran dentro de las comillas.
Ejemplo de uso de la función para analizar un archivo CSV que se ve así:
en matrices:
Así es como puede transformar los datos en objetos, como el analizador csv de D3 (que es una solución sólida de terceros):
Aquí hay un violín funcional de este código .
¡Disfrutar! - Curran
fuente
Aquí hay otra forma de leer un CSV externo en Javascript (usando jQuery).
Es un poco más largo, pero creo que al leer los datos en matrices puede seguir exactamente el proceso y facilita la resolución de problemas.
Podría ayudar a alguien más.
El ejemplo del archivo de datos:
Y aquí está el código:
¡Espero que esto ayude a alguien en el futuro!
fuente
)
señal en la línea 45, así que la agregué, pero ahora en la línea 9 me está dando un error de consolaUncaught ReferenceError: $ is not defined at index.html:9
¿Podría ayudarme en esto?Me gusta que la expresión regular haga todo lo posible. Esta expresión regular trata todos los elementos como entre comillas o sin comillas, seguidos por un delimitador de columna o un delimitador de fila. O al final del texto.
Es por eso que la última condición, sin ella, sería un bucle infinito ya que el patrón puede coincidir con un campo de longitud cero (totalmente válido en csv). Pero como $ es una afirmación de longitud cero, no progresará a una no coincidencia y finalizará el ciclo.
Y para su información, tuve que hacer que la segunda alternativa excluya las comillas que rodean el valor; parece que se estaba ejecutando antes de la primera alternativa en mi motor javascript y considerando las comillas como parte del valor sin comillas. No preguntaré, solo lo hice funcionar.
fuente
Por la respuesta aceptada ,
Obtuve esto para trabajar cambiando el 1 a 0 aquí:
cambiado a
Calculará un archivo con una línea continua que tiene una longitud allTextLines.length de 1. Entonces, si el ciclo comienza en 1 y se ejecuta siempre que sea menor que 1, nunca se ejecuta. De ahí el cuadro de alerta en blanco.
fuente
Si desea resolver esto sin usar Ajax , use la
FileReader()
API web .Implementación de ejemplo:
.csv
archivofuente
fuente
En realidad, puede usar una biblioteca ligera llamada cualquier texto .
o use async-await:
fuente