Как я могу использовать другое окончание строки для чтения в PHP?

StackOverflow https://stackoverflow.com/questions/1215918

  •  06-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь прочитать файл CSV, сгенерированный M $ Excel на Linux.

В файле есть многострочные (разделенные x0A) столбцы и конец строки 0x0d0a.

PHP в Linux использует 0x0a в качестве ограничителя строки, поэтому все линейные инструменты (file, fgets, fgetcsv) считают, что в середине ячеек данных есть разрывы записей.

Если не обрабатывать файл побайтно, могу ли я временно изменить символ конца строки в PHP (константа PHP_EOL), чтобы я мог легко разобрать файл.

Я думаю, что это можно сделать в perl с " $ \ " ;. Есть ли что-то похожее в PHP?

Я понимаю, что могу разбирать побайтово, но я ищу более чистый подход.

Это было полезно?

Решение

Если предложение conceptDawg о auto_detect_line_endings не работает, я бы рекомендовал прочитать весь файл через file_get_contents () с последующим вызовом explode () разбить файл на несколько строк. Вы можете передать любой символ, который вы хотите, explode ()

Другие советы

Вы можете попробовать использовать параметр конфигурации во время выполнения ' auto_detect_line_endings ". Это говорит о том, что с помощью этого автоматически будут определены правильные окончания строк. Из документов:

  

Когда этот параметр включен, PHP будет проверять данные, считанные с помощью fgets () и file (), чтобы определить, используют ли они соглашения об окончании строк в Unix, MS-Dos или Macintosh.

     

Это позволяет PHP взаимодействовать с системами Macintosh, но по умолчанию отключено, поскольку при обнаружении соглашений EOL для первой строки существует очень небольшое снижение производительности, а также потому, что люди, использующие возврат каретки в качестве разделителей элементов в системах Unix, будут испытать не обратно совместимое поведение.

Если это не сработает, вы всегда можете прочитать весь файл в память (в зависимости от размера файла это может оказаться невозможным) и выполнить preg_replace для соответствующих символов, заменив их на " правильные " символы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top