Как правильно открыть txt-файл времени в удобочитаемом виде

Обновлено: 21.11.2024

Некоторая информация относится к предварительной версии продукта, которая может быть существенно изменена до ее выпуска. Microsoft не дает никаких явных или подразумеваемых гарантий в отношении представленной здесь информации.

Открывает текстовый файл, считывает весь текст в файле в строку, а затем закрывает файл.

Перегрузки

Открывает файл, читает весь текст в файле с указанной кодировкой, а затем закрывает файл.

Открывает текстовый файл, читает весь текст в файле, а затем закрывает файл.

ReadAllText(строка, кодировка)

Открывает файл, читает весь текст в файле с указанной кодировкой, а затем закрывает файл.

Параметры

Файл, который нужно открыть для чтения.

Кодировка, применяемая к содержимому файла.

Возврат

Строка, содержащая весь текст в файле.

Исключения

Указанный путь, имя файла или оба параметра превышают максимальную длину, определенную системой.

Указанный путь недействителен (например, он находится на несопоставленном диске).

При открытии файла произошла ошибка ввода-вывода.

в пути указан файл, доступный только для чтения.

Эта операция не поддерживается на текущей платформе.

путь указывает каталог.

У вызывающего абонента нет необходимого разрешения.

Файл, указанный в пути, не найден.

путь имеет недопустимый формат.

У вызывающего абонента нет необходимого разрешения.

Примеры

В следующем примере кода показано использование метода ReadAllText для отображения содержимого файла. В этом примере создается файл, если он еще не существует, и в него добавляется текст.

Примечания

Этот метод открывает файл, считывает весь текст в файле и возвращает его в виде строки. Затем он закрывает файл.

Этот метод пытается автоматически определить кодировку файла на основе наличия меток порядка байтов. Могут быть обнаружены форматы кодирования UTF-8 и UTF-32 (как с прямым порядком байтов, так и с прямым порядком байтов).

Этот метод гарантирует закрытие дескриптора файла, даже если возникают исключения.

Чтобы использовать параметры кодирования, настроенные для вашей операционной системы, укажите свойство Encoding.Default для параметра кодирования.

См. также

Относится к

ПрочитатьВсеТекст(Строка)

Открывает текстовый файл, читает весь текст в файле, а затем закрывает файл.

Параметры

Файл, который нужно открыть для чтения.

Возврат

Строка, содержащая весь текст в файле.

Исключения

Указанный путь, имя файла или оба параметра превышают максимальную длину, определенную системой.

Указанный путь недействителен (например, он находится на несопоставленном диске).

При открытии файла произошла ошибка ввода-вывода.

в пути указан файл, доступный только для чтения.

Эта операция не поддерживается на текущей платформе.

путь указывает каталог.

У вызывающего абонента нет необходимого разрешения.

Файл, указанный в пути, не найден.

путь имеет недопустимый формат.

У вызывающего абонента нет необходимого разрешения.

Примеры

В следующем примере кода показано использование метода ReadAllText для отображения содержимого файла. В этом примере создается файл, если он еще не существует, и в него добавляется текст.

Примечания

Этот метод открывает файл, считывает весь текст в файле и возвращает его в виде строки. Затем он закрывает файл.

Этот метод пытается автоматически определить кодировку файла на основе наличия меток порядка байтов. Могут быть обнаружены форматы кодирования UTF-8 и UTF-32 (как с прямым порядком байтов, так и с прямым порядком байтов).

Используйте перегрузку метода ReadAllText(String, Encoding) при чтении файлов, которые могут содержать импортированный текст, так как нераспознанные символы могут быть прочитаны неправильно.

Этот метод гарантирует закрытие дескриптора файла, даже если возникают исключения.

fopen() привязывает именованный ресурс, заданный именем файла, к потоку.

Параметры

