提取文本标签和尺寸
大家好,我需要一些关于我正在尝试编写的lisp例程的帮助。我需要做的是通过选择文本来提取一个面板标签,然后选择我需要提取的维度,我已经成功地正确提取了维度,但是当提取信息时,我在面板标签应该在的第一个单元格中得到“nil”,在下一个单元格中得到维度。我的工作站上没有Excel,所以我必须使用CSV文件,我已经编写了一个提取代码,在Excel中运行,以检索CVS文件中的信息。还有没有办法将CVS文件保存在打开图形的同一位置?如果有人能帮助我,我将不胜感激。
(defun c:test( / s tx fn i d dl m file)
(setq ss (ssget '((0 . "*text,*DIMENSION")))
fn "f:\\BrianD\\Dims.csv")
(repeat (setq i (sslength ss))
(setq d (ssname ss (setq i (1- i)))
dl (entget d)
m (cdr (assoc 42 dl)))
(setq tx (cons m tx)))
(if tx
(progn
(setq file (open fn "a"))
(write-line "" file)
(foreach ss tx
(princ ss file)
(princ "," file)
)
(if file (close file))
)
)
)
(princ)
谢谢Brian 在没有例子的情况下,不太确定你在问题的第一部分想要完成什么,但第二部分很简单。要将CSV与图形放在同一文件夹中,只需获取“dwgprefix”变量。即:
(setq fn (getvar 'dwgprefix))
这将把它放在同一个文件夹中。
您声明正在选择文本,然后选择维度,但您只有一个SSGET。可能是你问题的一部分。
考虑到DXF组42只会出现在*维度实体中,而不会出现在*文本实体的DXF数据中,这意味着在重复循环的某些迭代中,变量“m”将为空。 李,
我该怎么做?我需要为文本单独设置ssget吗?我为文本添加了新的dxf组,但现在我只得到了文本。由于某种原因,我无法将此代码放入代码标记中。
(defun c:test2( / s tx fn i d dl m file)
(setq ss (ssget '((0 . "*text,*DIMENSION")))
fn "C:\\Lisp routines\\myDims.csv")
(repeat (setq i (sslength ss))
(setq d (ssname ss (setq i (1- i)))
dl (entget d)
m (cdr (assoc 42 dl))
m (cdr (assoc 1 dl)))
(setq tx (cons m tx)))
(if tx
(progn
(setq file (open fn "a"))
(write-line "" file)
(foreach ss tx
(princ ss file)
(princ "," file)
)
(if file (close file))
)
)
)
(princ) [未测试]
(defun c:Test (/ fn ss o i e v)
(if (and (findfile (setq fn "f:\\BrianD\\Dims.csv"))
(setq ss (ssget '((0 . "TEXT,MTEXT,*DIMENSION"))))
)
(progn
(setq o (open fn "a"))
(write-line "" o)
(repeat (setq i (sslength ss))
(setq e (entget (ssname ss (setq i (1- i)))))
(if (wcmatch (cdr (assoc 0 e)) "TEXT,MTEXT")
(write-line (cdr (assoc 1 e)) o)
(write-line
(if (not (eq (type (setq v (cdr (assoc 42 e)))) 'STR))
(rtos v 2)
v
)
o
)
)
)
(close o)
)
)
(princ)
)
塔尔瓦特,
谢谢
我测试了它,它给了我CSV文件A行中的所有三个,你能让它把“文本”放在A行,第一个“维度”放在B行,第二个“维度”放在C行吗?
假设您指的是列而不是行,请尝试以下操作:
(defun c:dimtxtexp ( / des dim enx idx sel txt )
(if (and (setq sel (ssget '((0 . "TEXT,MTEXT,*DIMENSION"))))
(setq des (open "f:\\BrianD\\Dims.csv" "a"))
)
(progn
(repeat (setq idx (sslength sel))
(setq enx (entget (ssname sel (setq idx (1- idx)))))
(if (wcmatch (cdr (assoc 0 enx)) "*DIMENSION")
(setq dim (cons (rtos (cdr (assoc 42 enx))) dim))
(setq txt (cons (cdr (assoc 1 enx)) txt))
)
)
(while (or dim txt)
(write-line
(strcat
(cond ((cartxt)) ("")) ","
(cond ((cardim)) ("")) ","
(cond ((cadr dim)) (""))
)
des
)
(setq txt (cdrtxt)
dim (cddr dim)
)
)
)
)
(if (= 'file (type des)) (close des))
(princ)
) 李,
谢谢,是的,我指的是专栏。它工作得很好。有没有办法将CSV文件保存在与图形相同的位置?CSV的名称是否与图纸的名称相同?
(strcat (getvar 'DWGPREFIX) (vl-filename-base (getvar 'DWGNAME)) ".csv")
李和塔瓦,
首先我要感谢你们的帮助,我还在学习如何正确编写lisp例程。我不知道在Lee编写的lisp例程中Tharwat编写的代码行放在哪里。在运行excel Extraction宏后,我发现我必须将所有文件保存在一个位置,但只使用图形名称,因此如果您能在lisp中显示它的位置,这将对我有很大帮助。看着你们写的两个不同的lisp,我有一种感觉,仅仅把代码行放在lisp中并不是那么容易。。
谢谢你,布莱恩。
页:
[1]
2