明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 448|回复: 4

[提问] 文件内字符串检查问题

[复制链接]
发表于 2020-12-27 00:37 | 显示全部楼层 |阅读模式
我要复制一段DCL代码到base.dcl文件里。
要复制进去的代码里含有StampingCAD的文字。
如果检查base.dcl里有这段文字就不执行复制,否则就要复制。
以下程序运行一次就复制一次,请各位大神帮忙看看错在哪里。
我手动在base.dcl里加一段StampingCAD的文字,保存关闭,再执行程序num返回就不是nil,就不会执行复制。
但是程序就是不行,一直返回nil。

(defun Userdcl (st_dcl / adcl tmp fadcl stdata num)
  (setq adcl (findfile "base.dcl"))
  (setq fadcl (open adcl "r"))
  (while (setq stdata (read-line fadcl))
    (setq num (vl-string-search "StampingCAD" stdata))
    (if        (/= num nil)
      (setq num (+ num num))
    )
  )
  (close fadcl)
  (if (= num nil)
    (if        (setq st_dcl (findfile st_dcl))
      (progn (setq tmp (vl-filename-mktemp adcl))
             (vl-file-copy adcl tmp);;;备份
             (vl-file-copy st_dcl adcl T);;;复制
      )
    )
  )
)

(if (= (getvar "SYSCODEPAGE") "ANSI_950")
  (userdcl "base_cht.dcl")
  (userdcl "base_chs.dcl")
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-12-27 09:25 | 显示全部楼层
base.dcl 是CAD 的系统文件,你这是破坏了系统文件啊。
(while (setq stdata (read-line fadcl))
    (setq num (vl-string-search "StampingCAD" stdata)) ;; 如果下一个循环是真,执行 if ,如果是 nil ,把你原来的 num 又赋值 nil 了。下面的 if 语句有什么用。
    (if        (/= num nil)  
      (setq num (+ num num))
    )
  )
 楼主| 发表于 2020-12-27 11:29 来自手机 | 显示全部楼层
vitalgg 发表于 2020-12-27 09:25
base.dcl 是CAD 的系统文件,你这是破坏了系统文件啊。
(while (setq stdata (read-line fadcl))
    (s ...

请教,要怎么改?
发表于 2020-12-27 12:20 | 显示全部楼层
本帖最后由 vitalgg 于 2020-12-27 12:22 编辑
andyding 发表于 2020-12-27 11:29
请教,要怎么改?


(defun Userdcl (st_dcl / adcl tmp fadcl stdata num flag)
  (setq flag nil) ;; 在循环之外设一个标志 值为空
  (setq adcl (findfile "base.dcl"))
  (setq fadcl (open adcl "r"))
  (while (setq stdata (read-line fadcl))
    (if  (vl-string-search "StampingCAD" stdata)
         (setq flag T) ;;如果存在字符串,置 T.
         ))
  (close fadcl)
  (if  flag
       (if   (setq st_dcl (findfile st_dcl))
             (progn (setq tmp (vl-filename-mktemp adcl))
                    (vl-file-copy adcl tmp);;;备份
                    (vl-file-copy st_dcl adcl T);;;复制
                    )
             )
       )
  )

(if (= (getvar "SYSCODEPAGE") "ANSI_950")
  (userdcl "base_cht.dcl")
  (userdcl "base_chs.dcl")
)

如果你有成形稳定的autolisp 作品,可以发布到 atlisp.cn
 楼主| 发表于 2020-12-27 19:16 | 显示全部楼层
vitalgg 发表于 2020-12-27 12:20
(defun Userdcl (st_dcl / adcl tmp fadcl stdata num flag)
  (setq flag nil) ;; 在循环之外设一个 ...

谢谢你的帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 05:11 , Processed in 0.318873 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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