Если имя файла имеет форму "scheme://. ", предполагается, что это URL-адрес, и PHP будет искать обработчик протокола (также известный как оболочка) для этой схемы. Если для этого протокола не зарегистрированы оболочки, PHP выдаст уведомление, чтобы помочь вам отследить потенциальные проблемы в сценарии, а затем продолжит работу, как если бы имя файла указывает на обычный файл.

Если PHP решил, что имя файла указывает на локальный файл, он попытается открыть поток для этого файла. Файл должен быть доступен для PHP, поэтому вам необходимо убедиться, что права доступа к файлу разрешают этот доступ. Если вы включили open_basedir, могут применяться дополнительные ограничения.

Если PHP решил, что имя файла указывает зарегистрированный протокол, и этот протокол зарегистрирован как сетевой URL, PHP проверит, включен ли параметр allow_url_fopen.Если он выключен, PHP выдаст предупреждение и вызов fopen завершится ошибкой.

На платформе Windows будьте осторожны, избегайте обратной косой черты, используемой в пути к файлу, или используйте прямую косую черту.

Параметр режима указывает тип доступа, который вам требуется к потоку. Это может быть любое из следующего:

Список возможных режимов для fopen() с использованием режима < tbody >
mode Description
'r' Открыть только для чтения; поместите указатель файла в начало файла.
'r+' Открыть для чтения и записи; поместите указатель файла в начало файла.
'w' Открыть только для записи; поместите указатель файла в начало файла и обрежьте файл до нулевой длины. Если файл не существует, попытайтесь его создать.
'w+' Открыть для чтения и записи; в противном случае он имеет то же поведение, что и 'w' .
'a' Открыть только для записи; поместите указатель файла в конец файла. Если файл не существует, попытайтесь его создать. В этом режиме fseek() не действует, записи всегда добавляются.
'a+' Открыть для чтения и записи; поместите указатель файла в конец файла. Если файл не существует, попытайтесь его создать. В этом режиме fseek() влияет только на позицию чтения, записи всегда добавляются.
'x' Создать и открыть только для записи; поместите указатель файла в начало файла. Если файл уже существует, вызов fopen() потерпит неудачу, вернув false и сгенерировав ошибку уровня E_WARNING. Если файл не существует, попытайтесь его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для базового системного вызова open(2).
'x+' Создать и открыть для чтения и записи ; в противном случае он имеет то же поведение, что и 'x' .
'c' Открыть файл только для записи. Если файл не существует, он создается. Если он существует, он не усекается (в отличие от 'w'), и вызов этой функции не завершается ошибкой (как в случае с 'x'). Указатель файла располагается в начале файла. Это может быть полезно, если желательно получить рекомендательную блокировку (см. flock() ) перед попыткой изменить файл, так как использование 'w' может обрезать файл до того, как будет получена блокировка (если требуется усечение, ftruncate() может быть используется после запроса блокировки).
'c+' Открыть файл для чтения и записи; в противном случае он имеет то же поведение, что и 'c' .
'e' Установить флаг закрытия при выполнении в дескрипторе открытого файла. Доступно только в PHP, скомпилированном в системах, соответствующих стандарту POSIX.1-2008.

Примечание.

Разные семейства операционных систем имеют разные правила окончания строки. Когда вы пишете текстовый файл и хотите вставить разрыв строки, вам нужно использовать правильные символы конца строки для вашей операционной системы. Системы на базе Unix используют \n в качестве символа конца строки, системы на базе Windows используют \r\n в качестве символов окончания строки, а системы на базе Macintosh (Mac OS Classic) используют \r в качестве символа окончания строки.

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

Windows предлагает флаг перевода текстового режима ( 't' ), который будет прозрачно переводить \n в \r\n при работе с файлом. Напротив, вы также можете использовать 'b' для принудительного двоичного режима, который не будет преобразовывать ваши данные. Чтобы использовать эти флаги, укажите «b» или «t» в качестве последнего символа параметра режима.

Режим перевода по умолчанию — «b». Вы можете использовать режим 't', если вы работаете с текстовыми файлами и используете \n для разделения окончаний строк в своем скрипте, но ожидайте, что ваши файлы будут доступны для чтения в таких приложениях, как старые версии блокнота. Вы должны использовать 'b' во всех остальных случаях.

