(读取行)
你好假设我有一个名为(try.txt)的文件,它由10行文本组成。
我怎么能用函数read line…???选择第5行????
(defun c:try (/ sset tx)
(setq sset (open "c:/try.txt" "r"))
(setq tx (read-line sset))
(command "_.text" pause "" "" tx "")
(close sset)
(princ)
)
上面提到的程序将获得第一行,但我需要选择
第五个。。。。
当做
塔瓦特 读4行,不做任何事情(重复读4次)。阅读第五行,像刚才那样使用它。
SSET是一个非常不寻常的文件名。。。 使用计数器。。。
(defun _FileLine2Text (file num pt / fo line)
(if (findfile file)
((lambda (i)
(setq fo (open file "R"))
(while (and (setq line (read-line fo)) (> num (setq i (1+ i)))))
(close fo)
(if (eq num i)
(entmakex (list '(0 . "TEXT")
(cons 40 (getvar 'textsize))
(cons 1 line)
(cons 10 (trans pt 1 0))
)
)
)
)
0
)
)
) 事实上,我更喜欢这个主意。它的局限性是,如果你说100,只有2行文字,它将继续阅读,直到重复过程结束。 谢谢温柔的男人。
这是两个答案的组合。。。。。。你怎么想????
(defun c:try (/ sset tx pt)
(setq sset (open "c:/try.txt" "r"))
(repeat 5
(setq tx (read-line sset)))
(setq pt(getpoint"\nText location:"))
(entmakex (list '(0 . "TEXT")
(cons 40 (getvar 'textsize))
(cons 1 tx)
(cons 10 (trans pt 1 0))
)
)
(princ)
)
真是太棒了
非常感谢
塔瓦特 我不能试一下,但肯定它更优雅。输入文本至少是使用命令创建文本的10倍。
人们使用SSET这个名称来表示选择集。。。
我同意你的观点,我更改了文件名,这比
sset到fname的名称。
关于entmake函数,我已经习惯了它,因为它是最好的
它的性能。在Lisp文件中频繁使用commnad将减少Autocad的移动。
谢谢
塔瓦特 我至少要添加一点错误检查,以确保您选择了要点。
(defun c:Try (/ sset tx pt)
(if (findfile "c:/try.txt")
(progn (setq sset (open "c:/try.txt" "r"))
(repeat 5 (setq tx (read-line sset)))
(if (and (eq (type tx) 'STR) (setq pt (getpoint "\nText location : ")))
(entmakex (list '(0 . "TEXT")
(cons 40 (getvar 'textsize))
(cons 1 tx)
(cons 10 (trans pt 1 0))
)
)
)
)
(alert "FILE NOT FOUND!")
)
(princ)
) 谢谢Alanjt。。。
太好了。。。。。。。。。如果找不到文本,我又增加了一个警报。
(defun c:Try (/ fname tx pt)
(if (findfile "c:/try.txt")
(progn (setq fname (open "c:/try.txt" "r"))
(repeat 5 (setq tx (read-line fname)))
(if (and (eq (type tx) 'STR)
(setq pt (getpoint "\nText location : ")))
(entmakex (list '(0 . "TEXT")
(cons 40 (getvar 'textsize))
(cons 1 tx)
(cons 10 (trans pt 1 0))
)
)
(alert "TEXT NOT EXISTED")
)
)
(alert "FILE NOT FOUND!")
)
(princ)
)
非常感谢
塔瓦特 你需要分解and语句。在选择点时单击鼠标右键,您将收到“文本不存在”警报。
页:
[1]
2