php - toarrays - parse csv to array javascript
Tratar con comas en CSV (3)
No intentes hacer esto con una expresión regular. Sólo tiene que utilizar str_getcsv()
! El tercer parámetro informa a str_getcsv()
para buscar campos entre comillas.
$subject = ''123,name,456,lryyrt,123213,"first,last",8585,namea3'';
$array = str_getcsv($subject, ",", ''"'');
print_r($array);
// Prints:
Array
(
[0] => 123
[1] => name
[2] => 456
[3] => lryyrt
[4] => 123213
[5] => first,last
[6] => 8585
[7] => namea3
)
Obtengo datos CSV de una llamada SOAP en php. Desafortunadamente, los datos pueden tener comas. Se formatea correctamente como en
1, nombre, 2, lazo, 3, "primero, último", 5, NMEA, ...
Necesito analizarlo a valores individuales en php o javascript. He navegado a través de subprocesos en el desbordamiento de pila y en otros lugares, pero no he encontrado una solución específica en php / javascript.
El enfoque que estoy usando actualmente es
$subject = ''123,name,456,lryyrt,123213,"first,last",8585,namea3'';
$pattern = ''/,|,"/'';
$t2=preg_replace (''/,|(".*")/'',''$0*'',$subject);
$t2=str_replace('','',''*'',$t2);
$t2=str_replace(''*'','','',$t2);
Donde * es el eliminador, pero preg_replace
genera un extra *. He intentado un par de otros enfoques relacionados con preg_match
y otras funciones preg_
, pero no preg_
éxito en tener ningún tipo de división limpia.
¿Alguna sugerencia sobre cómo dividir los datos CSV que contienen comas?
Solo otra forma de convertir un archivo csv a una matriz asociativa.
<?php
//
// Convert csv file to associative array:
//
function csv_to_array($input, $delimiter='','')
{
$header = null;
$data = array();
$csvData = str_getcsv($input, "/n");
foreach($csvData as $csvLine){
if(is_null($header)) $header = explode($delimiter, $csvLine);
else{
$items = explode($delimiter, $csvLine);
for($n = 0, $m = count($header); $n < $m; $n++){
$prepareData[$header[$n]] = $items[$n];
}
$data[] = $prepareData;
}
}
return $data;
}
//-----------------------------------
//
//Usage:
$csvArr = csv_to_array(file_get_contents(''test.csv''));
?>
Para uso de JavaScript jQuery-CSV
Si ya está utilizando jQuery, simplemente agregue el módulo jquery-csv.js para exponer los métodos de extensión. Luego simplemente convierte el CSV directamente a una matriz de JavaScript.
Si solo está analizando, lo siguiente lo convertirá en una matriz unidimensional:
$.csv.toArray(csv);
Si tiene una cadena CSV multilínea, lo siguiente lo convertirá en una matriz bidimensional:
$.csv.toArrays(csv);
Nota: todos los finales de línea diferentes se detectan y dividen correctamente usando una expresión regular inteligente.
El delimitador predeterminado es una comilla doble (") y el separador predeterminado es una coma (,), pero puede cambiar el uso de la configuración personalizada especificándola en la llamada al método.
Ex:
$ .csv.toArray (csv, {separator: '';'', delimitador: "''"});
Creé el proyecto para proporcionar un analizador de CSV de extremo a extremo escrito en JavaScript que elimina las conjeturas de la importación-exportación de CSV.
Hacer el trabajo pesado en el cliente elimina la carga innecesaria en el servidor y elimina los viajes de ida y vuelta de AJAX innecesarios al servidor.
Actualizar:
Si está buscando una solución del lado del servidor, la biblioteca también funciona en Node.js.