Если вы укажете флаг 't' при работе с двоичными файлами, у вас могут возникнуть странные проблемы с вашими данными, включая поврежденные файлы изображений и странные проблемы с \r\n символов.

Примечание:

Для обеспечения переносимости также настоятельно рекомендуется переписать код, использующий или полагающийся на режим 't', чтобы вместо него использовались правильные окончания строк и режим 'b'.

Примечание. Этот режим игнорируется для обработчиков потоков php://output, php://input, php://stdin, php://stdout, php://stderr и php://fd. .

Необязательный третий параметр use_include_path может иметь значение 1 или true, если вы хотите искать файл и в include_path.

Открытие файлов и чтение их данных — это то, что мы научились делать с помощью простого двойного щелчка при самом раннем взаимодействии с компьютером. Однако на программном уровне все существенно сложнее…

Вот официальная документация Python по чтению и записи файлов. Но прежде чем читать это, давайте углубимся в тот минимум, который я хочу, чтобы вы знали.

Давайте сразу перейдем к примеру кода. Представьте, что у вас есть файл с именем example.txt в текущем каталоге. Если нет, просто создайте его, а затем заполните его этими строками и сохраните:

Вот короткий фрагмент кода Python, чтобы открыть этот файл и распечатать его содержимое на экране. Обратите внимание, что этот код Python должен выполняться в том же каталоге, где находится файл example.txt.

Это показалось слишком сложным? Вот менее подробная версия:

Вот как читать этот файл построчно, используя цикл for:

(Примечание: если вы уже получаете сообщение об ошибке FileNotFoundError — этого почти следовало ожидать. Продолжайте читать!)

Все еще кажется слишком сложным? Что ж, нельзя обойти стороной тот факт, что на программном уровне открытие файла отличается от чтения его содержимого. Мало того, мы также должны вручную закрыть файл.

А теперь давайте рассмотрим это шаг за шагом.

Чтобы открыть файл, мы просто используем метод open() и передаем в качестве первого аргумента имя файла:

Это кажется достаточно простым, так что давайте перейдем к некоторым распространенным ошибкам.

Как напортачить при открытии файла

Вероятно, это самая распространенная ошибка, которая возникает при попытке открыть файл.

На самом деле, я видел, как студенты тратили десятки часов, пытаясь пройти мимо этого сообщения об ошибке, потому что они не останавливались, чтобы прочитать его. Итак, прочтите: что означает FileNotFoundError?

Попробуйте поставить пробелы там, где заглавные буквы:

Вы получите эту ошибку, потому что попытались открыть файл, которого просто не существует. Иногда это простая опечатка, когда вы пытаетесь открыть() файл с именем "example.txt", но случайно пишете его как "exmple.txt" .

Но чаще всего это происходит потому, что вы знаете, что файл существует под заданным именем файла, например "example.txt", но как ваш код Python узнает, где находится этот файл? Это «example.txt», который существует в вашей папке «Загрузки»? Или тот, который может существовать в папке «Документы»? Или тысячи других папок на вашем компьютере?

Это довольно сложный вопрос. Но первый шаг к тому, чтобы не тратить время попусту, заключается в том, что если вы когда-нибудь увидите эту ошибку, прекратите все, что вы делаете. Не настраивайте свой запутанный цикл for. Не пытайтесь установить новую библиотеку Python. Не перезагружайте компьютер, а затем повторно запустите скрипт, чтобы посмотреть, устранится ли ошибка волшебным образом.

Ошибка FileNotFoundError возникает из-за того, что вы либо не знаете, где на самом деле находится файл на вашем компьютере. Или, даже если вы знаете, вы не знаете, как сообщить вашей программе Python, где она находится. Не пытайтесь исправить другие части кода, не связанные с указанием имен файлов или путей.

Как исправить ошибку FileNotFoundError

