Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lisp:`stringtype nil`试图从对话框中获取信息并将其与其他字符串一起添加时出错_String_Dialog_Lisp_Typeerror_Autolisp - Fatal编程技术网

Lisp:`stringtype nil`试图从对话框中获取信息并将其与其他字符串一起添加时出错

Lisp:`stringtype nil`试图从对话框中获取信息并将其与其他字符串一起添加时出错,string,dialog,lisp,typeerror,autolisp,String,Dialog,Lisp,Typeerror,Autolisp,程序基本上从点描述中获取信息,从文本项中获取文本,并将文本项添加到点描述中。对话框允许用户选择一些参数,如地段、地段和区块或其他参数。我已经在这个项目上工作了好几天了,它离工作很近了。我可以毫无问题地通过对话框,并且我可以通过一些树获得所需的效果(这些树只是简单地从点和文本项中获取信息,然后像很多一样将它们添加到一起)。当我要求用户输入一个数字(在本例中,它是一个块编号,即块1)时,问题就出现了。输入数字并选择点和文本项后,我得到字符串类型nil error。现在我认为这可能是因为试图添加一个包

程序基本上从点描述中获取信息,从文本项中获取文本,并将文本项添加到点描述中。对话框允许用户选择一些参数,如地段、地段和区块或其他参数。我已经在这个项目上工作了好几天了,它离工作很近了。我可以毫无问题地通过对话框,并且我可以通过一些树获得所需的效果(这些树只是简单地从点和文本项中获取信息,然后像很多一样将它们添加到一起)。当我要求用户输入一个数字(在本例中,它是一个块编号,即块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
)的当前值。

谢谢!这比我想象的要简单得多