明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4081|回复: 7

error: bad argument type: stringp nil请求查错

[复制链接]
发表于 2008-3-31 16:32 | 显示全部楼层 |阅读模式

版主:您好!

      有个程序请求帮助,程序是读入一个坐标文件,比如序号1  坐标pt1 坐标pt1(见下面坐标文件),我需要利用附件的程序,读出pmend数值(中间的pmk数值可以读出),现在运行后出现 error: bad argument type: stringp nil,怎么调也调不出来,版主能否帮助一下啊,则不胜感激。

1  -1.945 1.353 -3.274 2.552
2  -1.945 1.236 -3.325 2.199
3  -1.945 1.153 -3.35 1.824
3  -1.945 1.076 -3.35 1.824
4  -1.945 0.991 -3.355 1.476
5  -1.945 0.817 -3.381 1.135
7  -1.945 0.485 -3.389 0.456
8  -1.945 0.409 -3.413 0.149
9  -1.771 0.108 -3.446 -0.155
9  -1.672 0.108 -3.446 -0.155
9  -1.573 0.108 -3.446 -0.155
10 -1.771 -0.364 -3.446 -0.487
10 -1.672 -0.364 -3.446 -0.487
10 -1.573 -0.364 -3.446 -0.487
11 -1.771 -0.837 -3.446 -0.818
11 -1.672 -0.837 -3.446 -0.818
11 -1.573 -0.837 -3.446 -0.818
12 -1.945 -1.080 -3.438 -1.166
13 -1.945 -1.179 -3.397 -1.506
14 -1.945 -1.300 -3.381 -1.862
14 -1.945 -1.377 -3.381 -1.862
15 -1.725 -1.577 -3.381 -2.242
15 -1.621 -1.577 -3.381 -2.242
16 -1.447 -1.577 -3.31 -2.589
17 -1.371 -1.577 -2.55 -3.268
18 -0.805 -1.577 -2.18 -3.308
18 -0.729 -1.577 -2.18 -3.308
19 -0.652 -1.577 -1.82  -3.333
19 -0.576 -1.577 -1.825 -3.333
20 -0.459 -1.577 -1.479 -3.363
21 -0.383 -1.577 -1.143 -3.398
22 -0.245 -1.577 -0.812 -3.413
23 -0.169 -1.577 -0.471 -3.433
24 -0.015 -1.577 -0.151 -3.453
24 0.061 -1.577 -0.151 -3.453
25 0.515 -1.577 0.154 -3.443
26 0.717 -1.577 0.472 -3.461
27 0.817 -1.577 0.817 -3.452
28 0.916 -1.577 1.167 -3.452
29 1.143 -1.577 1.525 -3.439
29 1.220 -1.577 1.525 -3.439
30 1.296 -1.577 1.863 -3.395
30 1.373 -1.577 1.863 -3.395
31 1.705 -1.577 2.217 -3.359
32 1.782 -1.577 2.609 -3.339
33 1.945 -0.451 3.268 -2.57
33 1.945 -0.375 3.268 -2.57
34 1.945 -0.298 3.336 -2.225
34 1.945 -0.222 3.336 -2.225
35 1.945 -0.134 3.369 -1.839
36 1.945 -0.057 3.355 -1.478
37 1.945 0.172 3.364 -1.129
38 1.945 0.249 3.379 -0.8
39 1.945 0.325 3.399 -0.461
40 1.945 0.402 3.414 -0.151
41 1.945 0.478 3.414 0.142
42 1.945 0.555 3.399 0.47
43 1.945 0.631 3.389 0.794
44 1.945 0.708 3.379 1.133
45 1.945 0.784 3.345 1.494
46 1.945 0.861 3.32 1.823
47 1.945 0.937 3.291 2.186
48 1.945 1.080 3.291 2.575
49 1.945 1.242 2.547 3.28
50 1.945 1.404 2.163 3.29
51 1.073 1.578 1.824 3.324
52 0.997 1.578 1.47 3.368
53 0.920 1.578 1.13 3.378
54 0.844 1.578 0.791 3.403
55 0.767 1.578 0.46 3.417
56 0.691 1.578 0.15 3.427
57 0.614 1.578 -0.149 3.427
58 0.538 1.578 -0.469 3.432
59 0.461 1.578 -0.808 3.403
60 0.317 1.578 -1.143 3.393
60 0.209 1.578 -1.143 3.393
61 0.101 1.578 -1.487 3.378
62 -0.007 1.578 -1.841 3.354
63 -0.115 1.578 -2.185 3.304
63 -0.223 1.578 -2.185 3.304
64 -0.331 1.578 -2.574 3.3
64 -0.439 1.578 -2.574 3.3

 楼主| 发表于 2008-3-31 16:35 | 显示全部楼层

LISP程序如下:

