当前位置:
文档之家› AutoCAD二次开发实用教程 郭秀娟 第5章 AutoLISP文件
AutoCAD二次开发实用教程 郭秀娟 第5章 AutoLISP文件
5.5 打开、关闭文件的函数 【例2】 若将一条直线段的两端点坐标写入到一个文件中,则 可以:
(SETQ fi(GETSTRING "Enter file name:"))
(SETQ f(OPEN fi "w"))
(SETQ P1(GETPOINT "first point:"))
(PRINC Pl f)
采用缩进格式书写,形式如下:
(defun fun (x)
(cond((> x 0) 1)
((= x 0) 2)
((< x 0) 0)
)
☆)☆ 第5章 AutoLISP文件
4
第5章 AutoLISP文件
5.2 程序中的注释 注释能够增加程序的可读性,不仅便于对程序的阅读和调
试,也便于对程序的维护、移植和扩充。 注释的形式可以是整行、整段或行间注释。 整行或后半行注释以分号“;”开头,至行尾为注释部分
15
第5章 AutoLISP文件
5.6 用于文件的输入输出函数 1.(READ [符串])
[符串]参数不能在表或字符串外包含空格。
返回值:READ函数将其参数转换成相应的数据类型后返回。
如果未指定参数,READ返回NIL。
如果字符串中包含由空格、换行符、制表符或括号等LISP分
隔符分开的多个词,则只返回其中的第一个词。
(SETQ f (OPEN “new.tst” “w”))
返回值<FILE # 0017>
(SETQ f (OPEN “old.txt” “w”))
返回值<FILE # 002>
OPEN函数的返回值实际上是一个文件指针。文件指针的指向
因<操作方式>而异。
☆☆ 第5章 AutoLISP文件
13
第5章 AutoLISP文件
☆☆ 第5章 AutoLISP文件
18
第5章 AutoLISP文件
5.6 用于文件的输入输出函数 4.(READ-CHAR<文件描述符>) 该函数从键盘输入缓冲区或从<文件描述符>指定的已打开的文件中读入 一个字符,并返回该读入字符的ASCII码值(整型数)。 如果没有指定可选的<文件描述符>,且键盘输入缓冲区中没有字符,则 READ-CHAR函数等待用户输入(随后按下回车键)。 【例7】 (PROMPT "\n 请输入字符:")
☆☆ 第5章 AutoLISP文件
9
第5章 AutoLISP文件
5.4 搜索、获得文件的函数 1. (FINDFILE<文件名>)
FINDFILE 函数搜索<文件>的路径,并返回此路径描述。 若<文件>不存在,它就返回NIL。 例如: 若“Li.Lsp" 文件在C:\ACAD路径下则: (FINDFILE "Li.Lsp") 返回"C:\\ACAD\\Li.Lsp"
6
第5章 AutoLISP文件
5.3 在AutoCAD环境下加载AutoLISP文件 1.命令行方式 加载AutoLISP文件用load函数,调用load函数的格式如下: Command:(load "驱动器:\\路径\\文件名" ["出错信息"])
例如: 文件fi1e1.lsp最后一个表达式是定义函数func1,它的路径 是d:\user1。加载该文件的表达式如下: Command:(load "d:\\ user1\\ fi1e1" "没有找到这个文件!" ) 若加载成功,返回函数名func1,否则返回"没有找到这个文件! "这个信息。
2
第5章 AutoLISP文件
5.1 AutoLISP文件的特点 AutoLISP文件的扩展名为.lsp,是由若干个AutoLISP表达
式构成的。 一个LISP文件可定义多个函数或AutoCAD命令。
以下是一个表达式分写在若干行上的实例: (defun plus(x y)
(+ (* x y) x) ) 以下是一行写若干个表达式的实例: (setq a 2.0) (setq b 4.0) (+ a b)
☆☆ 第5章 AutoLISP文件
5
第5章 AutoLISP文件
5.2 程序中的注释
【例1】定义打印ASCII码为33 ~90的字符的命令。
;该程序打印ASCII码为33~90的字符
;在Command:提示下,键入pras
(defun c:pras(/ as );定义pras为AutoCAD命令,as为局部变
第5章 AutoLISP文件
本章要求:
1. 了解Auto LISP文件操作的概念; 2. 掌握Auto LISP文件打开、关闭、读写相关函 数的使用; 3.能够用AutoLISP文件操作函数编写程序,实现 程序设计;
☆☆ 第5章 AutoLISP文件
1
第5章 AutoLISP文件
AutoLISP语言和其它高级语言一样具有文件处理功能,提 供了文件操作函数。
(SETQ P2(GETPOINT "Second point:"))
(PRINC P2 f)
(CLOSE f) (COMMAND “line” p1 p2 “”) 程序运行后,用记事本打开“fi”文件可以看到两个坐标值。
☆☆ 第5章 AutoLISP文件
14
第5章 AutoLISP文件
5.5 打开、关闭文件的函数 2.(CLOSE<文描述符>) 函数的功能:该函数关闭一个已打开的文件,以切断文件描述 符与文件的联系,并返回NIL(见上例) <文描述符>:在OPEN函数打开文件时获得的文件描述符。
☆☆ 第5章 AutoLISP文件
3
第5章 AutoLISP文件
5.1 AutoLISP文件的特点
由于在AutoLISP程序中含有大量的括号,使得程序代码不
易阅读。解决这个问题的方法就是缩排对齐格式。
1
x0
f ( x) 2
x0
0
x0
(defun fun (x) (cond ((> x 0) 1) ((= x 0) 2) ((< x 0) 0)))
"To boldly go where nomad has gone before."
☆☆ 第5章 AutoLISP文件
17
第5章 AutoLISP文件
5.6 用于文件的输入输出函数 3.(WRITE-LINE<字符串><文件描述符>)
该函数将<字符串>写到屏幕上或写到由<文件描述符>表示的打开文件中 (并在结尾加回车符),它返回的字符串带有双引号,但写到文件中时则省略 引号。
元
(setq as 33)
;设置as为第一个ASCII码33
(while(<= as 90) ;while循环开始
(princ(chr as)) ;打印ASCII码的为as的字符
(terpri)
;换新行
(setq as (1+ as)) ;设置as为as 的下一个ASCII码
)
;while循环结束
☆)☆ 第5章 AutoLISP文件 ;命令定义结束
☆☆ 第5章 AutoLISP文件
7
第5章 AutoLISP文件
5.3 在AutoCAD环境下加载AutoLISP文件 2.对话框方式
选择下拉菜单Tools®Load Application 项,或者选择下拉菜 单Tools®AutoLISP®Load项,或者在“Command:”提示下键入 appload,通过随后弹出的“Load/Unload Applications”对话框 加载AutoLISP文件。 3.自动加载
5.3 在AutoCAD环境下加载AutoLISP文件 4.间接自动加载 如果把调用autoload函数的表达式写在自动加载的 acad2006doc.lsp等文件内,在AutoCAD启动时,随着 acad2006doc.lsp等文件的自动加载,被调用的autoload函数还 可以加载一些LISP文件。调用autoload函数的格式如下: Command:(autoload lisp文件名 命令表)
返回值: 当用户用OPEN函数打开文件,并进行读、写操作后,必须用 CLOSE函数将文件关闭。这是因为:①若文件没有关闭,则 内存上的部分数据可能因未写到外存文件中而丢失;②由于用 OPEN打开的文件要占用有限的内存,关闭文件,则内存释放。 CLOSE函数的返回值为NIL。
☆☆ 第5章 AutoLISP文件
在AutoLISP语言中,程序和数据二者都具有相同的结构, 所以程序文件和数据文件二者无严格区别。AutoLISP提供的 文件操作函数能处理数据文件,也能处理程序文件。另外, AutoLISP只支持ASCⅡ码的顺序文件。
AutoLISP提供了一个Load函数,可以将程序文件装入内存, 并对其求值。
☆☆ 第5章 AutoLISP文件
AutoCAD在启动时,可以自动加载acad.lsp、acad2006.lsp、 acaddoc.lsp和acad2006doc.lsp4个lisp文件。用户可以创建和维 护这些文件,其中acad.lsp和acaddoc.lsp只能由用户来创建。
☆☆ 第5章 AutoLISP文件
8
第5章 AutoLISP文件
☆☆ 第5章 AutoLISP文件
12
第5章 AutoLISP文件
a:打开文件用于追加操作,如果<文件名>不存在,则创 建一个新文件并打开它;如果<文件名>存在,则打开该文件 并把文件指针移到现有数据的尾部,用户写入文件的数据追加