Ich importiere eine CSV-Datei in eine MySQL-Datenbank. Um die CSV zu analysieren, verwende ich fgetcsv()
. Die CSV enthält "characeters, die nicht entgangen sein, und die Ursachen und error array_combine(): Both parameters should have an equal number of elements
Parsen unescaped doppelte Anführungszeichen mit fgetcsv
Die CSV-Daten in diesem Format:
"GR109 "," ",0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0," ","GRANT ","M ","W",0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0.0,0.0," ",0,0,0.0," "," "," ",2.42,0.0,0.0,0.0,0.0," "," "," "," "," "," ",0.0,0.0,0.0,0.0,0.0," "," "," "," ","SELF COL ","16 P PR. "," ","PLAIN "," ","R/E1ROW "," "," "," "," "," "," "," ","R/E1ROW ","BEADED "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ","GRANT ","GRANT "," "," "," "," ",0.0," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ","VAMP LNG - BLK. CARAVELLE P/S. QTR. LNG./ TNG.LINING - BLK. TORINO. (GREY ""TORINO"" FOR LIZARD.)","GR109 COMPLETE"
Mein Code:
function csv_to_array($filename='', $delimiter=',', $enclosure='"', $escapestring='"')
{
if(!file_exists($filename) || !is_readable($filename))
return FALSE;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter, $enclosure, $escapestring)) !== FALSE)
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
return $data;
}
I hinzugefügt $escapestring='"'
, aber das hat nicht geholfen .. Ist der Fehler von "" TORINO "" wo das "Zeichen nicht entkommen ist? Wenn ja, gibt es einen Weg, mit diesen Feldern umzugehen?
Es aussehen, als ob "" (2 doppelte Anführungszeichen) sind als Anführungszeichen zu analysieren. Das heißt, du könntest sie einfach ersetzen/herausfiltern und du solltest gut gehen. –
Sie müssen nicht die '$ vestringstrings 'übergeben, da das doppelte Anführungszeichen bereits durch doppelte Anführungszeichen entfernt wurde.Sie können dies sehen, indem Sie einfach einen fgetcsv in der einzelnen Zeile ausführen, die Sie gepostet haben, und Sie erhalten das richtige Array. Können Sie eine minimale CSV-Datei posten, die zum Fehler einschließlich der Kopfzeile führt? –
Könnten Sie mehr von CSV-Datei zur Verfügung stellen? Vor allem Header. Doppelte Einträge im Header (leere Strings, Zahlen) könnten Dinge durcheinander bringen. – Deus777