150 lines
9.5 KiB
HTML
150 lines
9.5 KiB
HTML
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
|
||
<html>
|
||
<head>
|
||
<title>scan</title>
|
||
</head>
|
||
<body>
|
||
<h1>scan</h1>
|
||
|
||
<p>Производит разбор строки в стиле процедуры <strong>sscanf</strong>.</p>
|
||
|
||
<h2>СИНТАКСИС</h2>
|
||
|
||
<pre>
|
||
<strong>scan</strong> <em>string</em> <em>format</em> <em>varName</em> ?<em>varName</em>...?
|
||
</pre>
|
||
|
||
<h2>ВВЕДЕНИЕ</h2>
|
||
|
||
<p>Данная команда, подобно ANSI C процедуре <strong>sscanf</strong>,
|
||
просматривает строку <em>string</em>, выбирает поля и преобразует
|
||
их в соответствии с очередным спецификатором преобразования в
|
||
строке <em>format</em>. Выбранные значения преобразуются обратно в
|
||
строковый вид и последовательно записываются в переменные
|
||
<em>varName</em>.</p>
|
||
|
||
<h2>ПРОЦЕСС СКАНИРОВАНИЯ</h2>
|
||
|
||
<p>Команда <strong>scan</strong> просматривает одновременно строки
|
||
<em>string</em> и <em>format</em>. Если очередной символ в строке
|
||
<em>format</em> пробел или табуляция, то он соответствует любому
|
||
числу (включая ноль) пробельных символов (пробел, табуляция,
|
||
новая строка) в строке <em>string</em>. Если в строке
|
||
<em>format</em> встретился символ <strong>%</strong>, он означает начало
|
||
очередного спецификатора преобразования. Спецификатор
|
||
преобразования включает в себя до трех полей после символа
|
||
<strong>%</strong>: первое поле может содержать символ <strong>*</strong>,
|
||
означающий, что преобразуемая величина будет удалена, а не
|
||
записана в очередную переменную, второе поле может содержать
|
||
число, указывающее максимальную ширину поля, и третье поле
|
||
содержит букву, определяющую тип преобразования. Обязательным
|
||
является только третье поле.</p>
|
||
|
||
<p>Когда команда <strong>scan</strong> находит спецификатор
|
||
преобразования в строке <em>format</em>, она пропускает
|
||
пробельные символы в строке <em>string</em>. Затем она выбирает
|
||
следующую группу непробельных символов и преобразует их в
|
||
соответствии со спецификатором преобразования и записывает
|
||
результат в переменную, соответствующую следующему аргументу
|
||
команды. Поддерживаются следующие типы преобразований,
|
||
задаваемые соответствующими символами:</p>
|
||
|
||
<dl>
|
||
<dt><strong>d</strong></dt>
|
||
|
||
<dd>Входное поле должно быть десятичным числом. Результат
|
||
записывается как десятичная строка.</dd>
|
||
|
||
<dt><strong>o</strong></dt>
|
||
|
||
<dd>Входное поле должно быть восьмеричным числом. Результат
|
||
преобразуется в десятичную строку.</dd>
|
||
|
||
<dt><strong>x</strong></dt>
|
||
|
||
<dd>Входное поле должно быть шестнадцатеричным числом.
|
||
Результат преобразуется в десятичную строку.</dd>
|
||
|
||
<dt><strong>c</strong></dt>
|
||
|
||
<dd>Читается один символ, его двоичная величина преобразуется и
|
||
записывается в переменную как десятичная строка. Начальные
|
||
пробельные символы в этом случае не пропускаются. В отличие от
|
||
ANSI C процедуры <strong>sscanf</strong> входное поле всегда состоит
|
||
ровно из одного символа, а ширина поля не может быть
|
||
задана.</dd>
|
||
|
||
<dt><strong>s</strong></dt>
|
||
|
||
<dd>Входное поле состоит из всех непробельных символов до
|
||
следующего пробельного. Все символы копируются в
|
||
переменную.</dd>
|
||
|
||
<dt><strong>e</strong> или <strong>f</strong> или <strong>g</strong></dt>
|
||
|
||
<dd>Входное поле должно быть числом с плавающей точкой,
|
||
состоящим из знака (не обязательно), строки десятичных цифр,
|
||
возможно с десятичной точкой и порядка (не обязательно),
|
||
состоящего из буквы <strong>e</strong> или <strong>E</strong>, знака порядка (не
|
||
обязательно) и строки десятичных цифр.</dd>
|
||
|
||
<dt><strong>[<em>chars</em>]</strong></dt>
|
||
|
||
<dd>Входное поле состоит из произвольного числа символов из
|
||
<em>chars</em>. Соответствующая строка записывается в
|
||
переменную. Если первый символ в скобках <strong>]</strong>, то он
|
||
рассматривается как часть <em>chars</em>, а не как закрывающая
|
||
скобка для множества символов.</dd>
|
||
|
||
<dt><strong>[^<em>chars</em>]</strong></dt>
|
||
|
||
<dd>Входное поле состоит из произвольного числа символов, не
|
||
содержащихся в <em>chars</em>. Соответствующая строка
|
||
записывается в переменную. Если первый символ в скобках после
|
||
<strong>^</strong> есть <strong>]</strong>, то он рассматривается как
|
||
часть <em>chars</em>, а не как закрывающая скобка для множества
|
||
символов.</dd>
|
||
</dl>
|
||
|
||
<p>Число символов, которое выбирается для преобразования, это
|
||
максимально возможное число символов для соответствующего
|
||
преобразования (например, так много десятичных цифр, как это
|
||
возможно для <strong>%d</strong>, или так много восьмеричных цифр, как это
|
||
возможно для <strong>%o</strong>). Поле, выбираемое для очередного
|
||
преобразования, закрывается, как только в строке <em>string</em>
|
||
встречается пробельный символ или как только поле достигает
|
||
указанного максимального размера (в зависимости от того, что
|
||
происходит раньше). Если в спецификаторе преобразования для
|
||
очередного поля присутствует символ <strong>*</strong>, то выбранное
|
||
значение не присваивает никакой переменной, а очередной аргумент
|
||
команды <strong>scan</strong> по-прежнему считается неиспользованным.</p>
|
||
|
||
<h2>ОТЛИЧИЯ ОТ ANSI SSCANF</h2>
|
||
|
||
<p>Поведение команды <strong>scan</strong> не отличается от поведения ANSI
|
||
C процедуры <strong>sscanf</strong> за исключением следующих моментов:</p>
|
||
<table>
|
||
<tr>
|
||
<td>[1]</td>
|
||
<td>Спецификаторы <strong>%p</strong> и <strong>%n</strong> не поддерживаются.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>[2]</td>
|
||
<td>Для спецификатора <strong>%c</strong> нельзя указывать ширину
|
||
поля. Только один символ переводится в десятичную
|
||
величину, которая и присваивается соответствующей
|
||
переменной.</td>
|
||
</tr>
|
||
<tr>
|
||
<td>[3]</td>
|
||
<td>Модификаторы <strong>l</strong>, <strong>h</strong> и <strong>L</strong> игнорируются. Целые
|
||
числа преобразуются так, как будто никакого модификатора
|
||
не было задано, а действительные числа - как при
|
||
модификаторе <strong>l</strong>, то есть с использованием типа
|
||
<strong>double</strong> для внутреннего представления.</td>
|
||
</tr>
|
||
</table>
|
||
</body>
|
||
</html>
|
||
|