2012-06-22 2 views
2

У меня есть эта распространенная проблема «новой строки» в php-csv, которая делает меня сумасшедшим !!! Я проверил так много форумов и пробовал разные обходные пути, но, похоже, это не проблема. Я читаю из CSV-файла, который имеет 1 заголовок и 2 записи данных. Я пропускаю заголовок с помощью fgets() и считывая данные с помощью $data=fgetcsv(). Теперь проблема заключается в том, что записи данных считываются в один массив. Я попытался следующие варианты, но все напрасно:php newline не обнаруживается в csv

  1. Время воспроизведения - ini_set("auto_detect_line_endings", true);
  2. точеные auto_detect_line_endings в 'ON' в php.ini.
  3. пытался fwrite($handle, implode($delimiter,$fieldsarray).PHP_EOL);

Я работаю над MAMP в местном, LAMP в Dev регионе. CSV сохраняются на локальном компьютере, копируются в/tmp/folder и читаются оттуда. Как проверить, есть ли в файлах новые строки? Когда я проверяю файл из tmp, я вижу записи в новых строках.

+1

Если бы это была линия окончаний, то первые fgets бы хлебать весь файл - fgetcsv просто добавляет дополнительный csv-> массив разборе после внутреннего fgets() вызов читает строку. –

+0

Кажется, что ваша проблема с новой линией распространяется и на SO. – Alexander

+0

Можете ли вы разместить строки в файле csv? – Rachael

ответ

3

Следующее решение работает!

$file_contents = file_get_contents($temp); 
$file_cont_new = str_replace("\n","\r",$file_contents); 
file_put_contents($temp,$file_cont_new); 
+1

Если это не 'str_replace (" \ r "," \ n ", $ file_contents);' И если есть \ r \ n, вы получите пустую строку. Таким обходным решением будет '$ file_cont_new = str_replace (" \ n \ r "," \ n ", $ file_contents); $ file_cont_new = str_replace ("\ n \ r", "\ n", $ file_contents); $ file_cont_new = str_replace ("\ r", "\ n", $ file_contents); ' – corban

+0

@corban, есть проблема с этим - повторное использование $ file_contents. Последние команды должны использовать $ file_cont_new. Кроме того, это можно было бы упростить, прежде всего, последним, а затем просто заменить все вхождения («\ n \ n»), используя одну меньшую строку. –