Как я могу сделать PHP fgetcsv () для распознавания символа новой строки Classic Mac (CR)? - PullRequest
8 голосов
/ 21 января 2011

Я использую этот код, чтобы получить количество столбцов из файла CSV:

$this->dummy_file_handler = fopen($this->config['file'],'r');
if ($dataset =fgetcsv($this->dummy_file_handler))
{
    $this->number_of_columns = count($dataset);
}

Работает нормально , если файл не экспортируется в Excel для Mac 2011, так как символ новой строки будет Classic Mac (CR) , который fgetcsv не распознает.

alt text

Если я вручную изменит перевод строки с Classic Mac (CR) на Unix (LR), то это сработает, но мне нужно, чтобы это было автоматизировано.

Как я могу заставить fgetcsv распознавать символ новой строки Classic Mac (CR)?

Ответы [ 2 ]

19 голосов
/ 21 января 2011

Из руководства :

Примечание: если PHP работает неправильно распознавая окончания строки, когда чтение файлов на или созданный компьютер Macintosh, позволяющий auto_detect_line_endings во время выполнения опция конфигурации может помочь решить проблема.

1 голос
/ 21 января 2011

Если ответ Саула не сработает, я напишу простой скрипт для чтения в файле все сразу и str_replace all \ r с \ n, выгрузив результаты в новый файл, а затем fgetcsv'ing этот новый файл.

Мне показалось забавным, что эти термины относятся к дням использования пишущих машинок:
\ n = Перевод строки (LF) - переводит бумагу на одну строку.
\ r = Возврат каретки (CR) - возвращает каретку к левой стороне печатной машинки.

...