Функции ввода данных и указания объектов — КиберПедия 

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Функции ввода данных и указания объектов

2021-06-30 64
Функции ввода данных и указания объектов 0.00 из 5.00 0 оценок
Заказать работу

Эти функции дают возможность пользователю вводить данные в интерактивном режиме. К основным функциям ввода данных и указания объектов относятся следующие:

· (initget [<флаг>] [<строка>]) - задание ключевых слов и ограничений ввода для функций getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword entsel, nentsel и nentselp;

· (getkword [запрос]) - ввод ключевого слова;

· (getint [запрос]) - ввод целого числа в диапазоне от -32768 до +32767;

· (getreal [запрос]) - ввод вещественного числа;

· (getdist [<точка1>] [запрос]) - получение расстояния (как вещественного числа) с помощью ввода числа (на клавиатуре в текущей форме линейных единиц) или указания двух точек (мышью или в координатах на клавиатуре), если не задан аргумент <точка1>; если задана точка с помощью аргумента <точка1>, то расстояние можно получить с помощью ввода числа (на клавиатуре) или указания одной точки, до которой расстояние будет вычисляться от точки, заданной аргументом <точка1>;

· (getangle [<точка1>] [запрос]) - получение угла (как вещественного числа в радианах) с помощью ввода числа (на клавиатуре в текущей форме угловых единиц) или указания двух точек (мышью или в координатах на клавиатуре), если не задан аргумент <точка1>; если задан аргумент <точка1>, то угол можно получить с помощью ввода числа (на клавиатуре в радианах) или указания одной точки, до которой расстояние будет вычисляться от точки, заданной аргументом <точка1>; при вводе угла с помощью числа он принимается с учетом значения системных переменных ANGBASE и ANGDIR; возвращаемое значение учитывает значение ANGBASE и игнорирует значение ANGDIR;

· (getorient [<точка1>] [запрос]) - получение угла как в функции getangle, однако возвращаемое значение не учитывает значений ANGBASE и ANGDIR (т. е. как будто ANGBASE=0, ANGDIR=0);

· (getpoint [<точка1>] [запрос]) - ввод точки с помощью клавиату-ры или мыши; если задан аргумент <точка1>, то при вводе точки с помощью мыши рисуется резиновая нить, начинающаяся в точке, заданной аргументом <точка1>;

· (getcorner <точка1> [запрос]) - ввод точки с помощью клавиатуры или мыши; при вводе точки с помощью мыши рисуется резиновая рамка, начинающаяся в точке, заданной аргументом <точка1>;

· (getstring [<флаг>] [<запрос>]) - ввод строки; если задан аргумент <флаг> и он отличен от nil, то в строке, вводимой пользователем, допускаются пробелы (признаком конца является <Enter>); если аргумент <флаг> отсутствует или задан равным nil, то признаком конца строки является пробел или <Enter>;

· (getvar <имя>) - чтение текущего значения системной переменной с наименованием, заданным аргументом <имя>;

· (getenv <имя>) - чтение текущего значения переменной окружения с наименованием, заданным аргументом <имя>;

· (getcfg <строка>) - извлечение данных приложения из раздела AppData файла acad.cfg; строка, заданная аргументом <строка>, должна иметь вид "АррDаtа/имя_приложения/имя_раздела/... /имя_параметра";

· (getcname <имя>) - получение имени команды в локализованной или английской версии AutoCAD;

