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