Moderne Systeme können den übrigens als JSON. Das wieder lässt sich auch leichter einlesen.
Die Daten in einem definierten System zu erhalten, wäre ein Traum 😀
Nein. Das ist ein MUSS.
Leider kan ich überhaupt keinen Code brauchen, der mich nicht manuell zuordnen lässt. Dazu braucht jede Spalte ihre ganz eigene Behandlung, um möglichst viele Fehler durch Datenmüll auszuschließen.
Das kann man ab der Zeile machen, die da print_r( $array )
lautet. Ab dort hast Du die Daten ja in PHP importiert.
Ansonsten wäre da noch der wichtige, aber ignorierte Hinweis von Rolf
Zitat:
Wenn ich eine Excel-Tabelle exportiere, wo Felder Zeilenumbrüche haben, dann sind die CSV Zeilen durch CR-LF getrennt, also \r\n, aber die Zeilenumbrüche innerhalb der Felder nur ein LF (\n). Anführungszeichen setzt es immer dann, wenn es nötig ist (also ein Zeilenumbruch, ein Anführungszeichen oder ein Feldtrenner im Feld). Der Feldtrenner scheint auch nicht wählbar zu sein.
Das wäre, wenn es sich als richtig erweist, ein sauber definierter Export. Nur können PHP und andere Programme das nicht mit deren CSV-Funktionen importieren, weil diese extrem zeilenweise arbeiten und sowohl "\n" als "\r" als auch "\r\n" als Zeilenumbruch und somit Zeilenende werten. Hintergrund ist die verwendete C/C++-Bibliothek. Und die ist älter als Excel.
Auf einem System mit sinnvollen Programmen würde ich wie folgt vorgehen:
In der gesamten Datei:
- Ersetzen aller "\r\n" durch "\r".
- Ersetzen aller "\n" durch "" (Nichts)
- Ersetzen aller "\r" durch "\r\n".
- Speichern unter neuem Name
In PHP gegossen:
<?php
$fileName= "daten.csv";
$input = file_get_contents( '$fileName' );
$output = str_replace( "\r\n", "\r", $input ) ;
$output = str_replace( "\n", "", $output ) ;
$output = str_replace( "\r", "\r\n", $output ) ;
$newFileName = $fileName . date( '_Y-m-d_His' );
#Dateinamen mit ":" sind auf manchen Systemen ein Problem.
file_put_contents( '$newFileName', $output );
Danach hast Du eine hoffentlich importierbare Daten in einer Datei mit einem neuen Dateinamen.