(PHP 5 >= 5.1.0, PHP 7)
SplFileObject::fscanf — Разбирает строку файла в соответствии с заданным форматом
Читает строку из файла и разбирает её в соответствии с заданным форматом
format
. Спецификация формата приведена в документации к
функции sprintf().
Любые пробелы в строке format
соответствует
любому пробелу в строке из файла. Это означает, что
символ табуляции \t
в строке формата может соответствовать
одному пробелу в строке файла.
format
Строка формата состоит из нуля или более директив:
обычные символы (за исключением %
), которые
просто выводятся без изменения и
спецификаторы преобразования, каждый из которых
требует передачи своего параметра.
Спецификаторы преобразования имеют следующий формат:
%[argnum$][flags][width][.precision]specifier
.
Целое число, за которым следует знак доллара $
,
чтобы указать, какой числовой аргумент обрабатывать при преобразовании.
Флаг | Описание |
---|---|
- |
Выравнивание по левому краю в пределах заданной ширины поля; По умолчанию выравнивание происходит по правому краю. |
+ |
Печатает плюс + у не отрицательных чисел;
По умолчанию знак печатается только у отрицательных чисел.
|
(space) |
Дополняет результат пробелами. Это поведение по умолчанию. |
0 |
Дополняет числа нулями (только слева).
Со спецификатором s также может
дополнять нулями справа.
|
' (char) |
Дополняет результат символом (char). |
Целое число, определяющее минимальное количество символов, которое будет напечатано.
Точка .
с последующим целым числом,
работающая по разному для разных спецификаторов:
e
, E
,
f
и F
:
задаёт количество цифр после десятичной запятой (по умолчанию 6).
g
и G
:
задаёт максимальное значение печатаемых значащих цифр.
s
: задаёт ограничение
максимального количества символов в строке, которые будут выведены.
Замечание: Если указана точка без последующего значения точности, то точность будет считаться за 0.
Замечание: Попытка использовать спецификатор позиции со значением больше, чем
PHP_INT_MAX
приведёт к выводу предупреждения.
Спецификатор | Описание |
---|---|
% |
Символ процента. Аргументы не требуются. |
b |
Аргумент рассматривается как целое число и печатается в бинарном представлении. |
c |
Аргумент рассматривается как целое число и печатается как символ из таблицы ASCII с соответствующим кодом. |
d |
Аргумент рассматривается как целое число и печатается как целое число со знаком. |
e |
Аргумент считается за число в научной нотации (т.е. 1.2e+2). Начиная с PHP 5.2.1, спецификатор точности задаёт количество цифр после десятичной запятой. В более ранних версиях он задавал общее количество значащих цифр (т.е. после запятой выводилось на 1 символ меньше). |
E |
Аналогично спецификатору e , но использует
заглавные символы (т.е. 1.2E+2).
|
f |
Аргумент считается за число с плавающей точкой (с учётом локали). |
F |
Аргумент считается за число с плавающей точкой (без учёта локали). Доступно с PHP 5.0.3. |
g |
Общий формат. Пусть P равно точности, если она не равно нулю, 6 - если точность не задана и 1, если точность задана как 0. Тогда, если преобразование со стилем "E" будет иметь показатель степени X: Если P > X ≥ −4, преобразование будет в стиле "f" и точность будет P − (X + 1). В обратном случае, преобразование будет в стиле "e" и точность будет P − 1. |
G |
Аналогично спецификатору g , но использует
E и f .
|
h |
Аналогично спецификатору g , но использует
F .
Доступен с PHP 8.0.0.
|
H |
Аналогично спецификатору g , но использует
E и F .
Доступен с PHP 8.0.0.
|
o |
Аргумент рассматривается как целое число и печатается в восьмеричном представлении. |
s |
Аргумент рассматривается и печатается как строка. |
u |
Аргумент рассматривается как целое число и печатается как беззнаковое целое число. |
x |
Аргумент рассматривается как целое число и печатается в шестнадцатеричном представлении (буквы будут в нижнем регистре). |
X |
Аргумент рассматривается как целое число и печатается в шестнадцатеричном представлении (буквы будут в верхнем регистре). |
Спецификатор c
игнорирует значения ширины и дополнения
Попытка использовать спецификаторы с указанием ширины для строки в многобайтовой кодировке может привести к неожиданным результатам.
Переменные будут приведены к подходящему для спецификатора типу:
Тип | Спецификатор |
---|---|
string |
s |
integer |
d ,
u ,
c ,
o ,
x ,
X ,
b
|
double |
g ,
G ,
e ,
E ,
f ,
F
|
vars
Дополнительные строки форматирования.
Если передан только один параметр, распознанные в строке значения будут помещены в массив. Если переданы дополнительные строки форматирования, функция вернёт количество шаблонов, с которыми совпала строка. Необязательные параметры должны передаваться по ссылке.
Пример #1 Пример использования SplFileObject::fscanf()
<?php
$file = new SplFileObject("misc.txt");
while ($userinfo = $file->fscanf("%s %s %s")) {
list ($name, $profession, $countrycode) = $userinfo;
// Работаем с $name $profession $countrycode
}
?>
Содержимое файла users.txt
javier argonaut pe hiroshi sculptor jp robert slacker us luigi florist it