Вот надежное решение: убедитесь, что файл действительно существует.

Давайте начнем с нуля, допустив ошибку. В системной оболочке (например, в терминале) перейдите в папку на рабочем столе:

Теперь запустите ipython:

Теперь, когда вы находитесь в интерактивном интерпретаторе Python, попробуйте открыть файл с именем, которое, как вы знаете, не существует на вашем рабочем столе, а затем насладитесь сообщением об ошибке:

Теперь вручную создайте файл на рабочем столе, используя Sublime Text 3 или что угодно. Добавьте к нему текст и сохраните его.

Посмотрите и убедитесь сами, что этот файл действительно существует в папке вашего рабочего стола:

Хорошо, теперь вернитесь к интерактивной оболочке Python (т. е. ipython), которую вы открыли после перехода в папку рабочего стола (т. е. cd ~/Desktop ). Повторно запустите эту команду open(), которая привела к ошибке FileNotFoundError:

Надеюсь, вы не получите ошибку.

Но что это за объект, на который указывает переменная myfile? Используйте метод type(), чтобы выяснить это:

И что это это? Детали не важны, за исключением того, что myfile определенно не является просто строковым литералом, то есть str .

Используйте автозаполнение Tab (т. е. введите myfile. ), чтобы получить список существующих методов и атрибутов для объекта myfile:

Ну, мы можем делать с файлами намного больше, чем просто читать из них(). Но давайте пока сосредоточимся только на чтении.

Предполагая, что переменная myfile указывает на какой-то файловый объект, вот как вы читаете из него:

Что находится в этой переменной mystuff? Снова используйте функцию type():

Это просто строка. Это, конечно же, означает, что мы можем его распечатать:

Или посчитайте количество символов:

Или распечатайте его заглавными буквами:

И это все, что нужно для чтения из открытого файла.

Теперь об ошибках.

Как ошибиться при чтении из файла

Вот очень, очень распространенная ошибка:

Вывод ошибки:

Обратите внимание, что это не ошибка FileNotFoundError. Это AttributeError — что, правда, не очень понятно — но читайте следующую часть:

Сообщение об ошибке попадает в точку: объект str — т. е. строковый литерал, например. что-то вроде "hello world" не имеет атрибута чтения.

Пересмотр ошибочного кода:

Если имя файла указывает на "example.txt", то имя файла является просто объектом str.

Другими словами, имя файла не является файловым объектом. Вот более наглядный пример ошибочного кода:

И бить в точку про голову:

Почему это такая распространенная ошибка? Потому что в 99% наших типичных взаимодействий с файлами мы видим имя файла в графическом интерфейсе нашего рабочего стола и дважды щелкаем это имя файла, чтобы открыть его. Графический интерфейс запутывает процесс — и не зря. Кого волнует, что происходит, если мой файл открывается, когда я дважды щелкаю по нему!

К сожалению, нам приходится проявлять осторожность при попытке чтения файла программным способом. Открытие файла — это отдельная операция от его чтения.

  • Вы открываете файл, передавая его имя файла – например, example.txt — в функцию open(). Функция open() возвращает файловый объект.
  • Чтобы фактически прочитать содержимое файла, вы вызываете метод read() этого файлового объекта.

Опять же, вот код, но немного более подробный:

Файловый объект также имеет метод close(), который формально очищает открытый файл и позволяет другим программам безопасно обращаться к нему. Опять же, это низкоуровневая деталь, о которой вы никогда не думаете в повседневных вычислениях. На самом деле, это то, что вы, вероятно, забудете в контексте программирования, поскольку не закрытие файла ничего автоматически не сломает (по крайней мере, пока мы не начнем выполнять гораздо более сложные типы файловых операций, по крайней мере…) . Как правило, после завершения скрипта все незакрытые файлы автоматически закрываются.

Однако мне нравится закрывать файл явным образом — не только из соображений безопасности, но и для закрепления концепции файлового объекта.

