PHP: Функция fscanf ()

Альтернативой функции 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 ().

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...