# mfscanf

считывает входные данные из потока, указанного указателем потока (интерфейс с C-функцией fscanf)

# mscanf

считывает входные данные с устройства стандартного ввода данных (интерфейс с C-функцией scanf)

# msscanf

считывает свои входные данные из символьной строки (интерфейс с C-функцией sscanf)

## Последовательность вызова

                [n, v_1,..., v_m] = mfscanf([niter,]fd, format)
                L = mfscanf([niter,] fd,format)

                [n, v_1,..., v_m] = mscanf([niter,] format)
                L = mscanf([niter,]format)

                [n, v_1,..., v_m] = msscanf([niter,]str, format)
                L = msscanf([niter,] str, format)

## Аргументы

format

  Scilab-строка, описывающая формат, который нужно использовать для записи оставшихся операндов. Операнд `format` следует, как можно ближе синтаксису операндов формата C-функции `printf`, как описано в преобразовании в scanf.

fd

  положительное целое число: файловый дескриптор, возвращённый функцией `mopen`. Значение -1 относится к последнему открытому файлу.

str

  Scilab-строка или вектор строк.

niter

  целое число: сколько раз использовать `format`.

n

  целое число: количество данных, которое необходимо прочитать или -1, если конец файла был достигнут прежде, чем что-либо из данных было прочитано.

v_i

  каждая из функций считывает символы, интерпретирует их в соответствии с форматом `format` и сохраняет результаты в своих выходных аргументах. Если выходных аргументов указано больше, чем `n`, то последние аргументы `v_n+1, ..., v_m` устанавливаются пустыми матрицами.

L

  если все данные однородны, то они сохраняются в уникальном векторе, который возвращается, в противном случае последовательности одного типа данных сохраняются в матрицах, а возвращается матричноориентированный типизированный список `mlist` (с типом `cblock`), содержащий все построенные матрицы.

## Описание

Функция `mfscanf` считывает символы из потока `fd`.

Функция `mscanf` считывает символы из окна Scilab.

Функция `msscanf` считывает символы из Scilab-строки `str`.

Необязательный аргумент `niter` определяет сколько раз использовать формат. Одна итерация формирует одну строку в выходной матрице. Если `niter==-1`, то функция выполняет итерации до конца файла. Значение `niter` по умолчанию равно 1.

Комментарии о точности:

`mfscanf` основана на C-функции `fscanf`. Если вы используете `'%f'`, `'%g'`, `'%e'` в качестве формата, то ваши данные будут приведены в тип плавающей запятой и возвращены в Scilab-переменную.

Если эта Scilab-переменная является числом двойной точности, то вы можете получить некоторые ошибки по точности. В этом случае лучше использовать формат `'%lg'`.

## Примеры

    //----------------------------------------------------------
    //--              Простое использование                   --
    //----------------------------------------------------------
    s='1 1.3'  // строка
    [n,a,b]=msscanf(s,"%i %e")
    L=msscanf(s,"%i %e")

    //----------------------------------------------------------
    //--               Примеры форматов                       --
    //----------------------------------------------------------

    msscanf(" 12\n",'%c%c%c%c') // сканирование символов

    msscanf('0xabc','%x') // сканирование в шестнадцатеричном формате

    msscanf('012345abczoo','%[0-9abc]%s')  //обозначение []

    // считывание чисел типов float и double
    msscanf('4345.988','%g')-4345.988 // сканирование числа float
    msscanf('4345.988','%lg')-4345.988 // сканирование числа double

    //----------------------------------------------------------
    //--    сканирование файлов с многострочными данными
    //----------------------------------------------------------
    // создание файла с данными
    u=mopen(TMPDIR+'/foo','w');
    t=(0:0.1:%pi)';mfprintf(u,"%6.3f %6.3f\n",t,sin(t))
    mclose(u);

    // открытие файла на чтение
    u=mopen(TMPDIR+'/foo','r');
    // чтение файла строка за строкой
    [n,a,b]=mfscanf(u,'%e %e') // первая строка, используя синтаксис множества данных с левой стороны
    l=mfscanf(u,'%e %e')       // вторая строка, используя синтаксис одной переменной с левой стороны

    //использование niter для чтения ещё пяти строк
    l=mfscanf(5,u,'%e %e')

    // использование niter=-1 для чтения до конца файла
    l=mfscanf(-1,u,'%e %e')

    // закрытие файла
    mclose(u);

    //------------------------------------------------------------------
    //-- сканирование векторов с многострочными строковыми значениями --
    //------------------------------------------------------------------
    //использование niter для сканирования вектора строковых значений
    [n,Names,Ages]=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d')
    D=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d')
    typeof(D)
    Names=D(:,1) // строки
    Age=D(:,2)   // числовые значения

## Смотрите также

- mclose
- meof
- mfprintf
- fprintfMat
- fscanfMat
- mget
- mgetstr
- mopen
- mprintf
- mput
- mputstr
- mseek
- mtell
- mdelete
- преобразование в scanf