xiaocainiao 发表于 2023-12-12 07:54:31

难题求教!让字符串成为一个变量

;判断注册表是否存在并设置默认值
(defun READZC (col mrz /)
(setq col (vl-registry-read "HKEY_CURRENT_USER\\Software\\NUM\\" "col"))
(if col
    (setq col col)
    (setq col mrz)
)
)

(READZC la "8")想搞个这样的自定义函数、但是"col"不知道怎么让他成为一个变量、求教各位大神有没有好的办法

llsheng_73 发表于 2023-12-13 13:20:48

本帖最后由 llsheng_73 于 2023-12-14 13:09 编辑

(defun READZC(str val / va)
(set(read str)
      (if(setq va(vl-registry-read "HKEY_CURRENT_USER\\Software\\NUM\"" str))
      va val))
)

_$ (defun READZC(str val)
(set(read str)
      (if(set(read str)(vl-registry-read "HKEY_CURRENT_USER\\Software\\NUM\"" str))
      str val))
)
READZC
_$ la
nil
_$ col
nil
_$ (READZC "col"1)
1
_$ col
1
_$ (READZC"la""图层1")
"图层1"
_$ la
"图层1"
_$(vl-registry-write "HKEY_CURRENT_USER\\Software\\NUM\"" "la""图层2")

"图层2"


$ (READZC"la""图层1")
"图层2"
_$ la
"图层2"
_$

xiaocainiao 发表于 2023-12-12 10:36:13

飞雪神光 发表于 2023-12-12 10:06
把引号去掉就对应了 (vl-registry-read relj key) 我这里发的你是看都没看吗

;设置颜色
(setq col (vl-registry-read "HKEY_CURRENT_USER\\Software\\num\\" "col"))
(if col
        (setq col col)
        (setq col "8")
)

;设置图层
(if la
        (setq la la)
        (setq la "0")
)

;设置线型比例
(setq lts (vl-registry-read "HKEY_CURRENT_USER\\Software\\num\\" "lts"))
(if lts
        (setq lts lts)
        (setq lts "1")
)

我现在就是有很多这样的代码、每次都是重复的、比较乱、所以想搞一个自定义函数

飞雪神光 发表于 2023-12-12 08:10:38

(read "col")或 'col 就是变量了
;;说明:获取注册表值 有则读取 无则新建
;;参数:relj:注册表路径
;;参数:key:键
;;参数:va:键值
;;返回:(getrelj relj "kehu1" 1)
(defun getrelj(relj key va /)
        (if (vl-registry-read relj key)
                (setq bl(vl-registry-read relj key))
                (vl-registry-write relj key (setq bl va))
        )
        bl
)

xiaocainiao 发表于 2023-12-12 08:46:20

飞雪神光 发表于 2023-12-12 08:10


谢谢、不过你这个好像变量值太多了、你看下我发的那个代码、我想要自定义函数里面只有col和mrz这两个、注册表的主键值想让他不固定、不知道有没有办法实现

kucha007 发表于 2023-12-12 09:19:29

不知道是不是这个意思?

(set (read "STR") "你的值") -->>等于 (setq STR "你的值")


lijiao 发表于 2023-12-12 09:29:39

本帖最后由 lijiao 于 2023-12-12 09:31 编辑

;判断注册表是否存在并设置默认值
(defun READZC (col mrz / mrz1)
(setq      mrz1 (vl-registry-read
            "HKEY_CURRENT_USER\\Software\\NUM\\\"
            "col"
            )
)
(if mrz1
    (set col mrz1)
    (set col mrz)
)
)


(READZC 'la "8")

xiaocainiao 发表于 2023-12-12 09:37:06

lijiao 发表于 2023-12-12 09:29


你好、我现在想要要解决的是注册表主键中的"col"、怎么让他和(READZC la "8")中的la是对应的

飞雪神光 发表于 2023-12-12 10:06:14

xiaocainiao 发表于 2023-12-12 09:37
你好、我现在想要要解决的是注册表主键中的"col"、怎么让他和(READZC la "8")中的la是对应的

把引号去掉就对应了 (vl-registry-read relj key) 我这里发的你是看都没看吗

xiaocainiao 发表于 2023-12-12 10:27:45

飞雪神光 发表于 2023-12-12 10:06
把引号去掉就对应了 (vl-registry-read relj key) 我这里发的你是看都没看吗

看了啊、但是你应该没太明白我的需求、我那个获取注册表主键代码中是有两个col的、我是想将这两个col作为同一个自变量来使用的

飞雪神光 发表于 2023-12-12 10:35:37

没明白你说的 但是代码应该是这个意思 你在纠结变量名?变量多了也不行?
(defun readzc (col mrz /)
(setq col (vl-registry-read "HKEY_CURRENT_USER\\Software\\NUM\\" col))
(if col
    (setq col col)
    (setq col mrz)
)
        col
)
页: [1] 2 3 4
查看完整版本: 难题求教!让字符串成为一个变量