считывает входные данные из потока, указанного указателем потока (интерфейс с 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) // числовые значения | ![]() | ![]() |