明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6601|回复: 5

[函数] 关于读取本文数据的问题~参数类型错误: stringp nil

[复制链接]
发表于 2011-7-13 15:55 | 显示全部楼层 |阅读模式
  本人写了一个简单的展点小程序自己使用的
为方便阅读,将简化如下
;展点号,点号,X,Y,Z
(defun C:zdh ()
  (setq oce (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  ;--------------------
  (setq fd1 (getfiled "请选择一个DAT文件" (getvar "dwgprefix") "dat" 16))
  (setq fd (open fd1 "r"))
  (setq dt1 (read-line fd))
  (while (read dt1);dt1改为(read dt1)解决了读取空行报错的问题!
    (setq n (vl-string-position (ascii ",") dt1)
          n1 (vl-string-position (ascii ",") dt1 (1+ n))
          n2 (vl-string-position (ascii ",") dt1 (1+ n1))
   dh (substr dt1 1 n)
          y (atof (substr dt1 (+ n 2) (- (- n1 n) 1)))
          x (atof (substr dt1 (+ n1 2) (- (- n2 n1) 1)))
    )
    (command ".point" (list x y 0) )
    (command ".TEXT" "ML" (list (+ 5 x) y 0) 2 0 dh)   
    (setq dt1 (read-line fd))
  );while
  ;--------------------
  (setvar "cmdecho" oce)
  (princ)
)
whlie 循环的dt1改为(read dt1)是为了防止空行报错
请问还有没有什么好的思路解决空行问题啊~
使用后可以正常展点,没什么问题
就是会报错,; 错误: 参数类型错误: stringp nil
我仔细检查了,应该没有什么逻辑错误啊 虽然能运行但是报错还是心理不爽
请各位高手看看 是什么原因呢 哪里需要修改下
发表于 2011-7-13 16:22 | 显示全部楼层
本帖最后由 Andyhon 于 2011-7-13 22:32 编辑

  (setq dt1 (read-line fd))
  (while (read dt1);dt1改为(read dt1)解决了读取空行报错的问题!
==>
  ;; (setq dt1 (read-line fd))
  (while (setq dt1 (read-line fd))
    (if (read dt1)  ;dt1改为(read dt1)解决了读取空行报错的问题!
    ;; or (if (/= dt1 "") ....
       ....  
发表于 2011-7-13 16:29 | 显示全部楼层
本帖最后由 zhynt 于 2011-7-13 16:30 编辑


  1. (defun C:zdh ()
  2.   (setq oce (getvar "cmdecho"))
  3.   (setvar "cmdecho" 0)
  4.   (setvar "osmode" 0)                                            ;--------------------
  5.   (setq fd1 (getfiled "请选择一个DAT文件" (getvar "dwgprefix") "dat" 16))
  6.   (setq fd (open fd1 "r"))
  7.   (setq dt1 (read-line fd))
  8.   (while dt1  
  9.     (if        (/= dt1 nil)
  10.       (progn (setq n  (vl-string-position (ascii ",") dt1)
  11.                    n1 (vl-string-position (ascii ",") dt1 (1+ n))
  12.                    n2 (vl-string-position (ascii ",") dt1 (1+ n1))
  13.                    dh (substr dt1 1 n)
  14.                    y  (atof (substr dt1 (+ n 2) (- (- n1 n) 1)))
  15.                    x  (atof (substr dt1 (+ n1 2) (- (- n2 n1) 1)))                  
  16.              )
  17.              (command ".point" (list x y 0))
  18.              (command ".TEXT" "ML" (list (+ 5 x) y 0) 2 0 dh)
  19.       )
  20.     )
  21.     (setq dt1 (read-line fd))
  22.   )        
  23.   (setvar "cmdecho" oce)
  24.   (princ)
  25. )
 楼主| 发表于 2011-7-13 22:11 | 显示全部楼层
我想问下为什么会出现这个情况呢
我的程序如果是空行那(read dt1)为nil
就已经推出whlie循环了 那个报错是那个语句发出的呢~
发表于 2011-7-13 22:37 | 显示全部楼层
(while (read dt1)
------------------------
当 dt1 为 空行时 (read dt1) ===> nil
照说在空行之下还有资料待处理吧
(while nil ===> 跳出了
发表于 2011-7-13 22:44 | 显示全部楼层
或者这样也行:

  1. (defun C:zdh ()
  2.   (setq oce (getvar "cmdecho"))
  3.   (setvar "cmdecho" 0)
  4.   (setvar "osmode" 0)                                            ;--------------------
  5.   (setq fd1 (getfiled "请选择一个DAT文件" (getvar "dwgprefix") "dat" 16))
  6.   (setq fd (open fd1 "r"))  
  7.   (while (setq dt1 (read-line fd))
  8.     (setq n  (vl-string-position (ascii ",") dt1)
  9.           n1 (vl-string-position (ascii ",") dt1 (1+ n))
  10.           n2 (vl-string-position (ascii ",") dt1 (1+ n1))
  11.           dh (substr dt1 1 n)
  12.           y  (atof (substr dt1 (+ n 2) (- (- n1 n) 1)))
  13.           x  (atof (substr dt1 (+ n1 2) (- (- n2 n1) 1)))
  14.     )
  15.     (command ".point" (list x y 0))
  16.     (command ".TEXT" "ML" (list (+ 5 x) y 0) 2 0 dh)  
  17.   )      
  18.   (setvar "cmdecho" oce)
  19.   (princ)
  20. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 01:43 , Processed in 0.175508 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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