Альтернативой функции fgets () является функция fscanf (). Эта функция предназначена для чтения из файла структурированных данных, причем каждый элемент этих данных автоматически запоминается в отдельной переменной.
Например, рассмотрим текстовый файл с данными, содержащий имена и даты рождения персонала, который показан в следующем примере.
Текстовый файл с данными:
04-25-81 Иван Иванов
01-23-81 Сергей Петров
03-12-73 Светлана Ивановна
06-54-72 Юлия Васильевна
При обработке таких данных, пришлось бы не только читать по отдельности каждую строку файла, используя функцию fgets () , но также потратить немало времени на синтаксический разбор полученной строки, чтобы извлечь необходимый фрагмент данных (например, год рождения). Именно для использования в таких ситуациях предназначена функция fscanf ().
С помощью функции fscanf () можно читать строку из файла по заданному шаблону и автоматически сохранять каждый считанный элемент в отдельной PHP-переменной. Синтаксис функции fscanf () показан ниже:
fscanf($file_ref, $format [ , $var_one [ , $var_two […]]])
где $f ile_ref — входной поток, $format задает шаблон используемый при чтении, а $var_one, $var_two представляют собой переменные, в которых сохраняются разобранные фрагменты данных (эти необязательные параметры необходимо передавать по ссылке). В случае успешного завершения fscanf () возвращает количество разобранных согласно шаблону элементов, а случае ошибки возвращается булевское значение false.
Замечание:
Если функции fscanf () не передано ни одной переменной для сохранения считанных значений, тогда вместо возврата количества считанных элементов эта функция вернет массив, содержащий все считанные значения, (fscanf () по-прежнему возвращает false в случае неудачного завершения.)
Допустимые символы форматирования функции fscanf ()
%b — Двоичное число.
%c — Одиночный символ.
%d — Десятичное число со знаком.
%u — Десятичное число без знака.
%f — Число с плавающей запятой.
%o — Восьмеричное число.
%s — Строка.
%x — Шестнадцатеричное число.
Ввод форматированного текста с помощью функции fscanf ()
<?php $fr = @ fopen ('birthdays, txt', 'r'); if(!$fr) { echo "Ошибка! Невозможно открыть файл.<ВК>"; exit; } while(!feof($fr)) { fscanf($fr, "%u-%u-%u %s %s", &$month, &$day, &$year, &$first, S$last); echo "Имя: $first<BR>"; echo "Фамилия:$last<BR>"; echo "Дата рождения: $month/$day/$year<BR>"; } fclose($fr); ?>
Этот сценарий читает и разбирает каждую строку файла с датами рождений и выводит эти данные в удобочитаемом виде. Обратите внимание, что в данном примере используется еще одна, до сих пор незнакомая, функция — функция feof (). Синтаксис этой функции выглядит следующим образом:
feof ($file_ref)
Во время чтения из файла эта функция применяется для определения того, есть ли еще данные для чтения. Если данных нет, она возвращает значение true. В вышепри веденном примере эта функция позволяет читать строки из файла, не зная предварительно количество строк или размер этого файла. После того, как все данные из файла считаны, он закрывается с помощью функции fclose ().