;;;读取外部坐标点文件,并部分主程序
(defun c:rdf1()
    (setq os(getvar "osmode")) (setvar "osmode" 0);;关闭捕捉功能
    (setvar "cmdecho" 0)
    (setvar "pdmode" 34)
    (setq ffn (getfiled "选取文件" "" "pot" 2))
    (setq dima (getreal "输入金丝直径(um)  :"))
    (setq ff (open ffn "r"))
    (setq data (read-line ff))  ;;;注意是-  不是_  返回文件的该行字符串
    (setq mm (strlen data))
  
 
    ;;(while (/= data '() )
    (while (/= mm 0 )
 (setq p "" pp "" ppp '() i 1 j 1)   ;;j=1可以控制后面的使TXT前面的空格不被计算在内
 (setq nn (strlen data));;;返回字符串的个数
         (repeat nn
                (setq p (substr data i 1));;;返回第i个起始 1个字长长度的字符
              ;;(princ "\np    ") (princ p)
             (if (/= p " ")
                 (progn
                    (setq pp (strcat pp p))  ;;;将多个字符串结合成一个长的字符串后返回
                    (setq j 2)               ;;;设定J=2主要是给数字后面空一格用
                  )
              )
              (if (and (= p " ") (> j 1))   ;;判断是否是空格,当第一个空格时,加上;第二个开始后空格不加上,直到出现后续非空格为止
                 (progn
                    (setq ppp (cons pp ppp) pp "")  ;;cons将新的前置元素和列表结合为新的列表
                    (setq j (- j 1))                ;;已经空一格后J减去1,使第二个空格不被连入后面的数值
                  )
                )
           ;;(princ "\n ppp0:    ") (princ ppp)
     (setq i (1+ i))
          )   ;;repeat结束
      (setq ppp (cons pp ppp))
      (setq ppp (reverse ppp));;;返回原列表相反的顺序
    
       (draw_wires);;调用子程序
      (getmn)  ;;调用中点子程序
      (setq pt1 (list x1 y1 z))
      (setq pt2 (list x2 y2 z))
      (setq pm (list am bm z))  ;;取得中心点  
       
      (princ "\npm ") (princ k) (princ "=   ") (princ pm) 
      (princ "\n  ")
      (setq cont (itoa k)) 
      (setq data (read-line ff))  ;;;注意是-  不是_
      (setq mm (strlen data))
     (setq k (+ k 1))     
    ) ;;;while结束
   (close ff);;关闭文件
   (setq pm (list am bm z))  ;;取得中心点
   (command "donut" 0 (* (/ dima 1000) 2.2)  pm "")  ;;打印中心点
    (princ "pmend") (princ k) (princ "=   ") (princ pm)
    (setvar "osmode" os) ;;回原捕捉功能
)

;;;取坐标子程序
(defun draw_wires()   
     (setq x1 (atof (cadr ppp)))  ;;;atof是字符串转换成实数,取得键合点坐标  
    (setq y1 (atof (caddr ppp)))  
    (setq x2 (atof (nth 3 ppp)))   
    (setq y2 (atof (nth 4 ppp)))  
    (setq z 0)   
)

(defun getmn()  ;;计算中心值坐标
      (setq  a1 x1)
       (if  (> ax a1)
            (setq ax a1)
       )
       (if (< an a1)
           (setq an a1)
       )
       (setq am (/ (+ ax an) 2))
       (setq  b1 y1)
       (if  (> bx y1)
            (setq bx b1)
       )
       (if (< bn b1)
           (setq bn b1)
       )
       (setq bm (/ (+ bx bn) 2))

  (princ "\nax=  ") (princ ax)
  (princ "\nan=  ") (princ an)
  (princ "\nbx=  ") (princ bx)
  (princ "\nbn=  ") (princ bn) 
)

发表于 2008-4-1 08:58 | 显示全部楼层

    (while (/= mm 0 )

。。。。。。。

(setq data (read-line ff))  ;;;注意是-  不是_
      (setq mm (strlen data))

有问题当读到末尾是已无值 为 "" (setq mm (strlen data))就返回错误应加一句判断(if (eq data "").........

 楼主| 发表于 2008-4-2 13:08 | 显示全部楼层

非常感谢侠客,我会继续努力!

 楼主| 发表于 2008-4-2 23:24 | 显示全部楼层

侠客:你好!

在  (setq data (read-line ff))  ;;;注意是-  不是_
下加入了

(if (= data "")
          (setq mm 0)
          (setq mm (strlen data))
)

还是出现同样报警,请侠客继续指导,非常感谢!!

发表于 2008-4-2 23:39 | 显示全部楼层

应该是

(if (or data (= data ""))

 (setq mm 0)

 (estq mm (strlength data))

)

因为data可能是nil

 楼主| 发表于 2008-4-3 23:04 | 显示全部楼层

报警同样没有销掉,请侠客继续指导,非常感谢!!

 楼主| 发表于 2008-4-8 14:40 | 显示全部楼层

版主:您好!

   此问题关闭,根据版主提示,已经找到了解决的方法了,是多设定一次赋值与判断就可以了。

谢谢版主

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-28 06:23 , Processed in 0.511135 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表