Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
(open имя_файла режим). Функция открывает файл в качестве объекта для осуществления операций ввода/вывода. Используется совместно с функцией (setq …), присваивающей файлу некоторый идентификатор (дескриптор). Пример такой операции приводился ранее:
(setq bolt (open “mycalc. res” “r”)).
Имя_файла – это строковая константа, определяющая местоположение файла на носителе. Аргумент режим имеет три варианта взаимодействия с файлом:
“r” – файл открывается для чтения (read mode); если названный файл не существует, возвращается nil ;
“w” - файл открывается для записи (write mode); если названный файл не существует, создается и открывается новый, если же он существует, содержащиеся в нем данные уничтожаются в процессе записи;
“a” – файл открывается для продолжения работы с ним (append mode); если файл не существует, он создается и открывается подобно предыдущему случаю, если существует, то указатель устанавливается в конце файла, и новые данные присоединяются к уже существующим.
(load имя_файла [сообщение]). Функция загружает файл в выражение Автолиспа и обрабатывает это выражение.
Аргумент имя_файла указывается без расширения (расширение. lsp подразумевается по умолчанию) и может содержать полный путь к файлу. Следует помнить, что если в константе имя_файла встречается обратная косая черта, она должна повторяться дважды (см. табл.2):
(load “\\support\\my_func”).
Если путь к файлу не указан, Автолисп просматривает доступные директории в следующем порядке:
- текущая директория, директория текущего рисунка, директории, указанные в переменных окружения, директория, в которой расположены программные файлы Автокада.
Если операция прошла успешно, функция возвращает значение последнего выражения в файле. Если по каким-либо причинам операция невыполнима, Автолисп возвращает сообщение об ошибке и прекращает операцию. Однако включение аргумента сообщение вынуждает Автолисп вернуть его значение и позволяет совершить альтернативную операцию. Следует только помнить, что текст сообщения должен отличаться от последнего выражения в файле.
(close дескриптор_файла). Функция закрывает файл и возвращает nil. Аргумент дескриптор_файла должен соответствовать таковому в функции open. После закрытия дескриптор файла не изменяется, но он имеет силу только при открытии файла.
(findfile имя_файла). Функция отыскивает файл в доступных директориях и, если находит, возвращает его дескриптор, в противном случае возвращает nil.
Функции преобразования
Функции преобразования играют существенную роль при чтении файлов. Их основная задача – преобразование строковых констант в числовые и наоборот.
(ascii строка). Функция преобразует первый символ строки в целочисленную константу, соответствующую коду ASCII для этого символа.
(ascii “A”) возвращает 65,
(ascii “BIG”) возвращает 66,
(ascii “a”) возвращает 97.
(atof строка) преобразует строку в вещественное число.
(atof “67.5”) возвращает 67.5,
(atof “45”) возвращает 45.0.
(atoi строка) преобразует строку в целое число.
(atoi “45”) возвращает 45,
(atoi “67.5”) возвращает 67.
(chr целое_число) преобразует целое число в соответствующий символ таблицы ASCII, представляя его как строку.
(chr 65) возвращает “A”,
(chr 66) возвращает “B”,
(chr 97) возвращает “a”.
(itoa целое_число) преобразует целое число в соответствующую ему строку.
(itoa 65) возвращает “65”,
(itoa –20) возвращает “-20”.
Извлечение данных из файла
При работе с базами данных, в том числе с существующими файлами, возникает потребность в извлечении из них необходимой информации. Каждая строка файла представляет собой переменную строкового типа и может быть извлечена из файла для дальнейшей обработки. Ряд функций Автолиспа позволяет выполнять подобные операции.
(read строка). Функция возвращает первый атом или список, принадлежащий строке, сохраняя при этом тип переменной.
(read “hello”) возвращает атом HELLO,
(read “hello there”) возвращает строку HELLO,
(read “(a b c) d”) возвращает список (A B C),
(read “1.2300”) возвращает вещественное 1.23,
(read “87 3.2”) возвращает целое 87.
Следующие две функции позволяют просматривать базы данных и файлы и впоследствии обрабатывать извлеченные данные средствами Автолиспа.
(read-char [дескриптор_файла]). Функция считывает первый символ из строки, введенной с клавиатуры, или из открытого файла, определенного дескриптором, и возвращает код ASCII этого символа. При повторном обращении к функции считывается следующий символ и так далее. Если дескриптор файла не указан, общение осуществляется с командной строкой.
Пусть буфер командной строки пуст. На вызов (read-char) Автолисп не реагирует, ожидая действий оператора. Ввод в командную строку последовательности ABC Enter возвращает 65 (десятичный ASCII-код символа А). Последующие три вызова функции возвращают последовательно 66, 67, 10 (код перевода строки). Следующий вызов функции устанавливает компьютер в режим ожидания. Важно помнить, что функция Автолиспа не является командой Автокада, поэтому ее нельзя вызвать повторно клавишей Enter или правой клавишей мыши, она всегда должна вводиться явно.
(read-line [дескриптор_файла]). Функция считывает строку с клавиатуры или из файла. Ее действие аналогично предыдущему: каждый последующий вызов приводит к чтению очередной строки, что позволяет просмотреть весь файл.
(strcat строка1 [строка2] …). Функция возвращает строку, представляющую собой сцепление строк строка1, строка2 и т. д.
Примеры:
(strcat “Auto” “CAD”) возвращает “AutoCAD”,
(strcat “fi” “le”) возвращает “file”.
(strlen [строка]) возвращает целое число, соответствующее числу символов в строке.
(strlen “file”) возвращает 4,
(strlen “file” “desk” “top”) возвращает 11,
(strlen) возвращает 0.
(substr строка начало [длина]). Функция возвращает подстроку строки, начинающуюся с позиции начало и захватывающую количество символов, соответствующее длине. Аргументы начало и длина должны быть целыми числами.
(substr “abcde” 2) возвращает “bcde”,
(substr “abcde” 2 1) возвращает “b”,
(substr “abcde” 3 2) возвращает “cd”.
Две функции − (write-char число [дескриптор_файла]) и (write-line строка [дескриптор_файла]) – в примерах не нуждаются. Их задача – записывать в файл символы или строки.
Пример обработки файла
Поставим следующую задачу. Пусть в результате выполнения программы расчета получены координаты некоторого множества точек, которые следует использовать для построения проходящего через них примитива. Структура файла выглядит следующим образом:
¬¬1¬¬¬¬0¬¬¬¬¬0.0000¬¬¬¬¬¬¬0.0000
¬¬2¬¬¬¬5¬¬¬¬¬6.4214¬¬¬¬¬¬¬8.2349
¬¬3¬¬¬10¬¬¬¬¬8.7965¬¬¬¬¬¬ 26.1500
и так далее. В четырех столбцах файла расположены следующие параметры: порядковый номер строки, значение аргумента (например, указан шаг счета нарастающим итогом), координаты Х и Y расчетных точек, символом ¬ обозначены обусловленные форматом вывода незаполненные позиции в строках данных.
Предположим далее, что численные значения координат могут содержать три знака перед десятичной точкой и включать в себя символ отрицательного числа – знак минус. Задача заключается в том, чтобы извлечь значения координат из файла и передать их Автокаду.
Длина строки файла составляет 32 позиции. В соответствии с оговоренным условием значения координат могут занимать 9 позиций. Для перестраховки установим длину читаемых позиций, равной 10 символам (вдруг в файле неожиданно для нас окажется число с четырехзначной целой частью).
С точки зрения составления программы, нам следует выполнить следующие операции: организовать цикл, внутри которого были бы прочитаны значения координат, и присвоить эти значения точкам будущего примитива. В этой связи следует упомянуть о существенном недостатке Автолиспа: в нем отсутствует понятие индексированной переменной, свойственное операторным языкам. Поэтому процесс вычерчивания примитива приходится производить параллельно с извлечением данных, а количество извлекаемых за один прием данных ограничивать (в рассматриваемом примере одной точкой).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |


