считывает входные данные из потока, указанного указателем потока (интерфейс с C-функцией fscanf)
считывает входные данные с устройства стандартного ввода данных (интерфейс с C-функцией scanf)
считывает свои входные данные из символьной строки (интерфейс с 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)
Scilab-строка, описывающая формат, который нужно использовать для
записи оставшихся операндов. Операнд format
следует, как можно ближе синтаксису операндов формата C-функции
printf
, как описано в
преобразовании в scanf.
положительное целое число: файловый дескриптор, возвращённый функцией mopen
. Значение -1 относится к последнему открытому файлу.
Scilab-строка или вектор строк.
целое число: сколько раз использовать format
.
целое число: количество данных, которое необходимо прочитать или -1, если конец файла был достигнут прежде, чем что-либо из данных было прочитано.
каждая из функций считывает символы, интерпретирует их в
соответствии с форматом format
и сохраняет
результаты в своих выходных аргументах. Если выходных аргументов
указано больше, чем n
, то последние аргументы
v_n+1, ..., v_m
устанавливаются пустыми
матрицами.
если все данные однородны, то они сохраняются в уникальном
векторе, который возвращается, в противном случае
последовательности одного типа данных сохраняются в матрицах, а
возвращается матричноориентированный типизированный список 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) // числовые значения | ![]() | ![]() |