Обработка текстовых полей переменной длины

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

Решение
Читайте каждую строку, а затем выделяйте поля на основе их символа разделителя:

$delim = '|';
$fh = fopen('books.txt','r') or die("can't open: $php_errormsg");
while (! feof($fh)) {
$s = rtrim(fgets($fh,1024));
$fields = explode($delim,$s);
// ... делаем что-нибудь с данными ...
}
fclose($fh) or die("can't close: $php_errormsg");

Обсуждение
Разберем следующие данные из файла books.txt:

Elmer Gantry|Sinclair Lewis|1927
The Scarlatti Inheritance|Robert Ludlum|1971The Parsifal Mosaic|Robert Ludlum|1982
Sophie's Choice|William Styron|1979

Обработаем каждую запись следующим образом:

$fh = fopen('books.txt','r') or die("can't open: $php_errormsg");
while (! feof($fh)) {
$s = rtrim(fgets($fh,1024));
list($title,$author,$publication_year) = explode('|',$s);
// ...


делаем что-нибудь с данными ...
}
fclose($fh) or die("can't close: $php_errormsg");

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

Вызов функции rtrim() необходим, поскольку функция fgets() вставляет завершающий пробельный символ в строку, которую она читает.

Без функции rtrim() в конце каждой переменной $publication_year находился бы символ новой строки.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Блокировка файла
Выбор случайной строки из файла
Запись в несколько файловых дескрипторов одновременно
Запись в стандартный поток вывода
Непосредственная модификация файла без временной копии

Вернуться в раздел: PHP / 18. Файлы