Hello,
ich versuche gerade, eine fehlerhafte csv-Datei einzulesen. Diese datei hat anscheinend innerhalb ihrer per Pipe (|) getrennten Felder unsichtbare Zeilentrenner drin.
So erhalte ich dann mit
$myCsvArray = explode("\n",file_get_contents($csv_datei));
anstelle von 25.000 Datensätzen nur noch 15.000, von den anderen problemchen, die das mit sich bringt, mal ganz abgesehen.
Wie gehe ich dieses Problem an?
Wie bringe ich php bei, alle zeilentrenner zu ersetzen, die nicht am (gewünschten) Zeilenende stehen? Die Wahrscheinlichkeit, dass die ungewünschten Zeilenenden direkt vor einer Pipe stehen, ist hoch. Aber ob sie 100%ig ist, weiß ich nicht.
Dass PHP dafür zwei eigene Funktionen anbietet, wurde ja schon erwähnt.
Vermutlich werden "\r\n" als Satzende ("Zeilentrenner") benutzt und "\n" innerhalb eines Satzes als Zeilenumbruch innehalb eines Feldes.
Das wäre ein übliches Verhalten z. B. von Excel.
Also erst die Zeilen anhand von "\r\n" trennen.
Anschließend Dieses Array dann ggf. mit array_map() durchgehen und mit str_replace() die störenden Zeilenumbrüche "\n" beseitigen/ersetzen.
Dann die Elemente des Array mittels foreach und explode() in Spalten zerlegen.
Glück Auf
Tom vom Berg
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.