· (getfiled <заголовок><имя><расширение><флаг> - вызов диалогового окна поиска файла. Аргумент <заголовок> используется как заголовок диалогового окна; аргумент <имя> - это имя искомого файла или папки, с которой предлагается начать поиск; аргумент <расширение> - расширение искомого файла (<расширение>, равное "", заменяется на "*"); аргумент <флаг> - опции функции (см. ниже).

Вызов функции initget должен предшествовать в программе обращению к функциям getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword, entsel, nentsel и nentselp, поскольку устанавливает в этих функциях ограничения на ввод пользователем данных. В частности, initget может сохранять за пользователем возможность нажатия клавиши <Enter> вместо ввода данных (например, для выбора значения по умолчанию), а может и не сохранять. Аргумент <флаг> функции initget - это битовый флаг, который должен быть целым числом (от 0 до 255), являющимся суммой битов с соответствующими каждому из них весовыми значениями (нумеруются по степеням числа 2). Биты описываются в табл. 3.3. Если бит не установлен, то его значение в битовом флаге считается равным нулю.

Таблица 3.3. Значения битов функции initget

Бит Назначение
1 Не разрешает пустой ввод (пустой ввод- это нажатие только клавиши <Enter>)
2 Не разрешает ввод нуля
4 Не разрешает ввод отрицательных чисел
8 Разрешает указание точек за пределами лимитов, несмотря на значение системной переменной LIMCHECK
16 Данный бит не задействован
32 Заставляет AutoCAD использовать штриховую линию вместо сплошной для резиновой нити и резиновой рамки; если значение системной переменной POPUPS равно нулю, то AutoCAD игнорирует данный бит
64 Запрещает ввод третьей координаты для точки в функции getdist
128 Разрешает произвольный ввод в качестве ключевого слова; преобладает над другими битами и ключевыми словами; в частности, данный бит позволяет игнорировать значение бита 1

Примеры использования битового флага:

· (initget 1) - не разрешен пустой ввод;

· (initget 3) - не разрешены пустой ввод и ввод нуля (3=1+2);

· (initget 7) - не разрешены пустой ввод, ввод нуля и ввод отрицательных чисел (7=1+2+4);

· (initget 6) - разрешен пустой ввод, но не разрешены ввод нуля и ввод отрицательных чисел (6=2+4).

Аргумент <строка> функции initget - это строка, ограниченная двойными кавычками с двух сторон, которая задает ключевые слова, являющиеся допустимыми вариантами ввода. В аргументе <строка> различные варианты ключевых слов разделяются одним или большим количеством пробелов, например: "А Б В Г Д". Если пользователю при выборе ключевого слова разрешаются сокращенные варианты, тогда обязательная часть ключевого слова и аргументе <строка> должна быть указана в верхнем регистре, например: "ПЕРесечение". В этом случае допустимыми вариантами ввода являются "ПЕР", "пер", "ПЕРЕ", "пере", "перес", "ПЕРЕСЕЧЕН", "ПЕРЕСЕЧЕНИЕ" (после трех обязательных букв может идти любое количество необязательных букв, вплоть до набора полного ключевого слова; при вводе букв верхний и нижний регистры равноправны); недопустимыми вариантами будут "П", "ПЕ", "п", "пе".

Возможны случаи, когда вариант сокращенного ввода начинается не с первой буквы ключевого слова, например:

(initget "выход") - здесь допустимыми вариантами ввода будут "х", "хо", "ход" или "выход", "вых", "выхо".

Если ключевое слово в аргументе <строка> указано только в верхнем или только в нижнем регистре, то рядом через запятую можно указать сокращенный вариант: "КРАСНЫЙ, КР" - равносильно записи "красный".

В локализованных версиях системы AutoCAD в аргументе <строка> могут присутствовать варианты ввода для локализованной и английской версий. Тогда в начале должны идти локализованные ключевые слова, а затем их английские аналоги с символом подчеркивания. Количество локализованных ключевых слов должно равняться количеству английских ключевых слов. Например: "прямой криволинейный _straight curved".

Сама функция initget всегда возвращает nil. Однако за ней (не обязательно в следующей строке) должна идти функция, для которой функция initget установила ограничения ввода. В качестве возвращаемого значения эта функция (например, getreal) выдает допустимое значение, указанное пользователем, а в случае ввода сокращенного варианта ключевого слова - полный вариант ключевого слова.

Пример 1 использования функции getint

(initget 6) (setq numb (getint "Введите номер участка (<1>): "))

В этом примере сначала устанавливаются ограничения на будущий ввод целого числа (не допускаются ноль и отрицательные числа). Допускается пустой ввод. Функция getint выводит на экран запрос "Введите номер участка (<1>): ". Ее возвращаемым значением будет nil, если пользователь ответит простым нажатием клавиши <Enter>, или введенное пользователем допустимое целое число (например, 17). В случае ввода пользователем недопустимого целого числа (например, 0 или -2) функция getint выведет сообщение об ошибочном значении и будет ожидать допустимого варианта ввода.

В программе, приведенной выше, далее должна быть предусмотрена обработка пустого ввода для того, чтобы в этом случае присвоить переменной numb значение по умолчанию (1): (if (not numb) (setq numb 1))

Пример 2 использования функции getint

(initget 6 "Левый Правый Нижний Верхний") (setq numb (getint "Введите номер участка (<1>) или [Левый/Правый/Нижний/ Верхний]: "))

В этом примере устанавливаются ограничения на будущий ввод целого числа (не допускаются ноль и отрицательные числа), однако допускаются пустой ввод и ввод одного из четырех ключевых слов. Далее в программе должен идти анализ значения переменной numb на nil, на положительное целое число и на ключевые слова ("левый", "правый", "нижний", "верхний").

Пример использования функции getkword

(initget 1 "Да Нет") (setq reply (getkword "Продолжить цикл [Да/Нет]: "))

В этом примере переменной reply присваивается значение "да" или "нет", пустой ввод не допускается (хотя можно было бы разрешить пустой ввод и далее использовать его для выбора значения по умолчанию).

Поскольку не все биты функции initget используются со всеми функциями ввода данных, то в табл. 3.4 разбираются варианты применения (в случае возможности использования ставится плюс).

Таблица 3.4. Варианты применения битовых флагов

Функция Бит1 Бит 2 Бит 4 Бит8 Бит 32 Бит 64 Бит 128
getint + + +       +
getreal + + +       +
getdist + + +   + + +
getangle + +     +   +
getorient + +     +   +
getpoint +     + +   +
getcorner +     + +   +
getkword +           +

Функции entsel, nentsel и nentselp не используют биты функции initget и управляются только ключевыми словами.

Функция getstring не использует ни биты, ни ключевые слова функции initget.

Функции getvar и getenv позволяют прочитать значения, соответственно, системных переменных AutoCAD и переменных окружения.

Примеры:

· (getvar "CECOLOR") - возвращает значение системной переменной "CECOLOR";

· (getvar "PDMODE") - возвращает значение системной переменной "PDMODE";

· (getenv "CONFIG") - возвращает значение переменной окружения "CONFIG".

Функция getfiled позволяет вызвать диалоговое окно выбора файла в удобном виде.

Пример:

(getfiled "Выберите файл данных для расчета" "d: \\Tests\\AuroLISP\\Fields" "rtf" l6) - вызывает окно, приведенное на рис. 3.3:


Рис. 3.3. Диалоговое окно, вызываемое функцией getfiled

Второй аргумент функции getfiled, в зависимости от значения четвертого аргумента (<флаг>), может задавать либо имя файла по умолчанию, либо папку, с которой предлагается начать поиск. Битовый флаг, задаваемый аргументом <флаг> получается как сумма тех битов, нумеруемых степенями числа 2, которые будут установлены. Описание битов приведено в табл. 3.5:

Таблица 3.5. Значения битов функции getfiled

Бит Значение
1 Подсказка имени при создании нового файла (нельзя использовать для выбора существующего файла)
2 Не используется
4 Разрешает вводить имя файла с любым расширением (или без расширения)
8 Если бит 1 не установлен, то система AutoCAD выполняет поиск файла, имя которого задано в аргументе <имя> по списку путей, заданных в настройке, причем getfiled возвращает имя файла без пути; в противном случае возвращается полное имя файла (с путем)
16 Аргумент <имя> трактуется как имя папки, в которой нужно искать файл; при этом в поле Имя файла: (File name:) ничего не вписывается по умолчанию (см. рис.3.4); аналогичный эффект достигается и в том случае, если аргумент <имя> заканчивается обратной косой чертой
32 Если установлен бит 1, то не будет выводиться предупреждающее сообщение при записи поверх существующего файла
64 Не передает файл, если в качестве имени задан URL-адрес
128 Не допускается использование URL-адресов

С функциями getvar и getenv тесно связаны функции, выполняющие обратные операции:

· (setvar <имя><значение>) - установка значения системной переменной с наименованием, заданным аргументом <имя>;

· (setenv <имя><значение>) - установка значения переменной окружения с наименованием, заданным аргументом <имя>.

В обеих функциях аргументы <имя> и <значение> должны быть текстовыми строками.

Функция setcfg является обратной по отношению к функции getcfg:

(setcfg <имя><значение>) - запись данных приложения в раздел AppData файла acad.cfg; аргумент <имя> должен иметь вид "AppData/ имя_приложения/имя_раздела/... /имя_параметра" (до 496 символов длиной); возвращаемое значение функции setcfg - аргумент <значение> или nil (в случае ошибки).

Функции доступа к файлам

В данном разделе рассматриваются функции, выполняющие операции с файлами (поиск, открытие и закрытие), операции чтения и записи строк или символов в файл, а также вывода на экран различных сообщений:

· (findfile <файл>) - поиск файла по имени (краткому или полному) или поиск папки по полному имени; если аргумент не содержит полного пути, то поиск выполняется по стандартным путям поиска файлов для системы AutoCAD; возвращается полное имя файла (папки), если он найден, или nil в противном случае;

· (open <файл><режим>) - открытие файла с именем, заданным аргументом <файл>; аргумент <режим> - это строка из одного символа, определяющего режим, в котором открывается файл ("w" или "W" - запись, "а" или "А" - дополнение, "г" или "R" - чтение); в предыдущих версиях AutoLISP не допускалось указание режима в верхнем регистре; если аргумент <файл> указывает на несуществующий файл в режимах "w", "W", "а" и "А", то он создается; возвращаемое значение - дескриптор файла (при успешном открытии) или nil (при неудаче);

· (close <дескриптор>) - закрытие файла; единственным аргументом является <дескриптор> - переменная, создаваемая функцией open и управляющая процессами записи и чтения: функция close возвращает nil, если указан действительный дескриптор, или сообщение об ошибке;

· (read-line [<дескриптор>]) - чтение строки из файла с заданным дескриптором; если аргумент <дескриптор> опущен, то выполняется чтение строки с клавиатуры (строка должна закончиться нажатием клавиши <Enter>);

· (write-line <строка> [<дескриптор>]) - запись строки, заданной аргументом <строка> в файл с заданным дескриптором; если аргумент <дескриптор> опущен или равен nil, то система AutoCAD выводит строку на экран; при записи строка, заданная аргументом <строка>, заносится в файл (или на экран) без ограничивающих ее двойных кавычек;

· (princ [<аргумент> [<дескриптор>]]) - запись аргумента, который может быть любым выражением AutoLISP (а также числом, списком, строкой, именем примитива и т. д.), в файл с заданным дескриптором. Если аргумент <дескриптор> опущен или равен nil, то <аргумент> выводится на экран. Если <аргумент> - строка, то при записи она заносится в файл (или на экран) без ограничивающих ее двойных кавычек. Если опущены оба аргумента, то функция осуществляет так называемый тихий выход, т. е. не возвращает никакого значения, в том числе nil;

· (prinl<аргумент> [<дескриптор>] ]) - функция аналогична princ, но если <аргумент> - строка, то при записи она заносится в файл (или на экран) с ограничивающими двойными кавычками; специальные символы (обратная косая черта, кавычки, конец строки и т. п.) предваряются обратной косой чертой; если опущены оба аргумента, то функция prinl тоже осуществляет тихий выход;

