Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.0.0 - Русский


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
Report an issue
<< mfprintf Файлы: функции ввода/вывода mget >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Oct 24 14:37:07 CEST 2023