Lisp:`stringtype nil`试图从对话框中获取信息并将其与其他字符串一起添加时出错
程序基本上从点描述中获取信息,从文本项中获取文本,并将文本项添加到点描述中。对话框允许用户选择一些参数,如地段、地段和区块或其他参数。我已经在这个项目上工作了好几天了,它离工作很近了。我可以毫无问题地通过对话框,并且我可以通过一些树获得所需的效果(这些树只是简单地从点和文本项中获取信息,然后像很多一样将它们添加到一起)。当我要求用户输入一个数字(在本例中,它是一个块编号,即块1)时,问题就出现了。输入数字并选择点和文本项后,我得到字符串类型nil error。现在我认为这可能是因为试图添加一个包含空格“”的字符串,或者对话框上的输入可能不是字符串 下面是我正在引用的Lisp:`stringtype nil`试图从对话框中获取信息并将其与其他字符串一起添加时出错,string,dialog,lisp,typeerror,autolisp,String,Dialog,Lisp,Typeerror,Autolisp,程序基本上从点描述中获取信息,从文本项中获取文本,并将文本项添加到点描述中。对话框允许用户选择一些参数,如地段、地段和区块或其他参数。我已经在这个项目上工作了好几天了,它离工作很近了。我可以毫无问题地通过对话框,并且我可以通过一些树获得所需的效果(这些树只是简单地从点和文本项中获取信息,然后像很多一样将它们添加到一起)。当我要求用户输入一个数字(在本例中,它是一个块编号,即块1)时,问题就出现了。输入数字并选择点和文本项后,我得到字符串类型nil error。现在我认为这可能是因为试图添加一个包
strcat
函数:
(vlax put property p_obj’rawdescription(strcat p_desc“BLOCK”type1“obj))
下面是从框中获取信息的程序:
(操作_tile“type1”“(setq type1$value)”)
下面是相关的代码片段,而不是整个程序
这是组合函数
(defun c:txcm_block ( / c_doc p_desc p_obj t_obj t1 t_strg text1 ts obj type1 number)
(vl-load-com)
(while
(setq c_doc (vla-get-ActiveDocument (vlax-get-acad-object))
p_obj (vlax-ename->vla-object (car (entsel "\nSelect Point: ")))
t_strg (vlax-ename->vla-object (car (entsel "\nPick Text.. "))))
(setq obj (vla-get-textstring t_strg))
(setq p_desc(vlax-get p_obj 'rawdescription))
(vlax-put-property p_obj 'rawdescription (strcat p_desc " BLOCK " type1 " " obj))
)
(princ)
)
以下是对话功能:
(defun c:nest2 ( / dcl_id2 number1 flag2)
(setq dcl_id2 (load_dialog "textcombine(input).dcl"))
(setq flag2 4)
(if (not (new_dialog "nest2" dcl_id2)) (exit))
(while (> flag2 2)
(set_tile "type1" "Enter Block Number")
(mode_tile "type1" 2)
(action_tile "type1" "(setq type1 $value)")
(action_tile
"accept"
"(done_dialog 4)"
)
(action_tile
"cancel"
"(done_dialog 0)
(setq result nil)
(c:txcm)"
)
(setq flag2 (start_dialog))
(if (= flag2 4)
(progn
(setq result T)
(c:txcm_block)
)
)
)
(unload_dialog dcl_id2)
)
下面是嵌套的DCL代码:
nest2 : dialog {
label = "Block Number";
: edit_box
{
label = "Enter Block Number: ";
mnemonic = "N";
key = "type1";
alighnment = centered;
edit_limit = 30;
edit_width = 30;
}
: button
{
key = "accept";
label = "Ok";
is_default = true;
fixed_width = true;
alignment = right;
allow_accept = true;
}
: button
{
key = "cancel";
label = "Go Back";
fixed_width = true;
alignment = centered;
}
: errtile
{
width = 17;
}
}
任何帮助都将不胜感激!我已经上网了,但我觉得我被卡住了。如果你需要更多信息,请告诉我 您似乎在
(c:nest2)
内部设置变量type1
,并且确实从(c:nest2)
调用(c:nest2)
,但是(c:txcm\u块)
声明type1
作为其局部变量,因此type1
在进入(c:txcm\u块)时被设置为NIL
NIL
不是一个字符串,因此strcat
自然会抱怨和放弃
从(c:txcm_块)
中的局部变量声明列表中删除type1
,并将其放在(c:nest2)
中的局部变量声明列表中
一般来说,要处理这种情况,请使用调试器“出错时中断”,然后检查执行跟踪,并在此时检查感兴趣的变量(如type1
)的当前值。谢谢!这比我想象的要简单得多