本帖最后由 作者 于 2008-5-2 17:08:24 编辑
(defun myerr (s) (if (/= s "Function cancelled") (if (/= s "quit/exit abord") (princ (strcat "\nERROR:" s)) ) ) (setq *error* olderr) (setvar "osmode" os) (setq olderr nil PT nil qarea nil os nil allarea nil adda nil) ) ;; write area value to drawing (defun C:CA(/ os PT STA qarea txtfile fd end os allarea allareastr qa qar num numstr adda tmp lst stri tmp str i s) (setq olderr *error*) (setq *error* myerr) (setq os (getvar "OSMODE")) (setvar "CMDECHO" 0) (setvar "OSMODE" 0)
(setq filepath (getvar "DWGPREFIX")) (setq txtfile (strcat filepath "面积计算成果.txt")) (setq fd (open txtfile "r")) (setq num 1) (setq allarea 0.0) (if (/=fd nil) (progn (WHILE (SETQ s (read-line fd));读取最后一行 (SETQ str s) ) ;;初始化 (setq lst '() tmp "" i 1 ) ;;判断分割符的位置并切割 这个将最后一行文件内容分割出来的程序老是不对 请大家指点一下!!! (while (/= (setq stri (substr str i 1)) "") (if (= stri ",") (progn (setq lst (cons tmp lst) tmp "" ) (setq tmp (strcat tmp stri)) ) ) (setq i (1+ i)) ) (setq lst (reverse (cons tmp lst))) (if (>= (length lst) 3) (setq num (atof (nth 0 lst))) (setq allarea (atof (nth 2 lst))) ) ) ) (setq fd (open txtfile "a")) (command"-layer""m""面积计算""c""1""""")
(setq end "begin") (setq STA nil) (while(/= end "Y") (setq os (getvar "osmode")) (setq PT (getpoint "\nPick the point:")) (setq STA (BPOLY PT)) (if (= STA nil) (exit)) (COMMAND "AREA" "E" "L") (setq qarea (RTOS (getvar "AREA") 2 3)) (setq allarea (+(atof qarea) allarea)) (setq allareastr(rtos allarea 2 3)) (setq qa (strcat "第" (itoa num) "块面积为:" qarea)) (COMMAND "TEXT" PT "" "" qa) (setq adda (strcat "共提取" (itoa num) "块总面积为:" allareastr))
(prompt (strcat "\n" qa " " adda)) (setq numstr(itoa num)) ;;写入文件
(write-line (strcat numstr","qarea","allareastr) fd) (close fd) (setq num (1+ num)) (setq end(getstring "\n结束面积提取(Y/N):")) (setq end(strcase end)) (setvar "osmode" os) )
(setvar "OSMODE" OS) (Setvar "CMDECHO" 1) (setq *error* olderr) (princ) ) 附文本文件的内容格式为: 1,24.452,24.452 2,5.651,30.103 ....... .... 15,45.365,5648.412 。。。 行数不定
|