Одним из преимуществ более детального изучения открытия и чтения файлов является то, что теперь у нас есть возможность читать файлы построчно, а не одним гигантским фрагментом. Опять же, чтобы прочитать файлы как один гигантский фрагмент содержимого, используйте метод read():

Сейчас это не кажется такой уж большой проблемой, но это потому, что example.txt, вероятно, содержит всего несколько строк. Но когда мы имеем дело с огромными файлами — такими как все 3,3 миллиона записей о всех, кто пожертвовал более 200 долларов одному комитету президентской кампании в США в 2012 году или о всех, кто когда-либо посещал Белый дом, — открывается и чтение файла сразу заметно медленнее. И это может даже привести к сбою вашего компьютера.

Если вам интересно, почему в программах для работы с электронными таблицами, таких как Excel, существует ограничение на количество строк (примерно 1 000 000), то это потому, что большинство пользователей делают работу с файлом данных одновременно. Однако многие интересные файлы данных слишком велики для этого. Мы столкнемся с этими сценариями позже в этом квартале.

На данный момент вот как обычно выглядит построчное чтение:

Поскольку каждая строка в текстовом файле имеет символ новой строки (который представлен как \n, но обычно является «невидимым»), вызов функции print() приведет к созданию вывода с двойным интервалом, поскольку print() добавляет новую строку к тому, что он выводит (т.е. вернитесь к исходной программе print("hello world")).

Чтобы избавиться от этого эффекта, вызовите метод strip(), принадлежащий объектам str и удаляющий пробельные символы с левой и правой стороны текстовой строки:

И, конечно же, вы можете сделать вещи громче с помощью старой доброй функции upper():

Это пока. Мы не рассмотрели, как писать в файл (что является гораздо более опасной операцией) — я оставлю это для отдельного урока. Но достаточно знать, что, работая с файлами как программист, мы должны быть более точными и конкретными в шагах.

Справочники и связанные материалы

Существует несколько способов представления вывода программы; данные могут быть распечатаны в удобочитаемой форме или записаны в файл для будущего использования. В этой главе обсуждаются некоторые возможности.

Вычислительные методы в гражданской сфере созданы Дэном Нгуеном в качестве онлайн-справочника для Стэнфордской лаборатории вычислительной журналистики и программы магистратуры по журналистике.

(PHP 4, PHP 5, PHP 7, PHP 8)

file — считывает весь файл в массив

Описание

Считывает весь файл в массив.

Примечание.

Вы можете использовать file_get_contents() для возврата содержимого файла в виде строки.

Параметры

Путь к файлу.

URL-адрес можно использовать в качестве имени файла с этой функцией, если включена оболочка fopen.См. fopen() для более подробной информации о том, как указать имя файла. См. Поддерживаемые протоколы и оболочки для получения ссылок на информацию о возможностях различных оболочек, заметок об их использовании и информации о любых предопределенных переменных, которые они могут предоставлять.

Необязательные флаги параметров могут быть одной или несколькими из следующих констант: FILE_USE_INCLUDE_PATH Поиск файла в include_path. FILE_IGNORE_NEW_LINES Пропускать новую строку в конце каждого элемента массива FILE_SKIP_EMPTY_LINES Пропускать пустые строки

Возвращаемые значения

Возвращает файл в виде массива. Каждый элемент массива соответствует строке в файле с прикрепленным символом новой строки. При ошибке file() возвращает false .

Примечание.

Каждая строка результирующего массива будет включать окончание строки, если только не используется FILE_IGNORE_NEW_LINES.

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

Ошибки/Исключения

Выдает ошибку уровня E_WARNING, если файл не существует.

Примеры

