1 <?xml version="1.0" encoding="UTF-8"?>
3 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 * Copyright (C) 2008 - INRIA
7 * This file must be used under the terms of the CeCILL.
8 * This source file is licensed as described in the file COPYING, which
9 * you should have received as part of this distribution. The terms
10 * are also available at
11 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
14 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="mfscanf" xml:lang="ru">
16 <refname>mfscanf</refname>
18 считывает входные данные из потока, указанного указателем потока (интерфейс с C-функцией fscanf)
21 <refnamediv xml:id="mscanf">
22 <refname>mscanf</refname>
24 считывает входные данные с устройства стандартного ввода данных (интерфейс с C-функцией scanf)
27 <refnamediv xml:id="msscanf">
28 <refname>msscanf</refname>
30 считывает свои входные данные из символьной строки (интерфейс с C-функцией sscanf)
34 <title>Последовательность вызова</title>
36 [n, v_1,..., v_m] = mfscanf([niter,]fd, format)
37 L = mfscanf([niter,] fd,format)
39 [n, v_1,..., v_m] = mscanf([niter,] format)
40 L = mscanf([niter,]format)
42 [n, v_1,..., v_m] = msscanf([niter,]str, format)
43 L = msscanf([niter,] str, format)
47 <title>Аргументы</title>
53 Scilab-строка, описывающая формат, который нужно использовать для
54 записи оставшихся операндов. Операнд <varname>format</varname>
55 следует, как можно ближе синтаксису операндов формата C-функции
56 <function>printf</function>, как описано в
57 <link linkend="scanf_conversion">преобразовании в scanf</link>.
65 положительное целое число: файловый дескриптор, возвращённый функцией <function>mopen</function>. Значение -1 относится к последнему открытому файлу.
72 <para>Scilab-строка или вектор строк.</para>
79 целое число: сколько раз использовать <varname>format</varname>.
87 целое число: количество данных, которое необходимо прочитать или -1, если конец файла был достигнут прежде, чем что-либо из данных было прочитано.
95 каждая из функций считывает символы, интерпретирует их в
96 соответствии с форматом <varname>format</varname> и сохраняет
97 результаты в своих выходных аргументах. Если выходных аргументов
98 указано больше, чем <varname>n</varname>, то последние аргументы
99 <varname>v_n+1, ..., v_m</varname> устанавливаются пустыми
108 если все данные однородны, то они сохраняются в уникальном
109 векторе, который возвращается, в противном случае
110 последовательности одного типа данных сохраняются в матрицах, а
111 возвращается матричноориентированный типизированный список <literal>mlist</literal> (с типом <literal>cblock</literal>), содержащий все построенные матрицы.
118 <title>Описание</title>
120 Функция <function>mfscanf</function> считывает символы из потока
121 <varname>fd</varname>.
124 Функция <function>mscanf</function> считывает символы из окна Scilab.
127 Функция <function>msscanf</function> считывает символы из Scilab-строки
128 <varname>str</varname>.
131 Необязательный аргумент <varname>niter</varname> определяет сколько раз
132 использовать формат. Одна итерация формирует одну строку в выходной
133 матрице. Если <code>niter==-1</code>, то функция выполняет итерации до
134 конца файла. Значение <varname>niter</varname> по умолчанию равно 1.
136 <para>Комментарии о точности:</para>
138 <function>mfscanf</function> основана на C-функции
139 <function>fscanf</function>. Если вы используете
140 <literal>'%f'</literal>, <literal>'%g'</literal>,
141 <literal>'%e'</literal> в качестве формата, то ваши данные будут
142 приведены в тип плавающей запятой и возвращены в Scilab-переменную.
145 Если эта Scilab-переменная является числом двойной точности, то вы
146 можете получить некоторые ошибки по точности. В этом случае лучше
147 использовать формат <literal>'%lg'</literal>.
151 <title>Примеры</title>
152 <programlisting role="example"><![CDATA[
153 //----------------------------------------------------------
154 //-- Простое использование --
155 //----------------------------------------------------------
157 [n,a,b]=msscanf(s,"%i %e")
160 //----------------------------------------------------------
161 //-- Примеры форматов --
162 //----------------------------------------------------------
164 msscanf(" 12\n",'%c%c%c%c') // сканирование символов
166 msscanf('0xabc','%x') // сканирование в шестнадцатеричном формате
168 msscanf('012345abczoo','%[0-9abc]%s') //обозначение []
170 // считывание чисел типов float и double
171 msscanf('4345.988','%g')-4345.988 // сканирование числа float
172 msscanf('4345.988','%lg')-4345.988 // сканирование числа double
174 //----------------------------------------------------------
175 //-- сканирование файлов с многострочными данными
176 //----------------------------------------------------------
177 // создание файла с данными
178 u=mopen(TMPDIR+'/foo','w');
179 t=(0:0.1:%pi)';mfprintf(u,"%6.3f %6.3f\n",t,sin(t))
182 // открытие файла на чтение
183 u=mopen(TMPDIR+'/foo','r');
184 // чтение файла строка за строкой
185 [n,a,b]=mfscanf(u,'%e %e') // первая строка, используя синтаксис множества данных с левой стороны
186 l=mfscanf(u,'%e %e') // вторая строка, используя синтаксис одной переменной с левой стороны
188 //использование niter для чтения ещё пяти строк
189 l=mfscanf(5,u,'%e %e')
191 // использование niter=-1 для чтения до конца файла
192 l=mfscanf(-1,u,'%e %e')
197 //------------------------------------------------------------------
198 //-- сканирование векторов с многострочными строковыми значениями --
199 //------------------------------------------------------------------
200 //использование niter для сканирования вектора строковых значений
201 [n,Names,Ages]=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d')
202 D=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d')
204 Names=D(:,1) // строки
205 Age=D(:,2) // числовые значения
208 <refsection role="see also">
209 <title>Смотрите также</title>
210 <simplelist type="inline">
212 <link linkend="mclose">mclose</link>
215 <link linkend="meof">meof</link>
218 <link linkend="mfprintf">mfprintf</link>
221 <link linkend="fprintfMat">fprintfMat</link>
224 <link linkend="fscanfMat">fscanfMat</link>
227 <link linkend="mget">mget</link>
230 <link linkend="mgetstr">mgetstr</link>
233 <link linkend="mopen">mopen</link>
236 <link linkend="mprintf">mprintf</link>
239 <link linkend="mput">mput</link>
242 <link linkend="mputstr">mputstr</link>
245 <link linkend="mseek">mseek</link>
248 <link linkend="mtell">mtell</link>
251 <link linkend="mdelete">mdelete</link>
254 <link linkend="scanf_conversion">преобразование в scanf</link>