Gast: Zeilenumbruch innerhalb .csv Feldern

Hallo,

ich möchte eine .csv Datei nach MySQL importieren. Die Feldnamen stimmen nicht, es sind überflüssige Felder vorhanden, also geht das wohl nicht direkt mit phpmyadmin.

Die Feldinhalte sind in " eingeschlossen, können aber selbst " enthalten.

Ich plane, eine Zeile mit PHP explode('","',trim($zeile,'"')) in die Felder zu zerlegen. Problem: Texareas enthalten selbst Zeilenumbrüche, sodass eine Zeile aus der .csv Datei nicht unbedingt bis zum Ende der Daten geht.

Wie löse ich das Problem?

Gast

  1. Tach!

    ich möchte eine .csv Datei nach MySQL importieren. Die Feldnamen stimmen nicht, es sind überflüssige Felder vorhanden, also geht das wohl nicht direkt mit phpmyadmin.

    Mit dem MySQL-CLI-Client lassen sich problemlos Dateien mit unterschiedlicher Feldanzahl pro Zeile. In meinem Fall war aber keine Feldnamenszeile in der Datei und die Anzahl der Felder in der Tabelle war ausreichend.

    Die Feldinhalte sind in " eingeschlossen, können aber selbst " enthalten.

    Dann müssen sie durch Verdopplung maskiert werden.

    Ich plane, eine Zeile mit PHP explode('","',trim($zeile,'"')) in die Felder zu zerlegen. Problem: Texareas enthalten selbst Zeilenumbrüche, sodass eine Zeile aus der .csv Datei nicht unbedingt bis zum Ende der Daten geht.

    fgetcsv() kann von Haus aus mit allen Aspekten korrekter CSV-Syntax umgehen.

    dedlfix.

  2. Ich plane, eine Zeile mit PHP explode('","',trim($zeile,'"')) in die Felder zu zerlegen. Problem: Texareas enthalten selbst Zeilenumbrüche, sodass eine Zeile aus der .csv Datei nicht unbedingt bis zum Ende der Daten geht.

    Der explode Teil ist ok. Das worauf es ankommt verstehe ich nicht ganz. Du meinst die CSV könnte so aussehen.

    Dreizeilige CSV:

    "Spalte1","Spalte2","Spalte3"
    "some content","ich bin ein text input content","ich bin ein textarea
    content mit Zeilenumbruch"
    "bla","bli","blub"

    Wie löse ich das Problem?

    Ähm, gar nicht? Der Inhalt der Textarea hätte statt des Steuerzeichens für den Zeilenumbruch besser eine Representation dessen enthalten. Wenn Du das nicht ändern kannst, gehts IMHO nicht.

    Hier die Begründung: Du müsstest Dir einen Parser schreiben, der zunächst mal gar nicht die Zeilen auflöst (wie zum Beispiel file()) sondern musst die Datei in einen String lesen (ohne Zeilenumbrüche). Dann müsstest Du die Anzahl der Spalten kennen und diese auflösen. Entweder anhand der " was nicht funktioniert, da auch der Zelleninhalt " enthalten kann, oder nach "," was nicht geht, da dieses nicht zwischen der letzten Spalte und der ersten SPalte der nächsten Zeile steht.

    Ich hoffe das war einigermaßen klar. Und meine Grundannahme stimmt überhaupt :)

    Cheers,
    Baba