Встроенные команды ТCL


scan

        Производит разбор строки в стиле процедуры sscanf.

         Синтаксис
        scan string format varName?varName...?

        Описание

        Данная команда, подобно ANSI С процедуре sscanf, просматривает строку string, выбирает поля и преобразует их в соответствии с очередным спецификатором преобразования в строке format. Выбранные значения преобразуются обратно в строковый вид и последовательно записываются в переменные varName.

        Команда scan просматривает одновременно строки string и format. Если очередной символ в строке format — пробел или табуляция, то он соответствует любому числу (включая ноль) пробельных символов (пробел, табуляция, новая строка) в строке string. Если в строке format встретился символ %, он означает начало очередного спецификатора преобразования. Спецификатор преобразования включает в себя до трех полей после символа %: первое поле может содержать символ *, означающий, что преобразуемая величина будет удалена, а не записана в очередную переменную, второе поле может содержать число, указывающее максимальную ширину поля, и третье поле содержит букву, определяющую тип преобразования. Обязательным является только третье поле.

        Когда команда scan находит спецификатор преобразования в строке format, она пропускает пробельные символы в строке string. Затем она выбирает следующую группу непробельных символов и преобразует их в соответствии со спецификатором преобразования и записывает результат в переменную, соответствующую следующему аргументу команды. Поддерживаются следующие типы преобразований, задаваемые соответствующими символами:

d
        Входное поле должно быть десятичным числом. Результат записывается как десятичная строка.

о
        Входное поле должно быть восьмеричным числом. Результат преобразуется в десятичную строку.

x
        Входное поле должно быть шестнадцатеричным числом. Результат преобразуется в десятичную строку.

c
        Читается один символ, его двоичная величина преобразуется и записывается в переменную как десятичная строка. Начальные пробельные символы в этом случае не пропускаются. В отличие от ANSI С процедуры sscanf входное поле всегда состоит ровно из одного символа, а ширина поля не может быть задана.

s
        Входное поле состоит из всех непробельных символов до следующего пробельного. Все символы копируются в переменную.

е или f или g
        Входное поле должно быть числом с плавающей точкой, состоящим из знака (не обязательно), строки десятичных цифр, возможно с десятичной точкой и порядка (не обязательно), состоящего из буквы е или Е, знака порядка (не обязательно) и строки десятичных цифр.

[chars]
        Входное поле состоит из произвольного числа символов из chars. Соответствующая строка записывается в переменную. Если первый символ в скобках ], то он рассматривается как часть chars, а не как закрывающая скобка для множества символов

[^chars]
        Входное поле состоит из произвольного числа символов, не содержащихся в chars. Соответствующая строка записывается в переменную. Если первый символ в скобках после ^ есть ], то он рассматривается как часть chars, а не как закрывающая скобка для множества символов.

        Число символов, которое выбирается для преобразования, это максимально возможное число символов для соответствующего преобразования (например, так много десятичных цифр, как это возможно для %d, или так много восьмеричных цифр, как это возможно для ). Поле, выбираемое для очередного преобразования, закрывается, как только в строке string встречается пробельный символ или как только поле достигает указанного максимального размера (в зависимости от того, что происходит раньше). Если в спецификаторе преобразования для очередного поля присутствует символ *, то выбранное значение не присваивает никакой переменной, а очередной аргумент команды scan по-прежнему считается неиспользованным.
Hosted by uCoz