Wie kann ich das fGetCSV () von PHP zum neuen Mac (CR) -Liniencharakter erkennen?
Frage
Ich verwende diesen Code, um die Anzahl der Spalten aus einer CSV -Datei abzurufen:
$this->dummy_file_handler = fopen($this->config['file'],'r');
if ($dataset =fgetcsv($this->dummy_file_handler))
{
$this->number_of_columns = count($dataset);
}
Es funktioniert gut wenn nicht Die Datei wird mit Excel für Mac 2011 exportiert, da der neue Zeilenzeichen damals ist Klassischer Mac (Cr) die fgetcsv
erkennt nicht.
Wenn ich manuell Ändern Sie die Newline von Classic Mac (CR) in UNIX (LR), dann funktioniert es, aber ich muss automatisiert werden.
Wie kann ich machen fgetcsv
Erkennen Sie den klassischen MAC (CR) neuen Liniencharakter?
Lösung
Von dem Handbuch:
HINWEIS: Wenn PHP die Zeilenende nicht ordnungsgemäß erkennt, wenn Dateien auf einem Macintosh-Computer gelesen oder erstellt werden, kann die Laufzeit-Konfiguration Option auto_detect_line_endings dazu beitragen, das Problem zu beheben.
Andere Tipps
Wenn Sauls Antwort nicht funktioniert, würde ich ein einfaches Skript schreiben, das in der Datei auf einmal gelesen wird, und Str_replace alle r mit n, die Ergebnisse in eine neue Datei ablegen und diese neue Datei fungieren.
Ich finde es amüsant, dass diese Begriffe aus den Tagen der Verwendung von Schreibmaschinen stammen:
n = Zeilenvorschub (LF) - Fortschreitet die Papier eine Linie.
r = Wagenrückgabe (CR) - Gibt den Wagen auf die linke Seite des Schreibmaschinens zurück.