· (print [<аргумент> [<дескриптор>]]) - функция аналогична prini, но при выводе добавляет перед аргументом символ конца строки предыдущей записи, а после аргумента - пробел; тоже может осуществлять тихий выход;

· (read-char [<дескриптор>]) - чтение символа из файла. Если аргумент не задан, то производится чтение символа из буфера клавиатуры. Возвращает код прочитанного символа (аналогично функции ascii); нажатие на клавишу <Enter> возвращает код 10;

· (write-char <код> [<дескриптор>]) - запись символа с заданным кодом в файл; если аргумент не задан, то вывод символа на экран; возвращает код символа; невозможно с помощью данной функции записать символ с кодом 0;

· (prompt <сообщение>) - вывод сообщения на экран (если используется установка системы AutoCAD на двухэкранный вычислительный комплекс, то на оба экрана; чтобы избежать этого, можно пользоваться для вывода сообщений функцией princ).

Приведенные выше функции AutoLISP дают пользователю возможность работы только с файлами последовательного доступа. Указателем позиции в файле, с которой далее будет происходить чтение (запись), является переменная, в которой хранится дескриптор этого файла. Механизм работы с файлами виден на следующем примере.

Пример использования функций работы с файлами

; Операции записи (setq ff (open "с:\\test.txt" "w")) (write-line "Перваястрока" ff) (write-char 65 ff) (write-char 67 ff) (write-line "Вторая строка" ff) (close ff); Операциичтения(setq ff (open "c:\\test.txt" "r")) (setq s1 (read-char ff)) (setq s2 (read-char ff)) (setq strl (read-line ff)) (setq str2 (read-line ff)) (setq str3 (read-line ff)) (close ff) (setq ff nil)

