Задача
Необходимо прочитать из файла разграниченные текстовые поля. Например, есть программа базы данных, построчно выводящая записи, в которых поля разделены символами табуляции, и требуется преобразовать эти данные в массив.
Решение
Читайте каждую строку, а затем выделяйте поля на основе их символа разделителя:
$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 находился бы символ новой строки.