1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 * Copyright (C) 2008 - INRIA
5 * ...
6 *
7 * Copyright (C) 2012 - 2016 - Scilab Enterprises
8 *
9 * This file is hereby licensed under the terms of the GNU GPL v2.0,
10 * pursuant to article 5.3.4 of the CeCILL v.2.1.
11 * This file was originally licensed under the terms of the CeCILL v2.1,
12 * and continues to be available under such terms.
13 * For more information, see the COPYING file which you should have received
14 * along with this program.
15 *
16 -->
17<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">
18    <refnamediv>
19        <refname>mfscanf</refname>
20        <refpurpose>
21            считывает входные данные из потока, указанного указателем потока (интерфейс с C-функцией fscanf)
22        </refpurpose>
23    </refnamediv>
24    <refnamediv xml:id="mscanf">
25        <refname>mscanf</refname>
26        <refpurpose>
27            считывает входные данные с устройства стандартного ввода данных (интерфейс с C-функцией scanf)
28        </refpurpose>
29    </refnamediv>
30    <refnamediv xml:id="msscanf">
31        <refname>msscanf</refname>
32        <refpurpose>
33            считывает свои входные данные из символьной строки (интерфейс с C-функцией sscanf)
34        </refpurpose>
35    </refnamediv>
36    <refsynopsisdiv>
37        <title>Синтаксис</title>
38        <synopsis>
39            [n, v_1,..., v_m] = mfscanf([niter,]fd, format)
40            L = mfscanf([niter,] fd,format)
41
42            [n, v_1,..., v_m] = mscanf([niter,] format)
43            L = mscanf([niter,]format)
44
45            [n, v_1,..., v_m] = msscanf([niter,]str, format)
46            L = msscanf([niter,] str, format)
47        </synopsis>
48    </refsynopsisdiv>
49    <refsection>
50        <title>Аргументы</title>
51        <variablelist>
52            <varlistentry>
53                <term>format</term>
54                <listitem>
55                    <para>
56                        Scilab-строка, описывающая формат, который нужно использовать для
57                        записи оставшихся операндов. Операнд <varname>format</varname>
58                        следует, как можно ближе синтаксису операндов формата C-функции
59                        <function>printf</function>, как описано в
60                        <link linkend="scanf_conversion">преобразовании в scanf</link>.
61                    </para>
62                </listitem>
63            </varlistentry>
64            <varlistentry>
65                <term>fd</term>
66                <listitem>
67                    <para>
68                        положительное целое число: файловый дескриптор, возвращённый функцией <function>mopen</function>. Значение -1 относится к последнему открытому файлу.
69                    </para>
70                </listitem>
71            </varlistentry>
72            <varlistentry>
73                <term>str</term>
74                <listitem>
75                    <para>Scilab-строка или вектор строк.</para>
76                </listitem>
77            </varlistentry>
78            <varlistentry>
79                <term>niter</term>
80                <listitem>
81                    <para>
82                        целое число: сколько раз использовать <varname>format</varname>.
83                    </para>
84                </listitem>
85            </varlistentry>
86            <varlistentry>
87                <term>n</term>
88                <listitem>
89                    <para>
90                        целое число: количество данных, которое необходимо прочитать или -1, если конец файла был достигнут прежде, чем что-либо из данных было прочитано.
91                    </para>
92                </listitem>
93            </varlistentry>
94            <varlistentry>
95                <term>v_i</term>
96                <listitem>
97                    <para>
98                        каждая из функций считывает символы, интерпретирует их в
99                        соответствии с форматом <varname>format</varname> и сохраняет
100                        результаты в своих выходных аргументах. Если выходных аргументов
101                        указано больше, чем <varname>n</varname>, то последние аргументы
102                        <varname>v_n+1, ..., v_m</varname> устанавливаются пустыми
103                        матрицами.
104                    </para>
105                </listitem>
106            </varlistentry>
107            <varlistentry>
108                <term>L</term>
109                <listitem>
110                    <para>
111                        если все данные однородны, то они сохраняются в уникальном
112                        векторе, который возвращается, в противном случае
113                        последовательности одного типа данных сохраняются в матрицах, а
114                        возвращается матричноориентированный типизированный список <literal>mlist</literal> (с типом <literal>cblock</literal>), содержащий все построенные матрицы.
115                    </para>
116                </listitem>
117            </varlistentry>
118        </variablelist>
119    </refsection>
120    <refsection>
121        <title>Описание</title>
122        <para>
123            Функция <function>mfscanf</function> считывает символы из потока
124            <varname>fd</varname>.
125        </para>
126        <para>
127            Функция <function>mscanf</function> считывает символы из окна Scilab.
128        </para>
129        <para>
130            Функция <function>msscanf</function> считывает символы из Scilab-строки
131            <varname>str</varname>.
132        </para>
133        <para>
134            Необязательный аргумент <varname>niter</varname> определяет сколько раз
135            использовать формат. Одна итерация формирует одну строку в выходной
136            матрице. Если <code>niter==-1</code>, то функция выполняет итерации до
137            конца файла. Значение <varname>niter</varname> по умолчанию равно 1.
138        </para>
139        <para>Комментарии о точности:</para>
140        <para>
141            <function>mfscanf</function> основана на C-функции
142            <function>fscanf</function>. Если вы используете
143            <literal>'%f'</literal>, <literal>'%g'</literal>,
144            <literal>'%e'</literal> в качестве формата, то ваши данные будут
145            приведены в тип плавающей запятой и возвращены в Scilab-переменную.
146        </para>
147        <para>
148            Если эта Scilab-переменная является числом двойной точности, то вы
149            можете получить некоторые ошибки по точности. В этом случае лучше
150            использовать формат <literal>'%lg'</literal>.
151        </para>
152    </refsection>
153    <refsection>
154        <title>Примеры</title>
155        <programlisting role="example"><![CDATA[
156//----------------------------------------------------------
157//--              Простое использование                   --
158//----------------------------------------------------------
159s='1 1.3'  // строка
160[n,a,b]=msscanf(s,"%i %e")
161L=msscanf(s,"%i %e")
162
163//----------------------------------------------------------
164//--               Примеры форматов                       --
165//----------------------------------------------------------
166
167msscanf(" 12\n",'%c%c%c%c') // сканирование символов
168
169msscanf('0xabc','%x') // сканирование в шестнадцатеричном формате
170
171msscanf('012345abczoo','%[0-9abc]%s')  //обозначение []
172
173// считывание чисел типов float и double
174msscanf('4345.988','%g')-4345.988 // сканирование числа float
175msscanf('4345.988','%lg')-4345.988 // сканирование числа double
176
177//----------------------------------------------------------
178//--    сканирование файлов с многострочными данными
179//----------------------------------------------------------
180// создание файла с данными
181u=mopen(TMPDIR+'/foo','w');
182t=(0:0.1:%pi)';mfprintf(u,"%6.3f %6.3f\n",t,sin(t))
183mclose(u);
184
185// открытие файла на чтение
186u=mopen(TMPDIR+'/foo','r');
187// чтение файла строка за строкой
188[n,a,b]=mfscanf(u,'%e %e') // первая строка, используя синтаксис множества данных с левой стороны
189l=mfscanf(u,'%e %e')       // вторая строка, используя синтаксис одной переменной с левой стороны
190
191//использование niter для чтения ещё пяти строк
192l=mfscanf(5,u,'%e %e')
193
194// использование niter=-1 для чтения до конца файла
195l=mfscanf(-1,u,'%e %e')
196
197// закрытие файла
198mclose(u);
199
200//------------------------------------------------------------------
201//-- сканирование векторов с многострочными строковыми значениями --
202//------------------------------------------------------------------
203//использование niter для сканирования вектора строковых значений
204[n,Names,Ages]=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d')
205D=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d')
206typeof(D)
207Names=D(:,1) // строки
208Age=D(:,2)   // числовые значения
209 ]]></programlisting>
210    </refsection>
211    <refsection role="see also">
212        <title>Смотрите также</title>
213        <simplelist type="inline">
214            <member>
215                <link linkend="mclose">mclose</link>
216            </member>
217            <member>
218                <link linkend="meof">meof</link>
219            </member>
220            <member>
221                <link linkend="mfprintf">mfprintf</link>
222            </member>
223            <member>
224                <link linkend="fprintfMat">fprintfMat</link>
225            </member>
226            <member>
227                <link linkend="fscanfMat">fscanfMat</link>
228            </member>
229            <member>
230                <link linkend="mget">mget</link>
231            </member>
232            <member>
233                <link linkend="mgetstr">mgetstr</link>
234            </member>
235            <member>
236                <link linkend="mopen">mopen</link>
237            </member>
238            <member>
239                <link linkend="mprintf">mprintf</link>
240            </member>
241            <member>
242                <link linkend="mput">mput</link>
243            </member>
244            <member>
245                <link linkend="mputstr">mputstr</link>
246            </member>
247            <member>
248                <link linkend="mseek">mseek</link>
249            </member>
250            <member>
251                <link linkend="mtell">mtell</link>
252            </member>
253            <member>
254                <link linkend="mdelete">mdelete</link>
255            </member>
256            <member>
257                <link linkend="scanf_conversion">преобразование в scanf</link>
258            </member>
259        </simplelist>
260    </refsection>
261</refentry>
262
263