- •Утверждено
- •Программирование на языке AutoLisp
- •1. Переменные языка AutoLisp
- •1.1 Системные переменные пакета AutoCad
- •1.2 Переменные языка AutoLisp определенные пользователем
- •2. Типы данных языка AutoLisp
- •3. Функции присвоения
- •4.2 Работа со строками, функции преобразования, проверки типов данных.
- •4.3 Логические функции Автолиспа.
- •5. Работа со списками
- •6. Использование функции get для ввода данных.
- •7. Работа с геометрическими описаниями объектов
- •8. Условное ветвление программ
- •9. Организация циклов
- •10. Вызов команд Автокада из программы на языке AutoLisp
- •11. Управление отображением
- •12. Вывод данных в командную строку
- •13. Файловый ввод - вывод
- •14. Определение функции
- •15. Отладка программы.
- •16. Доступ к примитивам и средствам Автокада
- •Функции AutoLisp Математические функции
- •Логические функции Автолиспа.
- •Работа со списками
- •Использование функции get для ввода данных.
- •Работа с геометрическими описаниями объектов
- •Условное ветвление программ
- •Организация циклов
- •Вызов команд Автокада из программы на языке AutoLisp
- •Управление отображением
- •Вывод данных в командную строку
- •Файловый ввод - вывод
- •Доступ к примитивам и средствам Автокада
- •Insert (block)
- •Vertex (pline)
13. Файловый ввод - вывод
Работая с AutoCAD, рано или поздно возникнет необходимость записать ту или иную информацию в файл или принять ее оттуда. Рассмотрим функции работы с файлами.
(open имя файла режим)
Эта функция открывает файл. Возвращается дескриптор файла. Функции ввода - вывода работают не с именами файлов, а с дескрипторами файлов, определяющими не только собственно файл, но и режим доступа к нему. "Открыть файл" - значит подготовить дескриптор файла к использованию его функциями ввода - вывода языка AutoLisp. Поэтому возвращаемое функцией OPEN значение дескриптора файла должно присваиваться некоторой символьной переменной
Например: (setq dv (open "file.txt" "r"))
Здесь переменная dv- дескриптор файла file.ext, открытого для чтения. Флаг чтения или записи - это, как и имя файла, строковая константа, состоящая из одной буквы, которая должна быть набрана на нижнем регистре. Допустимые значения флага чтения/записи приводятся в таблице.
Режим OPEN |
Описание |
R |
Открыть файл для чтения. Если файл с указанным именем не существует, возвращается nil. |
W |
Открыть файл для записи. Если файл с указанным именем не существует, создается и открывается новый файл. Если такой файл уже существует, то хранящиеся в нем данные будут утеряны. |
А |
Открывает файл для добавления данных. Если файл с ука-занным именем не существует, создается и открывается новый файл. Если файл уже существует, то новые данные будут записаны после старых. |
Если файл не находится, не в одном из каталогов установленных переменными п. ACAD в файле загрузки acad.bat то имя файла должно включать в себя путь - имена подкаталогов, при этом для их разделения необходимо печатать не одну , а две косые черты: "\\".
Например: (setq rw (open “d:\\acad_tm\\sapr_tm\\sap.txt” “r”)
(close дескриптор_файла)
Эта функция завершает все процессы, инициированные функцией OPEN. Использова-ние функции CLOSE обязательно - все открытые файлы, до окончания работы программы, должны быть закрыты, иначе данные из них и могут быть потеряны. Например: (cloase rw)
(findfile имя_файла)
Эта функция возвращает полное имя файла (диск, каталог, подкаталог и т.д) по указанному основному имени_файла. Сначала просматривается текущий каталог, затем каталог, в котором хранится текущий рисунок, и наконец каталоги имена которых записаны в переменных среды ACAD. Если файл находится вне этих границ, то функция finfile может его не найти.
Например: (setq cat (findfile “acad1”)) - переменной cat будет присвоено значение строко-вой константы “d:\\acad_tm\\acad1”.
(read строка)
Эта функция возвращает первый список или атом из данной строки, причем строка не должна содержать пробелов.
Например: (setq st (read “ab”)) - переменной st типа SYM, присваивается значение строки символов АВ (не строки типа STR! ! !).
(setq stt (read “ab cd”)) - переменной stе типа SYM, присваивается значение строки символов АВ.
(setq str (read “\”ab\””)) - переменной str присваивается значение строковой константы “ab” типа STR.
(setq rl (read “1.23”)) - переменной rl присваивается значение вещественного числа 1.23
(setq in (read “34 2.44”)) - переменной in присваивается значение целого числа 34.
(read-char дескриптор_файла)
Считывает единичный символ из буфера клавиатуры или из открытого файла заданного аргументом дескриптор_файла. Возвращается целое число - ASCII код символа. Если дескриптор_файла не задан и буфер клавиатуры пуст, то функция ожидает ввода символа (пользователь должен ввести что-либо с клавиатуры и нажать кл. ENTER). Например, если в ответ на запрос функции READ-CHAR пользователь введет с клавиатуры "АВС" и завершит ввод нажатием кл. ENTER , то функция READ-CHAR возвратит код 65 (ASCII код латинской буквы "А"). При следующих трех обращениях к READ-CHAR она возвратит соответственно 66(В), 67(С) и 10 (код перевода строки). Если последует пятый вызов функции READ-CHAR, она снова будет ожидать ввода. Например файл file.txt содержит строки:
SAPR_TM
123.3 abc
PGTU
- - - - - - - - - - - -
Фрагмент программы: (setq ds (open "d:\\acad12\\file.txt" "r"))
(repeat 5 (setq sp (cons (chr (read-char ds)) sp)) )
(close ds)
(setq sp (reverse sp))
присвоит переменной sp значение списка (“S” “A” “P” “R” “_”)
(read-line дескриптор_файла)
Данная функция считывает одну строку символов с клавиатуры или из открытого файла, заданного аргументом дескриптор_файла. Возвращается считываемая строка. Если достигнут конец файла, возвращается nil
Например фрагмент программы (setq ds (open "d:\\acad12\\file.txt" "r"))
(repeat 3 (setq sp (cons (read-char ds) sp)) )
(close ds) (setq sp (reverse sp))
присвоит переменной sp значение списка (“SAPR_TM” “123.3 abc” PGTU”)
(write-char число дескриптор_файла)
Эта функция записывает один символ на экран или в открытый файл, заданный аргументом дескриптор_файла. Здесь число - код ASCII символа. Функция WRITE-CHAR не может записать в файл символ NUL (ASCII - код 0).
Например фрагмент программы: (setq ds (open "d:\\acad12\\file.txt" "w")) (setq n nil)
(while (/= n 10) (setq n (read-char)) (write-char n ds) )
(close ds)
будет последовательно записывать в строку файла file.txt, символы введенные с клавиа-туры до нажатия кл. Enter (ASCII код 10).
(write-line строка дескриптор_файла)
Эта функция записывает строковую константу строка на экран или в открытый файл, заданный аргументом дескриптор_файла. Она возвращает строку, взятую в кавычки и опускает кавычки при записи в файл.
Например фрагмент программы: (setq ds (open "d:\\acad12\\file.txt" "a"))
(prompt "Enter string symbol\n")
(setq str (read-line)) (write-line str ds)
(close ds)
добавляет в файл строку введенную с клавиатуры.