Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METHOD / Основы САПР / AutoLISP2006.doc
Скачиваний:
86
Добавлен:
05.03.2016
Размер:
1.04 Mб
Скачать

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)

добавляет в файл строку введенную с клавиатуры.

Соседние файлы в папке Основы САПР