求助:有关READ-LINE(文本数据导入CAD)
我想编一个将文本文档或EXCEL表中的数据导入CAD的程序,现在已经完成一小部分,但是我不知道用(read-line)这个命令怎样读取文本文件的第二行、第三行、……,请帮帮忙!程序如下:;由文本文件导入点坐标<BR>(defun c:fD ()<BR> (setq f (getfiled "请选择数据文件:" "f:/" "txt" 8))<BR> (setq fF (open f "r"))<BR> (setq NF (read-line ff ))<BR> (setq x1 (substr NF 1 8))<BR> (setq y1 (substr NF 11 7))<BR> (setq x1 (atof x1))<BR> (setq y1 (atof y1))<BR> (setq p1 (list x1 y1))<BR> (setq x2 (substr NF 20 8))<BR> (setq y2 (substr NF 29 7))<BR> (setq x2 (atof x2))<BR> (setq y2 (atof y2))<BR> (setq p2 (list x2 y2))<BR>(print "P1,P2已确定")<BR>(princ)<BR>) 你还要(close ff)
在close之前,用一次read-line就读取一行,他会自动读取下一行的,如:你第一次read-line读取第一行,第二次就读第二行了。 (setq data (read-line ff))
(while data
...
(setq data (read-line ff))
...
) 明白了!但是怎么用while循环?当读完文档最后一行后结束! (while data
data無值自動結束
記得程序末加(close ff) 请教,为什么我这样做不行呢?
;由文本文件导入点坐标<BR>(defun c:fD ()<BR> (setq f (getfiled "请选择数据文件:" "f:/" "txt" 8))<BR> (setq fF (open f "r"))<BR> (setq tj "T")<BR> (if (= tj T)<BR> (repeat 1<BR> (<BR> (setq F1 (read-line ff))<BR> (setq tj (atom F1))<BR> (setq x1 (substr F1 1 8))<BR> (setq y1 (substr F1 11 7))<BR> (setq x1 (atof x1))<BR> (setq y1 (atof y1))<BR> (setq p1 (list x1 y1))<BR> (setq x2 (substr F1 20 8))<BR> (setq y2 (substr F1 29 7))<BR> (setq x2 (atof x2))<BR> (setq y2 (atof y2))<BR> (setq p2 (list x2 y2))<BR> (setq x3 (substr F1 38 8))<BR> (setq y3 (substr F1 47 1))<BR> (setq x3 (atof x3))<BR> (setq y3 (atof y3))<BR> (setq p3 (list x3 y3))<BR> (setq x4 (substr F1 50 6))<BR> (setq y4 (substr F1 57 1))<BR> (setq x4 (atof x4))<BR> (setq y4 (atof y4))<BR> (setq p4 (list x4 y4))<BR> (princ "\n左上角点坐标:")<BR> (princ p1)<BR> (princ "右上角点坐标:")<BR> (princ p2)<BR> (princ "\n右下角点坐标:")<BR> (princ p3)<BR> (princ "左下角点坐标:")<BR> (princ p4)<BR> (command "layer" "s" "dim" "")<BR> (Command "dimaligned" p1 p2 "@0,500")<BR> (Command "dimaligned" p2 p3 "@500,500")<BR> (Command "dimaligned" p3 p4 "@0,-500")<BR> (Command "dimaligned" p4 p1 "@-500,-500")<BR> (Command "dimaligned" p1 p3 "@100,100")<BR> )<BR> )<BR> (close ff)<BR> )<BR>) 1.老兄,如果只讀一筆資料,用(repeat 1 是多餘的
2.問程序是否ok,也該提供文檔才好測試 (setq tj "T")<BR> (if (= tj T)<BR> (repeat 1<BR> (
是不是当 tj =T时,只循环给定的“1”次,而执行完后不能再次循环回来?这样我就明白了,我用while这个命令已经编好了!运行成功!只是因为(substr F1 1 8),(substr F11 7),(substr F1 20 8)等读取命令的限制,文档中各行的数值位置一点都不能错,我是从EXCEL中粘贴到文档的,因位数不一样,各行之间的位置还要仔细检查才行。还是挺麻烦! 可考慮文檔資料內容用空格分開,由程序判斷變數該賦與的值 怎样让程序賦與變數第N个空格后,第N+1个空格前的值?