lk_mbf 发表于 2004-5-25 12:58:00

求助:有关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>)

meflying 发表于 2004-5-25 13:08:00

你还要(close ff)


在close之前,用一次read-line就读取一行,他会自动读取下一行的,如:你第一次read-line读取第一行,第二次就读第二行了。

f5612140 发表于 2004-5-25 13:09:00

(setq data (read-line ff))



(while data


...       


                       (setq data (read-line ff))


...


)

lk_mbf 发表于 2004-5-25 14:23:00

明白了!但是怎么用while循环?当读完文档最后一行后结束!

f5612140 发表于 2004-5-25 14:34:00

(while data       


data無值自動結束


記得程序末加(close ff)

lk_mbf 发表于 2004-5-25 15:07:00

请教,为什么我这样做不行呢?


                                        ;由文本文件导入点坐标<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>)

f5612140 发表于 2004-5-25 15:35:00

1.老兄,如果只讀一筆資料,用(repeat 1       是多餘的


2.問程序是否ok,也該提供文檔才好測試

lk_mbf 发表于 2004-5-25 15:46:00

(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中粘贴到文档的,因位数不一样,各行之间的位置还要仔细检查才行。还是挺麻烦!

f5612140 发表于 2004-5-25 16:27:00

可考慮文檔資料內容用空格分開,由程序判斷變數該賦與的值

lk_mbf 发表于 2004-5-25 16:39:00

怎样让程序賦與變數第N个空格后,第N+1个空格前的值?
页: [1] 2 3 4
查看完整版本: 求助:有关READ-LINE(文本数据导入CAD)