Первое выражение - (setq ff (open "c: \\test.txt" "w")) - создает переменную ff, в которую заносится дескриптор файла c:\test.txt, открываемого для записи (в первом аргументе функции open обратная косая черта удваивается). Затем выражение (write-line "первая строка" ff) заносит в открытый файл первую запись (текст "Первая строка" из 13 символов) и символы с кодами 13 и 10, которые в файлах последовательного доступа разделяют записи.

В операционной системе UNIX признаком конца записи является один символ с кодом 10.

После этого указатель файла показывает на начало второй записи, куда поочередно - с помощью двукратного применения функции write-char - заносятся символы с кодами 65 (буква "А") и 67 ("С"). Затем в продолжение второй записи файла с помощью функции write-line заносится текст "вторая строка" (13 символов) и добавляются символы с кодами 13 и 10, означающие конец второй записи файла. Вслед за этим файл с дескриптором ff закрывается функцией close.

Вторая часть листинга начинается функцией открытия того же файла, но уже в режиме чтения. Затем с помощью двукратного применения функций read-char читаются два первых символа первой записи, которые запоминаются в переменных s1 и s2. После этого в переменную strl читается остаток первой записи. Далее в переменную str2 читается вторая запись файла. Третья операция чтения с помощью функции read-line приносит nil, поскольку в файле c:\test.txt третьей записи нет. По окончании выполнения рассмотренной программы переменная ff очищается (в ней хранился дескриптор файла). Другие переменные получат такие значения:

s1 = 207 (код символа "П"); s2 = 229 (код символа "е"); strl = "рвая строка"; str2 =: "АСВторая строка"; str3 = nil.

Функции princ, prini, print и prompt чаще всего используются для вывода сообщений в командную строку системы AutoCAD, причем prini и print выводят сообщения в кавычках (другие особенности описаны выше). Вместо функции write-line для записи в файл можно пользоваться функцией princ, но заносить признак конца записи, который выглядит как "\n", пользователь должен сам. Например:

(princ "Первая запись\n" ff)

Поделиться с друзьями:

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.037 с.