Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語
Справка Scilab >> Файлы: функции ввода/вывода > mfscanf

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 — открывает файл в Scilab'е
  • mprintf — converts, formats, and writes data to the main scilab window
  • mput — записывает байт или слово в заданном двоичном формате
  • mputstr — записывает символьную строку в файл
  • mseek — устанавливает текущую позицию в двоичном файле
  • mtell — возвращает смещение текущего байта относительно начала файла
  • mdelete — удаляет файлы
  • преобразование в scanf — спецификации преобразования mscanf, msscanf, mfscanf
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 14 15:13:25 CET 2017