So analysieren Sie eine CSV-Datei mit PHP [duplicate]
Lesezeit: 8 Minuten
Schmied
Angenommen, ich habe eine .csv Datei mit folgendem Inhalt:
"text, with commas","another text",123,"text",5;
"some without commas","another text",123,"text";
"some text with commas or no",,123,"text";
Wie kann ich den Inhalt über PHP parsen?
Sie fragen sich im Grunde, ob es eine bessere OOP-Methode für den Umgang mit CSV-Parsing gibt als den globalen Aktienfunktionsansatz. Ich würde sagen, die Frage umformulieren, da dies nicht wirklich nach einem Problem beim Analysieren einer CSV klingt.
– Schnellschaltung
4. Februar 2012 um 7:33 Uhr
@quickshiftin tut mir leid
– Schmied
4. Februar 2012 um 7:36 Uhr
Es ist in Ordnung, ich sage nur… Wenn du einen Unterricht willst Dieses hier ist in Ordnung (ich habe es in meiner Arbeit ein wenig angepasst, aber ..)
– Schnellschaltung
4. Februar 2012 um 7:43 Uhr
thenetimp
Verwenden Sie einfach die Funktion zum Parsen einer CSV-Datei
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
Es ist zu beachten, dass diese Funktion nicht korrekt mit Anführungszeichen in CSV umgeht. Insbesondere kann es nicht mit diesem Beispiel umgehen, wie es in Wikipedia zu finden ist: en.wikipedia.org/wiki/Comma-separated_values#Example Es gab einen offenen Fehler, aber er wurde als “wird nicht behoben” geschlossen bugs.php.net/bug.php?id=50686
– amenthes
7. September 2015 um 21:30 Uhr
Funktioniert auch nicht korrekt bei Spalten mit Zeilenumbrüchen in ihrem Inhalt
Beachten Sie, dass dies nicht funktioniert, wenn Sie Zeilenumbrüche in den tatsächlichen Werten haben (nicht die Zeilentrennzeichen am Ende jeder CSV-Zeile), da die file Die Funktion wird bei Zeilenumbrüchen geteilt und kennt die Anführungszeichen nicht, die CSV verwendet, um Feldwerte zu enthalten.
– Jordan Lew
13. Januar 2016 um 19:52 Uhr
@JordanLev, was empfiehlst du dann?
– Julix
15. Mai 2017 um 0:39 Uhr
@Julix verwende die akzeptierte Antwort. Diese kürzere Version ist nett, wenn Sie wissen, dass die importierten Daten niemals Zeilenumbrüche innerhalb eines einzelnen Werts haben, aber ansonsten ist die robustere Lösung die zusätzlichen Codezeilen wert.
– Jordan Lew
15. Mai 2017 um 3:57 Uhr
Am Ende habe ich vor dem Speichern in CSV codiert und beim Lesen decodiert – php.net/rawurlencode – das stellt sicher, dass keine Zeilenumbrüche auftreten, oder? – oder gehen sie ganz verloren (kann es Zeilenumbrüche in der URL-Codierung geben?)
– Julix
15. Mai 2017 um 4:24 Uhr
Diese Antwort funktioniert perfekt für neue Zeilen und nutzt die Magie der PHP-Dateifunktion. Danke
– Madhab452
5. August 2017 um 10:00 Uhr
Praktischer Einzeiler zum Parsen einer CSV-Datei in ein Array
$csv = array_map('str_getcsv', file('data.csv'));
Beachten Sie, dass dies nicht funktioniert, wenn Sie Zeilenumbrüche in den tatsächlichen Werten haben (nicht die Zeilentrennzeichen am Ende jeder CSV-Zeile), da die file Die Funktion wird bei Zeilenumbrüchen geteilt und kennt die Anführungszeichen nicht, die CSV verwendet, um Feldwerte zu enthalten.
– Jordan Lew
13. Januar 2016 um 19:51 Uhr
Wie verwende ich verschiedene Trennzeichen? ( ; anstatt , )
– sdd
3. April 2017 um 11:00 Uhr
Verwenden Sie Folgendes, um das Problem mit neuen Zeilen zu beheben: array_map(‘str_getcsv’, file(‘data.csv’ , FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
@Maxim Kovalevsky, wie man Überschrift oder erste Zeile überspringt
– Krishna Jonnalagadda
1. März 2018 um 9:44 Uhr
Quartär
Ich habe gerade eine praktische Möglichkeit entdeckt, während des Parsens einen Index zu erhalten. Mein Verstand war überwältigt.
$handle = fopen("test.csv", "r");
for ($i = 0; $row = fgetcsv($handle ); ++$i) {
// Do something will $row array
}
fclose($handle);
Quelle: Link
Angreifer
ich liebe es
$data = str_getcsv($CsvString, "\n"); //parse the rows
foreach ($data as &$row) {
$row = str_getcsv($row, "; or , or whatever you want"); //parse the items in rows
$this->debug($row);
}
In meinem Fall erhalte ich eine CSV-Datei über Webdienste, sodass ich die Datei auf diese Weise nicht erstellen muss. Wenn Sie jedoch mit einer Datei parsen müssen, müssen Sie sie nur als Zeichenfolge übergeben
Das hat bei mir nicht richtig funktioniert. Zum Beispiel dies: aaa,bbb,"ccc\nddd",eee wurde in zwei Zeilen (statt der gewünschten einen Zeile) statt in eine geparst. Es scheint, dass " wird nicht als Umschließung erkannt, wenn es innerhalb des Feldes erscheint (und nicht an dessen Anfang oder Ende). Damit $data = str_getcsv(..) kann ersetzt werden durch $data = explode(..)was meiner Meinung nach effizienter ist und die Absicht besser vermittelt …
– Oben
22. Mai 2020 um 0:21 Uhr
Ranjul Arumadi
Ich habe dasselbe gesucht, ohne eine nicht unterstützte PHP-Klasse zu verwenden. Excel CSV verwendet nicht immer die Anführungszeichen-Trennzeichen und maskiert die Anführungszeichen mit “”, da der Algorithmus wahrscheinlich in den 80er Jahren oder so erstellt wurde. Nachdem ich mir mehrere .csv-Parser im Kommentarbereich von PHP.NET angesehen habe, habe ich solche gesehen, die sogar Callbacks oder eval’d-Code verwendet haben und entweder nicht wie benötigt funktionierten oder einfach überhaupt nicht funktionierten. Also habe ich meine eigenen Routinen dafür geschrieben und sie funktionieren in der einfachsten PHP-Konfiguration. Die Array-Schlüssel können entweder numerisch sein oder als Felder benannt werden, die in der Kopfzeile angegeben sind. Hoffe das hilft.
…bob kann jetzt zu seinen Tabellenblättern zurückkehren
Das hat bei mir nicht richtig funktioniert. Zum Beispiel dies: aaa,bbb,"ccc\nddd",eee wurde in zwei Zeilen (statt der gewünschten einen Zeile) statt in eine geparst. Es scheint, dass " wird nicht als Umschließung erkannt, wenn es innerhalb des Feldes erscheint (und nicht an dessen Anfang oder Ende). Damit $data = str_getcsv(..) kann ersetzt werden durch $data = explode(..)was meiner Meinung nach effizienter ist und die Absicht besser vermittelt …
– Oben
22. Mai 2020 um 0:21 Uhr
9634100cookie-checkSo analysieren Sie eine CSV-Datei mit PHP [duplicate]yes
Sie fragen sich im Grunde, ob es eine bessere OOP-Methode für den Umgang mit CSV-Parsing gibt als den globalen Aktienfunktionsansatz. Ich würde sagen, die Frage umformulieren, da dies nicht wirklich nach einem Problem beim Analysieren einer CSV klingt.
– Schnellschaltung
4. Februar 2012 um 7:33 Uhr
@quickshiftin tut mir leid
– Schmied
4. Februar 2012 um 7:36 Uhr
Es ist in Ordnung, ich sage nur… Wenn du einen Unterricht willst Dieses hier ist in Ordnung (ich habe es in meiner Arbeit ein wenig angepasst, aber ..)
– Schnellschaltung
4. Februar 2012 um 7:43 Uhr