Tharwat 发表于 2022-7-6 10:51:28

(读取行)

你好
 
假设我有一个名为(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)
)

上面提到的程序将获得第一行,但我需要选择
第五个。。。。
 
当做
塔瓦特

fuccaro 发表于 2022-7-6 10:57:03

读4行,不做任何事情(重复读4次)。阅读第五行,像刚才那样使用它。
 
SSET是一个非常不寻常的文件名。。。

alanjt 发表于 2022-7-6 11:04:42

使用计数器。。。
 
(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
   )
)
)

alanjt 发表于 2022-7-6 11:12:23

事实上,我更喜欢这个主意。它的局限性是,如果你说100,只有2行文字,它将继续阅读,直到重复过程结束。

Tharwat 发表于 2022-7-6 11:15:58

谢谢温柔的男人。
 
这是两个答案的组合。。。。。。你怎么想????
(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)
)

 
真是太棒了
非常感谢
 
塔瓦特

fuccaro 发表于 2022-7-6 11:21:12

我不能试一下,但肯定它更优雅。输入文本至少是使用命令创建文本的10倍。
人们使用SSET这个名称来表示选择集。。。

Tharwat 发表于 2022-7-6 11:26:21

 
我同意你的观点,我更改了文件名,这比
sset到fname的名称。
 
关于entmake函数,我已经习惯了它,因为它是最好的
它的性能。在Lisp文件中频繁使用commnad将减少Autocad的移动。
 
谢谢
 
塔瓦特

alanjt 发表于 2022-7-6 11:30:58

我至少要添加一点错误检查,以确保您选择了要点。
 
(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)
)

Tharwat 发表于 2022-7-6 11:37:36

谢谢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)
)

 
非常感谢
 
塔瓦特

alanjt 发表于 2022-7-6 11:41:46

你需要分解and语句。在选择点时单击鼠标右键,您将收到“文本不存在”警报。
页: [1] 2
查看完整版本: (读取行)