fscanf

(PHP 4 >= 4.0.1, PHP 5)

fscanf — Обрабатывает данные из файла в соответствии с форматом

Описание

mixed fscanf ( resource $handle , string $format [, mixed &$... ] )

Функция fscanf() похожа на sscanf(), но берёт данные для обработки из файла, ассоциируемого с handle , и интерпретирует их согласно формату format , который описан в документации функции sprintf(). Если в функцию переданы только два аргумента, обработанные значения будут возвращены в виде массива. В ином случае, если были переданы необязательные аргументы, функция вернёт количество присвоенных значений. Необязательные аргументы должны быть переданы по ссылке.

Любое пустое пространство в строке формата эквивалентно любому пустому пространству во входящем потоке. Это означает, что даже табуляция \t в строке формата может быть сопоставлена одному символу пробела во входящем потоке данных.

Пример #1 Пример использования функции fscanf()

<?php
$handle 
fopen("users.txt""r");
while (
$userinfo fscanf($handle"%s\t%s\t%s\n")) {
    list (
$name$profession$countrycode) = $userinfo;
    
//... совершаем какие-либо действия над значениями
}
fclose($handle);
?>

Пример #2 Содержимое файла users.txt

javier  argonaut        pe
hiroshi sculptor        jp
robert  slacker us
luigi   florist it

Замечание: В версиях PHP ниже 4.3.0, максимальное количество символов, которые считывались из файла, составляло 512 (или до первого символа \n - смотря что встретится первым). Начиная с версии PHP 4.3.0, длинна строк не ограничена.

См. также описание функций fread(), fgets(), fgetss(), sscanf(), printf() и sprintf().

Коментарии

For C/C++ programmers.

fscanf() does not work like C/C++, because PHP's fscanf() move file pointer the next line implicitly.
2001-03-13 01:59:52
http://php5.kiev.ua/manual/ru/function.fscanf.html
If you want to read text files in csv format or the like(no matter what character the fields are separated with), you should use fgetcsv() instead. When a text for a field is blank, fscanf() may skip it and fill it with the next text, whereas fgetcsv() correctly regards it as a blank field.
2002-03-16 02:39:28
http://php5.kiev.ua/manual/ru/function.fscanf.html
actually, instead of trying to think of every character that might be in your file, excluding the delimiter would be much easier.

for example, if your delimiter was a comma use:

%[^,]

instead of:

%[a-zA-Z0-9.| ... ]

Just make sure to use %[^,\n] on your last entry so you don't include the newline.
2002-10-24 19:08:36
http://php5.kiev.ua/manual/ru/function.fscanf.html
Yet another function to read a file and return a record/string by a delimiter.  It is very much like fgets() with the delimiter being an additional parameter.  Works great across multiple lines.

function fgetd(&$rFile, $sDelim, $iBuffer=1024) {
    $sRecord = '';
    while(!feof($rFile)) {
        $iPos = strpos($sRecord, $sDelim);
        if ($iPos === false) {
            $sRecord .= fread($rFile, $iBuffer);
        } else {
            fseek($rFile, 0-strlen($sRecord)+$iPos+strlen($sDelim), SEEK_CUR);
            return substr($sRecord, 0, $iPos);
        }
    }
    return false;
}
2005-07-14 12:33:15
http://php5.kiev.ua/manual/ru/function.fscanf.html
to include all type of visible chars you should try:

<?php fscanf($file_handler,"%[ -~]"); ?>
2006-07-24 03:46:33
http://php5.kiev.ua/manual/ru/function.fscanf.html
It would be great to precise in the fscanf documentation
that one call to the function, reads a complete line.
and not just the number of values defined in the format.

If a text file contains 2 lines each containing 4 integer values,
reading the file with 8 fscanf($fd,"%d",$v) doesnt run !
You have to make 2 
fscanf($fd,"%d %d %d %d",$v1,$v2,$v3,$v4);

Then 1 fscanf per line.
2007-05-30 03:48:31
http://php5.kiev.ua/manual/ru/function.fscanf.html
If you want to parse a cron file, you may use this pattern:

<?php

while ($cron fscanf($fp"%s %s %s %s %s %[^\n]s"))
{

}

?>
2013-08-29 00:25:01
http://php5.kiev.ua/manual/ru/function.fscanf.html

    Поддержать сайт на родительском проекте КГБ