Выбрать главу

(load имя_файла [сообщение]). Функция загружает файл в выражение Автолиспа и обрабатывает это выражение.

Аргумент имя_файла указывается без расширения (расширение .lsp подразумевается по умолчанию) и может содержать полный путь к файлу. Следует помнить, что если в константе имя_файла встречается обратная косая черта, она должна повторяться дважды (см. табл. 2):

(load “\\support\\my_func”).

Если путь к файлу не указан, Автолисп просматривает доступные директории в следующем порядке: текущая директория, директория текущего рисунка, директории, указанные в переменных окружения, директория, в которой расположены программные файлы Автокада.

Если операция прошла успешно, функция возвращает значение последнего выражения в файле. Если по каким-либо причинам операция невыполнима. Автолисп возвращает сообщение об ошибке и прекращает операцию. Однако включение аргумента сообщение вынуждает Автолисп вернуть его значение и позволяет совершить альтернативную операцию. Следует только помнить, что текст сообщения должен отличаться от последнего выражения в файле.

(close дескриптор_файла). Функция закрывает файл и возвращает nil. Аргумент дескриптор_файла должен соответствовать таковому в функции open. После закрытия дескриптор файла не изменяется, но он имеет силу только при открытии файла.

(findfile имя_файла). Функция отыскивает файл в доступных директориях и, если находит, возвращает его дескриптор, в противном случае возвращает nil.

7.2. Функции преобразования

Функции преобразования играют существенную роль при чтении файлов. Их основная задача - преобразование строковых констант в числовые и наоборот.

(ascii строка). Функция преобразует первый символ строки в целочисленную константу, соответствующую коду ASCII для этого символа.

(ascii "А”) возвращает 65,

(ascii “BIG”) возвращает 66,

(ascii “а”) возвращает 97.

(atof строка) преобразует строку в вещественное число.

(atof “67.5”) возвращает 67.5,

(atof “45”) возвращает 45.0.

(atoi строка) преобразует строку в целое число.

(atoi “45”) возвращает 45,

(atoi “67.5”) возвращает 67.

(chr целое_число) преобразует целое число в соответствующий символ таблицы ASCII, представляя его как строку.

(chr 65) возвращает “А”,

(chr 66) возвращает “В”,

(chr 97) возвращает “а”.

(itoa целое_число) преобразует целое число в соответствующую ему строку.

(itoa 65) возвращает “65”,

(itoa -20) возвращает “-20”.

7.3. Извлечение данных из файла

При работе с базами данных, в том числе с существующими файлами, возникает потребность в извлечении из них необходимой информации. Каждая строка файла представляет собой переменную строкового типа и может быть извлечена из файла для дальнейшей обработки. Ряд функций Автолиспа позволяет выполнять подобные операции.

(read строка). Функция возвращает первый атом или список, принадлежащий строке, сохраняя при этом тип переменной.

(read “hello”) возвращает атом HELLO,

(read “hello there”) возвращает строку HELLO,

(read “(a b с) d”) возвращает список (А В С),

(read “1.2300”) возвращает вещественное 1.23,

(read “87 3.2”) возвращает целое 87.

Следующие две функции позволяют просматривать базы данных и файлы и впоследствии обрабатывать извлеченные данные средствами Автолиспа.

(read-char [дескриптор_файла]). Функция считывает первый символ из строки, введенной с клавиатуры, или из открытого файла, определенного дескриптором, и возвращает код ASCII этого символа. При повторном обращении к функции считывается следующий символ и так далее. Если дескриптор файла не указан, общение осуществляется с командной строкой.

Пусть буфер командной строки пуст. На вызов (read-char) Автолисп не реагирует, ожидая действий оператора. Ввод в командную строку последовательности ABC Enter возвращает 65 (десятичный ASCII-код символа А). Последующие три вызова функции возвращают последовательно 66, 67, 10 (код перевода строки). Следующий вызов функции устанавливает компьютер в режим ожидания. Важно помнить, что функция Автолиспа не является командой Автокада, поэтому ее нельзя вызвать повторно клавишей Enter или правой клавишей мыши, она всегда должна вводиться явно.