В данном разделе рассматриваются функции, выполняющие операции с файлами (поиск, открытие и закрытие), операции чтения и записи строк или символов в файл, а также вывода на экран различных сообщений:
• (findfile <файл>) — поиск файла по имени (краткому или полному) или поиск папки по полному имени; если аргумент не содержит полного пути, то поиск выполняется по стандартным путям поиска файлов для системы AutoCAD; возвращается полное имя файла (папки), если он найден, или nil в противном случае;
(findfile "abc.lsp")
"C:\\Program Files\\AutoCAD 2005\\abc.lsp"
• (open <файл> <режим>) — открытие файла с именем, заданным аргументом <файл>; аргумент <режим> — это строка из одного символа, определяющего режим, в котором открывается файл ("w" или "W" — запись, "а" или "А" — дополнение, "г" или "R" — чтение); в предыдущих версиях AutoLISP не допускалось указание режима в верхнем регистре; если аргумент <файл> указывает на несуществующий файл в режимах "w", "W", "а" и "А", то он создается; возвращаемое значение — дескриптор файла (при успешном открытии) или nil (при неудаче);
(setq f (open "c:\\my documents\\new.tst" "w"))
• (close <дескриптор>) — Эта функция закрывает файл и возвращает нуль. Аргумент < дескриптор > является дескриптором файла, полученным из функции OPEN;
(close f)
• (read-line [<дескриптор>]) — чтение строки из файла с заданным дескриптором; если аргумент <дескриптор> опущен, то выполняется чтение строки с клавиатуры (строка должна закончиться нажатием клавиши <Enter>);
(read-line f)
(setq strl (read-line ff))
• (write-line <строка> [<дескриптор>] ) — запись строки, заданной аргументом <строка> в файл с заданным дескриптором; если аргумент <дескриптор> опущен или равен nil, то система AutoCAD выводит строку на экран; при записи строка, заданная аргументом <строка>, заносится в файл (или на экран) без ограничивающих ее двойных кавычек;
(write-line "Первая строка" f)
• (princ [<аргумент> [<дескриптор>]]) — запись аргумента, который может быть любым выражением AutoLISP (а также числом, списком, строкой, именем примитива и т. д.), в файл с заданным дескриптором: если аргумент <дескриптор> опущен или равен nil, то <аргумент> выводится на экран; если <аргумент> — строка, то при записи она заносится в файл (или на экран) без ограничивающих ее двойных кавычек; если опущены оба аргумента, то функция осуществляет так называемый тихий выход, т. е. не возвращает никакого значения, в том числе nil; Удобно ею завершать описание пользовательской функции, которая в этом случае завершит свою работу пустой строкой.
• (prin1 <аргумент> [<дескриптор>] ]) — функция аналогична princ, но если <аргумент> — строка, то при записи она заносится в файл (или на экран) с ограничивающими двойными кавычками; специальные символы (обратная косая черта, кавычки, конец строки и т. п.) предваряются обратной косой чертой; если опущены оба аргумента, то функция prinl тоже осуществляет тихий выход;
(prin1 "Hello") возвращает "Hello"
• (print [<аргумент> [<дескриптор>]]) — функция аналогична prin1, но при выводе добавляет перед аргументом символ конца строки предыдущей записи, а после аргумента — пробел; тоже может осуществлять тихий выход;
• (read-char [<дескриптор>]) — чтение символа из файла; если аргумент не задан, то чтение символа из буфера клавиатуры; возвращает код прочитанного символа (аналогично функции ascii); нажатие на клавишу <Enter> возвращает код 10;
Если вы набрали "АВС", завершив ввод RETURN, READ-CHAR возвратит 65 (код ASCII буквы "А" (латинской)). Следующие три обращения к READ-CHAR возвратят 66,67 и 10 (переход на новую строку)
• (write-char <код> [<дескриптор>]) — запись символа с заданным кодом в файл; если аргумент не задан, то вывод символа на экран; возвращает код символа; невозможно с помощью данной функции записать символ с кодом 0;
(write-char 67) возвращает 67 и записывает латинскую букву С на экране.
• (prompt <сообщение>) — вывод сообщения на экран.
(prompt "Hовое значение: ")
Приведенные выше функции AutoLISP дают пользователю возможность работы только с файлами последовательного доступа. Указателем позиции в файле, с которой далее будет происходить чтение (запись), является переменная, в которой хранится дескриптор этого файла.
Функции princ, prin1, print и prompt чаще всего используются для вывода сообщений в командную строку системы AutoCAD, причем prin1 и print выводят сообщения в кавычках (другие особенности описаны выше). Вместо функции write-line для записи в файл можно пользоваться функцией princ, но заносить признак конца записи, который выглядит как "\n", пользователь должен сам. Например:
(princ "Первая запись\n" f)
• (findfile <файл>) — поиск файла по имени (краткому или полному) или поиск папки по полному имени; если аргумент не содержит полного пути, то поиск выполняется по стандартным путям поиска файлов для системы AutoCAD; возвращается полное имя файла (папки), если он найден, или nil в противном случае;
(findfile "abc.lsp")
"C:\\Program Files\\AutoCAD 2005\\abc.lsp"
• (open <файл> <режим>) — открытие файла с именем, заданным аргументом <файл>; аргумент <режим> — это строка из одного символа, определяющего режим, в котором открывается файл ("w" или "W" — запись, "а" или "А" — дополнение, "г" или "R" — чтение); в предыдущих версиях AutoLISP не допускалось указание режима в верхнем регистре; если аргумент <файл> указывает на несуществующий файл в режимах "w", "W", "а" и "А", то он создается; возвращаемое значение — дескриптор файла (при успешном открытии) или nil (при неудаче);
(setq f (open "c:\\my documents\\new.tst" "w"))
• (close <дескриптор>) — Эта функция закрывает файл и возвращает нуль. Аргумент < дескриптор > является дескриптором файла, полученным из функции OPEN;
(close f)
• (read-line [<дескриптор>]) — чтение строки из файла с заданным дескриптором; если аргумент <дескриптор> опущен, то выполняется чтение строки с клавиатуры (строка должна закончиться нажатием клавиши <Enter>);
(read-line f)
(setq strl (read-line ff))
• (write-line <строка> [<дескриптор>] ) — запись строки, заданной аргументом <строка> в файл с заданным дескриптором; если аргумент <дескриптор> опущен или равен nil, то система AutoCAD выводит строку на экран; при записи строка, заданная аргументом <строка>, заносится в файл (или на экран) без ограничивающих ее двойных кавычек;
(write-line "Первая строка" f)
• (princ [<аргумент> [<дескриптор>]]) — запись аргумента, который может быть любым выражением AutoLISP (а также числом, списком, строкой, именем примитива и т. д.), в файл с заданным дескриптором: если аргумент <дескриптор> опущен или равен nil, то <аргумент> выводится на экран; если <аргумент> — строка, то при записи она заносится в файл (или на экран) без ограничивающих ее двойных кавычек; если опущены оба аргумента, то функция осуществляет так называемый тихий выход, т. е. не возвращает никакого значения, в том числе nil; Удобно ею завершать описание пользовательской функции, которая в этом случае завершит свою работу пустой строкой.
• (prin1 <аргумент> [<дескриптор>] ]) — функция аналогична princ, но если <аргумент> — строка, то при записи она заносится в файл (или на экран) с ограничивающими двойными кавычками; специальные символы (обратная косая черта, кавычки, конец строки и т. п.) предваряются обратной косой чертой; если опущены оба аргумента, то функция prinl тоже осуществляет тихий выход;
(prin1 "Hello") возвращает "Hello"
• (print [<аргумент> [<дескриптор>]]) — функция аналогична prin1, но при выводе добавляет перед аргументом символ конца строки предыдущей записи, а после аргумента — пробел; тоже может осуществлять тихий выход;
• (read-char [<дескриптор>]) — чтение символа из файла; если аргумент не задан, то чтение символа из буфера клавиатуры; возвращает код прочитанного символа (аналогично функции ascii); нажатие на клавишу <Enter> возвращает код 10;
Если вы набрали "АВС", завершив ввод RETURN, READ-CHAR возвратит 65 (код ASCII буквы "А" (латинской)). Следующие три обращения к READ-CHAR возвратят 66,67 и 10 (переход на новую строку)
• (write-char <код> [<дескриптор>]) — запись символа с заданным кодом в файл; если аргумент не задан, то вывод символа на экран; возвращает код символа; невозможно с помощью данной функции записать символ с кодом 0;
(write-char 67) возвращает 67 и записывает латинскую букву С на экране.
• (prompt <сообщение>) — вывод сообщения на экран.
(prompt "Hовое значение: ")
Приведенные выше функции AutoLISP дают пользователю возможность работы только с файлами последовательного доступа. Указателем позиции в файле, с которой далее будет происходить чтение (запись), является переменная, в которой хранится дескриптор этого файла.
Функции princ, prin1, print и prompt чаще всего используются для вывода сообщений в командную строку системы AutoCAD, причем prin1 и print выводят сообщения в кавычках (другие особенности описаны выше). Вместо функции write-line для записи в файл можно пользоваться функцией princ, но заносить признак конца записи, который выглядит как "\n", пользователь должен сам. Например:
(princ "Первая запись\n" f)