guitarguy1685 发表于 2022-7-6 11:35:32

我的代码中有错误

我编写这个LISP是为了在我的图形中绘制引线和注释对象。让我解释一下设置。我们有名字像G,B,A,还有一个像21111。在lisp的第一部分中,我使用entsel获得块的名称,然后它通过第一次检查。
 
(如果(>(atoi PARTXT)0)
 
开头有字母的块始终为0,其他块始终大于0。我需要这样做,因为名称为21111的块被分配了另一个数字,如A10。当第一张支票是T时,它将通过a。dat文件(出于上传目的,其文件扩展名为.txt)以检索相应的“A”号。因此,如果块是B#####或G 35;####类型,它会跳过lisp的这一部分(至少这是我的计划)。
 
如果21111未在中列出。dat文件,然后将其分配编号A00。
 
然后它将解析块名并将其更改为,例如,A1234到A12.34,G1234到G12.34。但A11仍将是A11。我希望这有意义。
 
这是我的问题。当我第一次尝试标记G####或F####块时,我得到以下错误
 
但是,如果我首先尝试标记名为21345的块,例如,它可以工作。然后,当我标记其他块时,它们也起作用。我不确定我错过了什么。非常感谢您的帮助。
 
另外,我没有申报任何当地人,因为我还没用完atm。
(defun C:测试(/)(setq CRcecho(getvar“cmdecho”);;;存储curret sysvar(setq CRdimas(getvar“dimassoc”))(setq CRortho(getvar“orthomode”))(setq CRAttRq(getvar“ATTREQ”))(setq CRAttDi(getvar“ATTDIA”))(setvar“cmdecho”0)(setvar“dimassoc”2)(setq CRdmsty(getvar“DIMSTYLE”))(graphscr);------------------------------------------------------------------(setq*error*;;在(lambda(msg);;)的情况下重置系统变量;;;错误、esc、exit、cancel(setvar“cmdecho”CRcecho)(setvar“dimassoc”CRdimas)(命令“-dimstyle”“r”CRdmsty)(princ msg)(princ));---------------------------------------------------------------------------------(setq CRuprec(getvar“LUPREC”))(setq CRLunit(getvar“LUNITS”))(setq Partblk(entsel”\n选择零件或输入零件号:)(if(=Partblk nil)(progn(princ“\n***未选择块***”)(setq PartTxt(strcase(getstring”\n输入零件号:))P1(getpoint“\n指定引线起点:”);end prog1(progn(setq PartLst(entget(car Partblk)))(if(/=(cdr(assoc 0 PartLst))“INSERT”)(progn(princ“\n***对象不是块***”)(setq PARTXT(strcase(getstring“\n输入部件号:”))P1(getpoint“\n指定引线起点:”))(progn(setq PARTXT(cdr(assoc 2 PartLst))P1(car(cdr Partblk)аа])))[颜色=红色](if(>(atoi PARTXT)0)[/颜色](progn(setq ExtNbr(strcat“*”PARTXT);将asterix添加到ExtNbr文件(findfile“L:/WSICustomAutoCAD/LISP/Development/VALB_EXT.dat”);查找数据文件fp(打开文件“r”);打开文件读取项目(读取fp行);第一行是文件标签);setq(while item;处理文件的每一行(if(=item ExtNbr));比较值(setq PARTXT(读取fp行);读取行项目nil;停止搜索项目);setq(setq项目(读取fp行)PARTXT“A000”);继续搜索项目);如果);while(princ“\n***dat file name***”)(setq PartTxt PartTxt))(关闭fp);分配给变量(if(>(strlen PartTxt)4)(setq PartTxtIns(strcase(strcat(substr PartTxt 1 3)”(substr PartTxt 4 2))(setq PartTxtIns PartTxt));结束if(if(>(strlen PartTxtIns)4)(cond((=(substr PartTxt 1 1)“A”)(setq TagR“L:/drawingulities/SA-PARTR“TagL”L:/drawingulities/SA-PARTL”)(=(substr PartTxt 1 1)“B”)(setq TagR“L:/drawingulities/B-PARTR“TagL”L:/drawingulities/B-PARTL”)(=(substr PartTxt 1 1)“F”)(setq TagR“L:/drawingulities/F-PARTR“TagL”:图纸实用性/F-PARTL”)((=(substr PartTxt 1 1)“G”)(setq TagR“L:/drawingulities/G-PARTR“TagL”L:/drawingulities/G-PARTL”)((=(substr PartTxt 1 1 1)“H”)(setq TagR“L:/drawingulities/H-PARTR“TagL”L:/drawingulities/H-PARTL”));结束第1秒(cond((=(substr PartTxt 1 1)“A”)(setq TagR”L:/drawingulities/A-PARTR“TagL”L:/drawingulities/A-PARTL”)(((=(substr PartTxt 1 1)“M”)(setq TagR”L:/drawingulities/M-PARTR“TagL”L:/drawingulities/M-PARTL”)((=(substr PartTxt 1 1)“S”)(setq TagR”L:/drawingulities/S-PARTR“TagL”L:/drawingulities/S-PARTL”));结束第二秒);结束if(setq CRDSCL(getvar“DIMSCALE”);(set_wsitextstyle);(_dimleader\u设置)(if(=(tblsearch“dimstyle”WSILEADER)nil)(vl cmdf“_.dimstyle”s“WSILEADER”)(vl cmdf“_.dimstyle”s“WSILEADER”y”)(setvar“orthomode”0)(setvar“ATTREQ”1)(setvar“ATTDIA”0);(setq P1(getpoint“\n指定引线起点:”)(setq P2(getpoint“\n指定引线着陆点”P1))(如果(

guitarguy1685 发表于 2022-7-6 12:11:59

好吧,我去掉了这行(关闭fp),lisp似乎可以工作。不知道为什么会引起问题。

Lee Mac 发表于 2022-7-6 12:19:25

GuitarGuy,
 
您需要检查文件是否找到,以及打开是否正确执行。
 
查看close函数的返回值,以了解接收错误消息的原因:眨眼:

guitarguy1685 发表于 2022-7-6 12:51:01

谢谢我会调查并报告
页: [1]
查看完整版本: 我的代码中有错误