// Используя необязательный параметр флагов
$trimmed = file ('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
?>

Примечания

См. также

  • file_get_contents() — считывает весь файл в строку
  • readfile() — выводит файл
  • fopen() — открывает файл или URL-адрес
  • fsockopen() – открыть подключение к Интернету или доменному сокету Unix.
  • popen() — открывает указатель файла процесса
  • включить – включить
  • stream_context_create() — создает контекст потока.

Примечания, внесенные пользователями 15 примечаний

Если файл, который вы читаете, имеет формат CSV, не используйте file(), используйте fgetcsv(). file() будет разделять файл по каждой новой строке, которую он найдет, даже новой строке, которая появляется в поле (т.е. в кавычках).

это может быть очевидным, но мне потребовалось некоторое время, чтобы понять, что я делаю неправильно. Поэтому я хотел поделиться. У меня есть файл на моем диске "c:\". Как мне файл() это?

Не забывайте, что обратная косая черта является специальной, и вы должны «экранировать» обратную косую черту, т. е. «\\»:

= файл ("C:\\Documents and Settings\\myfile.txt");

foreach($lines as $line)
echo( $line);
>

надеюсь, это поможет.

Чтобы записать все строки файла, другими словами, прочитать файл построчно, вы можете написать такой код:
= file ( 'name.txt' );
// Чтобы проверить количество строк
echo count ( $names ). '
' ;
foreach( $names as $name )
echo $name . '
' ;
>
?>

этот пример настолько прост, что можно понять, как он работает. Надеюсь, это поможет многим новичкам.

читать из CSV-данных (файла) в массив с именованными ключами

<р>. с или без 1-й строки = заголовок (ключи)
(см. 4-й параметр вызова функции как true/false)

функция csv_in_array ($url, $delm = ";", $encl = "\"", $head = false)

$csvxrow = файл ( $url ); // ---- строки csv в массив ----

$csvxrow [ 0 ] = отбивная ( $ csvxrow [ 0 ]);
$csvxrow [0] = str_replace ($encl, '', $csvxrow [0]);
$keydata = взорвать ( $delm , $csvxrow [ 0 ]);
$keynumb = количество ($keydata);

if ($head === true) <
$anzdata = count ($csvxrow);
$z = 0 ;
for( $x = 1 ; $x $anzdata ; $x ++) <
$csvxrow [ $x ] = Chop ( $csvxrow [ $x ]);
$csvxrow [$x] = str_replace ($encl, '', $csvxrow [$x]);
$csv_data [$x] = взорвать ($delm, $csvxrow [$x]);
$i = 0 ;
foreach( $keydata as $key ) <
$out [ $z ][ $key ] = $csv_data [ $x ][ $i ];
$i++;
>
$z++;
>
>
else <
$i = 0 ;
foreach( $csvxrow as $item ) <
$item = отбивная ( $item );
$item = str_replace ($encl, '', $item);
$csv_data = взорвать ($delm, $item);
for ( $y = 0 ; $y $keynumb ; $y ++) <
$out [ $i ][ $y ] = $csv_data [ $y ];
>
$i++;
>
>

?>

вызов функции с 4 параметрами:

(1) = файл с данными CSV (url / строка)
(2) = разделитель столбцов (например: ; или | или , . )
(3) = значения, заключенные в (например, : ' или " или ^ или . )
(4) = с 1-й строкой или без нее = голова (истина/ложь)

Имейте в виду, что использование file() для подсчета строк может привести к OOM на сервере, поскольку все строки будут размещены в массиве.

Если вы имеете дело с файлами, которые могут содержать тысячи строк, лучше использовать SplFileObject, и с небольшими изменениями вы можете получить тот же результат.

Начиная с PHP 5.6 функции file(), file_get_contents() и fopen() будут возвращать false, если вы ссылаетесь на исходный URL-адрес, не имеющий действительного сертификата SSL. Предположительно, вы будете часто сталкиваться с этим в своих средах разработки, это сведет вас с ума.

Вам нужно будет создать контекст потока и указать его в качестве аргумента для различных операций с файлами, чтобы он игнорировал недействительные учетные данные SSL.

$args = array("ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false),"http"=>array('timeout' => 60, 'user_agent' => ' Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/3.0.0.1'));

(«Проблема file() с UTF-16» неверна. Это обновлено.
Первый может пропустить последнюю строку строки.)

file(), похоже, имеет проблемы с обработкой
UTF-16 с BOM или без него.

file() скорее всего будет считать "\n"=LF (0A) окончанием строки.
Таким образом, не только "000A", но и "010A, 020A. FE0A, FF0A."
рассматриваются как окончание строки.

Более того, file() вызывает серьезную проблему в UTF-16LE.
file() теряет первый "0A" (первую половину "0A00")!
А следующая строка начинается с " 00" (остальная часть "0A00").
Поэтому строки после первого "0A" совершенно разные.

Чтобы избежать этого явления,
например. в случае (php_script: UTF-8, файл: UTF-16 с окончанием строки "\r\n"),

('UTF-16'); // для правильной работы mb_ereg_..()
$str = file_get_contents ( $file_path );
$to_encoding = 'UTF-16' ; // кодировка строки
$from_encoding = 'UTF-8' ; // кодировка PHP_script
$pattern1 = mb_convert_encoding ('[^\r]*\r\n', $to_encoding, $from_encoding);
mb_ereg_search_init ( $str , $pattern1 );
в то время как ( $res = mb_ereg_search_regs ()) $file [] = $res [ 0 ];
>
$pattern2 = mb_convert_encoding ('\A.*\r\n(.*)\z', $to_encoding, $from_encoding);
mb_ereg ($pattern2, $str, $match);
$file[] = $match[1];

?>

вместо
$file = file($file_path);

Если конец строки равен "\n",
$pattern1 = mb_convert_encoding('[^\n]*\n', $to_encoding, $from_encoding);

Использования if ( file(name.txt) ) может быть недостаточно для проверки того, был ли файл успешно открыт для чтения, потому что файл может быть пустым, и в этом случае возвращаемый массив будет пустым, поэтому вместо этого проверьте с помощью !==. например:

$file_array = файл('test.txt'); // пустой файл

Вот мой конвертер CSV
поддерживает заголовки и обрезает все поля
Примечание: заголовки не должны быть пустыми!

функция csv2array ($file, $delim = ';', $encl = '"', $header = false)

Пользователь предложил всегда использовать rtrim, поскольку окончание строки конфликтует с файлами, срок окончания действия которых отличается от окончания срока действия сервера.

Использование rtrim с заменой символов по умолчанию является плохим решением, поскольку оно удаляет все пробелы в дополнение к символам '\r' и '\n'.

Хорошее решение с использованием rtrim:

= rtrim ( $line , "\r\n" ) . PHP_EOL;
?>

Это удаляет только символы EOL и заменяет их символом EOL сервера, что позволяет preg_* нормально работать при сопоставлении EOL ($)

Примечание. Теперь, когда file() является двоично-безопасным, он "намного" медленнее, чем раньше. Если вы планируете читать большие файлы, возможно, стоит использовать fgets() вместо file(). Например:

= fopen("log_file.txt", "r");
while (! feof ( $fd ))
<
$buffer = fgets ( $fd , 4096 );
$lines [] = $buffer ;
>
fclose ( $fd );
?>

Результирующий массив $lines.

Я проверил файл из 200 000 строк. Для fgets() это заняло секунды, а для file() — минуты.

Это примечание относится к PHP 5.1.6 под Windows (хотя может относиться и к другим версиям).

Похоже, что флаг FILE_IGNORE_NEW_LINES не удаляет новые строки должным образом при чтении текстовых файлов в стиле Windows, т. е. файлов, строки которых заканчиваются на '\r\n'.

Решение. Всегда используйте rtrim() вместо FILE_IGNORE_NEW_LINES.

Использование file() для чтения больших текстовых файлов размером > 10 МБ создает проблемы, поэтому вам следует использовать его вместо этого. Это намного медленнее, но работает нормально. $lines вернет массив со всеми строками.

= @ fopen('yourfile.', "r");
if ($handle) <
while (! feof ($handle)) <
$lines [] = fgets ($handle, 4096);
>
fclose ($handle);
>
?>

Читайте также: