明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 张和平

[讨论] 【讨论】保存程序系统变量

[复制链接]
 楼主| 发表于 2013-5-24 18:07 | 显示全部楼层
fl202 发表于 2013-5-24 17:42
放在txt中最简单,就用read-line及write-line,不用vl等函数,适用性广。把txt文件存在该dwg文档同一个文件 ...

你看看我编好的,不知道你们是怎么编的,不放发上来探讨一下。。。
我的在10楼
 楼主| 发表于 2013-5-24 21:42 | 显示全部楼层
固然被G版评分了,,,荣幸啊,,不过G版也加入讨论啊,,给些参考,,,
 楼主| 发表于 2013-5-24 22:14 | 显示全部楼层
继续更新上读取存在txt中的变量名和变量,,
  1. (vl-load-com)
  2. (defun c:test()
  3.   (defun *error* (msg)  ;错误处理函数
  4.     (princ "\n**error: ")
  5.     (princ msg)      ;_ 打印错误信息
  6.     (princ)         
  7.   )
  8.   ;|(setq PEACE:SYSVAL1 3  ;设定变量
  9.         PEACE:SYSVAL2 2
  10.         PEACE:SYSVAL3 3
  11.         PEACE:SYSVAL4 "4"
  12.         PEACE:SYSVAL5 "5"
  13.         PEACE:SYSVAL6 "DFFDS"
  14.   )
  15.   
  16.   (PEACE:SAVESYSVAL "PEACE:SYSVAL1" PEACE:SYSVAL1)
  17.   (PEACE:SAVESYSVAL "PEACE:SYSVAL2" PEACE:SYSVAL2)
  18.   (PEACE:SAVESYSVAL "PEACE:SYSVAL3" PEACE:SYSVAL3)
  19.   (PEACE:SAVESYSVAL "PEACE:SYSVAL4" PEACE:SYSVAL4)
  20.   (PEACE:SAVESYSVAL "PEACE:SYSVAL5" PEACE:SYSVAL5)
  21.   (PEACE:SAVESYSVAL "PEACE:SYSVAL6" PEACE:SYSVAL6)
  22.   ;(princ (strcat "\n变量成功保存入" acadpath "\\PEACESYSVAL.TXT"))|;
  23.   ;以下涉及的PEACE:SYSVAL7~10是自己手动输入的,,,
  24.   (PEACE:READSYSVAL)
  25.   (princ "\n")
  26.   (princ PEACE:SYSVAL7)
  27.   (princ "\n")
  28.   (princ PEACE:SYSVAL8)
  29.   (princ "\n")
  30.   (princ PEACE:SYSVAL9)
  31.   (princ "\n")
  32.   (princ PEACE:SYSVAL10)
  33.   (princ)
  34. )
  35. (defun PEACE:SaveSysVal(valname valvalue / acadpath f datalist data valvalue_old i isthere)
  36.   (setq acadpath(vlax-get-property (vlax-get-acad-object) 'Path))
  37.   (IF (null (findfile "PEACESYSVAL.TXT"))
  38.     (progn ;若文件不存在
  39.       (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "w"))
  40.       (prin1 (list valname valvalue) f)
  41.       (close f)
  42.     )
  43.     (progn ;若文件已存在
  44.       (setq datalist '())
  45.       (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "r"))
  46.         (while (setq data (read-line f))
  47.               (setq datalist (cons data datalist))
  48.         )
  49.         (reverse datalist)
  50.       (close f)
  51.       ;(princ "\n")
  52.       ;(princ datalist)
  53.       (setq       i 0
  54.             isthere 0)
  55.       (repeat (length datalist)
  56.         (if (= valname (car (read (nth i datalist))))
  57.           (progn
  58.           (setq datalist (subst (list valname valvalue) (read (nth i datalist)) datalist))
  59.           (setq isthere 1)
  60.           )
  61.         )
  62.         (setq i (1+ i))
  63.       )
  64.       ;(princ "\n")
  65.       ;(princ isthere)
  66.       (if (= 1 isthere)
  67.         (progn
  68.           (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "w"))
  69.           (prin1 (read (nth 0 datalist)) f)
  70.           (close f)
  71.           (setq i 1)
  72.           (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "a"))
  73.           (repeat (- (length datalist) 1)
  74.             (write-line "" f)
  75.             (prin1 (read (nth i datalist)) f)
  76.             (setq i (1+ i))
  77.           )
  78.           (close f)
  79.         )
  80.         (progn
  81.           (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "a"))
  82.           (write-line "" f)
  83.           (prin1 (list valname valvalue) f)
  84.           (close f)
  85.         )
  86.       )
  87.     )
  88.   )
  89.   (princ)
  90. )
  91. (defun PEACE:ReadSysVal( / acadpath data datalist i)
  92.   (setq acadpath(vlax-get-property (vlax-get-acad-object) 'Path))
  93.   (if (findfile "PEACESYSVAL.TXT")
  94.     (progn
  95.     (setq datalist '())
  96.     (setq f (open (strcat acadpath "\\PEACESYSVAL.TXT") "r"))
  97.       (while (setq data (read-line f))
  98.             (setq datalist (cons data datalist))
  99.       )
  100.       (reverse datalist)
  101.     (close f)
  102.     (setq i 0)
  103.     (repeat (length datalist)
  104.       (set (read (car (read (nth i datalist)))) ;注意字符和表之间的转换,字符串是不能作为变量名的
  105.             (cadr (read (nth i datalist)))      ;car对字符串也是不起作用的
  106.       )
  107.       (setq i (1+ i))
  108.     )
  109.     )
  110.   )
  111. )
 楼主| 发表于 2013-5-25 14:01 | 显示全部楼层
昨天放上的源码还是有误,今天放上更新之后的。
发表于 2013-7-2 16:56 | 显示全部楼层
你编程序的时候,变量名起的很长,好像很多人都这样,我感觉写着累,别人看着也累,执行起来变量名超过6个字符的理论上速度也慢一点,不明白为什么都这么做?
你最终的程序是放在1楼还是10楼还是哪里?
你这个程序的目的是?注册还是怎样?
做项目的时候,一个项目的图框中有些内容是固定的,比如那个公司,那个设计阶段,我把这些数值放在txt文件中,这样在同一个文件夹下,不同的图纸文件都调用这个txt,把这些数值写到图框的固定位置中去。你看看,不知道是否对你有用。
(setq ff (findfile "tk1.txt"))
  (setq ff1 (open ff "r"))
  (setq b4 '() b1 '() b2'() n 1)
   (setq b3 (read-line ff1))
   (if (null b3)
     (progn
            (close ff1)       (setq ff1 (open ff "w"))
            (setq ktxt1 (strcat "\"" "08009" "\"" " " "\"" "801" "\"" " "
                                "\"" "车间" "\"" " " "\"" "有限公司" "\"" " "
                            "\"" "万吨/年产品" "\""))
             (write-line ktxt1 ff1)      
            (setq ktxt1 (strcat "\"" "08010" "\"" " " "\"" "285" "\"" " "
                                "\"" "车间" "\"" " " "\"" "有限公司" "\"" " "
                            "\"" "万吨/年产品" "\""))
             (write-line ktxt1 ff1)
  (close ff1)
            (setq ff1 (open ff "r"))  (setq b3 (read-line ff1))
       ))
   (while b3
        (setq b2 (read (strcat "(" b3 ")")))
        (setq b1 (cons (nth 0 b2) b1)) ;(print b1)
        (setq b4 (cons b2 b4))
        (setq n (1+ n))
       (setq b3 (read-line ff1))
     )  
  (close ff1)
(setq b1 (reverse b1))  (setq b4 (reverse b4)); (print (assoc "08010" b4))
 楼主| 发表于 2013-7-3 08:52 | 显示全部楼层
fl202 发表于 2013-7-2 16:56
你编程序的时候,变量名起的很长,好像很多人都这样,我感觉写着累,别人看着也累,执行起来变量名超过6个字 ...

我这个的作用是保存编制的软件的变量,比如画根pline,我定义过宽度,那么我要他记住,下次读取一下,不用重新设置了。
变量名取得长是因为避免变量名重复,特别是全局变量。
 楼主| 发表于 2013-7-3 08:57 | 显示全部楼层
fl202 发表于 2013-7-2 16:56
你编程序的时候,变量名起的很长,好像很多人都这样,我感觉写着累,别人看着也累,执行起来变量名超过6个字 ...

最后的命令流放在一楼。
发表于 2013-7-15 06:01 | 显示全部楼层
peace变量讨论,研究的很细呀
发表于 2013-7-15 08:47 | 显示全部楼层
fl202 发表于 2013-7-2 16:56
你编程序的时候,变量名起的很长,好像很多人都这样,我感觉写着累,别人看着也累,执行起来变量名超过6个字 ...

考虑速度就不要用LISP了,代码关键还是易读易懂好,我的函数名、变量名还要长,哈哈
发表于 2013-7-15 09:29 | 显示全部楼层

楼主想得太复杂了 看我的。。。

本帖最后由 vectra 于 2013-7-15 09:33 编辑

  1. (defun ace-config-restore (filename / f line text data)
  2.   (setq        f    (open filename "r")
  3.         text ""
  4.   )
  5.   (while (setq line (read-line f))
  6.     (setq text (strcat text line))
  7.   )
  8.   (close f)

  9.   (setq data (read text))
  10.   (mapcar '(lambda (x) (set (car x) (cdr x))) data)
  11. )


  12. (defun ace-config-save (filename symbols / f data)
  13.   (setq
  14.     data
  15.      (apply
  16.        'list
  17.        (mapcar
  18.          '(lambda (x) (cons x (vl-symbol-value x)))
  19.          symbols
  20.        )
  21.      )
  22.   )
  23.   (setq f (open filename "w"))
  24.   (prin1 data f)
  25.   (close f)
  26. )

Sample:

_$ (setq val1 "Text1")
"Text1"
_$ (setq val2 pi)
3.14159
_$ (setq val3 42)
42
_$ (ace-config-save "d:/config.txt" '(val1 val2 val3))
nil
_$ (setq val1 "changed..")
"changed.."
_$ (ace-config-restore "d:/config.txt")
("Text1" 3.14159 42)
_$ val1
"Text1"

评分

参与人数 1明经币 +1 收起 理由
冰之绝恋 + 1 简单粗暴+1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-4-20 06:17 , Processed in 0.229380 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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