羊渔蛋 发表于 2015-12-15 08:32:16

如何创建字典类型的数据列表??

我在明经翻译的VLISP函数手册里看到有dictadd,dictnext等关于字典数据列表的函数,但是我要如何选创建一个dict类型的列表?

我猜应该和(setq list1 ‘(a b c))差不多吧,但是没有找到相关的教程和说明,求各位前辈指条明路。


http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 羊渔蛋的微博

qq1254582201 发表于 2019-6-16 16:38:39

厉害了,能不能把要创建的东西直接以字典形式,添加到cad中呢

zcsoft 发表于 2023-3-10 21:03:49

看来大师是高级LISP开发者?对字典操作很熟悉

hxuerong1 发表于 2019-3-24 22:27:43

多谢大师,造福人类

xiaolong1487 发表于 2015-12-15 18:37:21

vlax-ldata-put



存储图形词典或对象中的 LISP 数据

(vlax-ldata-put dict key data )
参数

dict

VLA 对象、AutoCAD 图形图元对象或指定全局词典的字符串。

key

字符串,指定词典关键字。

data

要存储到词典中的 LISP 数据。

private

如果从独立名称空间 VLX 调用 vlax-ldata-put,且 private 的值非 nil,则 vlax-ldata-put 仅将同一 VLX 的数据标为可检索的。

返回值

data 的值。

示例

_$ (vlax-ldata-put "dict" "key" '(1))
(1)
_$ (vlax-ldata-put "dict" "cay" "Gumbo jumbo")
"Gumbo jumbo"

xiaolong1487 发表于 2015-12-15 18:37:53

本帖最后由 xiaolong1487 于 2015-12-15 18:39 编辑

vlax-ldata-get

在图形词典或对象中检索 LISP 数据

(vlax-ldata-get dict key )
参数

dict

VLA 对象、AutoCAD 图形图元对象或指定全局词典的字符串。

key

字符串,指定词典关键字。

default-data

如果词典中没有匹配的关键字,则返回该 LISP 数据。

private

如果 private 的值非空,且从独立名称空间 VLX 调用 vlax-ldata-get,则 vlax-ldata-get 在 dict 中检索私有 LISP 数据。

如果指定了 private,则必须指定 default-data。可以将后者指定为 nil。

请注意,在独立名称空间 VLX 中,可以使用同样的 dict 和 key 参数同时存储私有和非私有变量。私有数据仅能在同一 VLX 中访问,而非私有数据可以被其他应用程序检索。

返回值

key 的值。

示例

在 Visual LISP 窗口输入下列命令:

_$ (vlax-ldata-put "mydict" "mykey" "Mumbo Dumbo")
"Mumbo Dumbo"
_$ (vlax-ldata-get "mydict" "mykey")
"Mumbo Dumbo"
测试在 VLX 中使用私有数据的步骤
在 Visual LISP 窗口输入下列命令:
_$ (vlax-ldata-put "mydict" "mykey" "Mumbo Dumbo")
"Mumbo Dumbo"
_$ (vlax-ldata-get "mydict" "mykey")
"Mumbo Dumbo"
在文件中输入下列代码,然后使用“生成应用程序”将文件生成为 VLX。使用“生成应用程序”向导的“专家”模式,并在“应用程序选项”中选择“独立名称空间”。
(vl-doc-export 'ldataput)
(vl-doc-export 'ldataget)
(vl-doc-export 'ldataget-nilt)
(defun ldataput ()
(princ "This is a test of putting private ldata ")
(vlax-ldata-put "mydict" "mykey" "Mine! Mine! " T)
)
(defun ldataget ()
(vlax-ldata-get "mydict" "mykey")
)
(defun ldataget-nilt ()
(vlax-ldata-get "mydict" "mykey" nil T)
)
加载 VLX 文件。
运行 ldataput 以保存私有数据:
_$ (ldataput)
This is a test of putting private ldata
参考上面定义 ldataput 的代码。该函数存储了一个包含 "Mine! Mine!" 的字符串。

运行 ldataget 以检索 LISP 数据:
_$ (ldataget)
"Mumbo Dumbo"
请注意 ldataget 返回的数据并非 ldataput 存储的数据。这是因为 ldataget 在调用 vlax-ldata-get 时没有指定 private 参数。所以,ldataget 检索的数据是第 1 步中从 Visal LISP 控制台中调用 vlax-ldata-put 设置的数据。

_$ (ldataget-nilt)
"Mine! Mine! "
运行 ldataget-nilt 以检索 LISP 数据:
_$ (ldataget-nilt)
"Mine! Mine! "
这次返回由 ldataput 保存的私有数据,因为 ldataget-nilt 在调用 vlax-ldata-get.时指定了 private 参数。

在 Visual LISP 控制台提示行中进行与 ldataget-nilt 相同的调用,以检索私有数据:
_$ (vlax-ldata-get "mydict" "mykey" nil T)
"Mumbo Dumbo"
在从独立名称空间 VLX 中调用 vlax-ldata-get 时,忽略了 private 参数。对于指定的 dict 和 key,如果存在非私有数据(如本例所示),则检索非私有数据。

xiaolong1487 发表于 2015-12-15 18:38:26

vlax-ldata-list



列出图形词典中的 LISP 数据

(vlax-ldata-list dict )
参数

dict

VLA 对象、AutoCAD 图形图元对象或指定全局词典的字符串。

private

如果从独立名称空间 VLX 调用 vlax-ldata-list,且 private 的值非 nil,则 vlax-ldata-list 仅检索保存在同一 VLX 中的私有数据。(关于本参数的使用,请参见 vlax-ldata-get 。)

返回值

由对 (key . value) 构成的关联表。

示例

使用 vlax-ldata-put 存储词典中的 LISP 数据:

_$ (vlax-ldata-put "dict" "cay" "Mumbo Jumbo ")
"Mumbo Jumbo "
_$ (vlax-ldata-put "dict" "say" "Floobar ")
"Floobar "
使用 vlax-ldata-list 显示存储在“dict”中的 LISP 数据:

_$ (vlax-ldata-list "dict")
(("say" . "Floobar ") ("cay" . "Mumbo Jumbo "))

xiaolong1487 发表于 2015-12-15 18:39:00

vlax-ldata-delete



从图形词典中删除 LISP 数据

(vlax-ldata-delete dict key )
参数

dict

VLA 对象、AutoCAD 图形图元对象或指定全局词典的字符串。

key

字符串,指定词典关键字。

private

如果 private 的值非空,且从独立名称空间 VLX 调用 vlax-ldata-delete,则 vlax-ldata-delete 从 dict 中删除私有 LISP 数据。(关于使用该参数的信息,请参见 vlax-ldata-get。)

返回值

如果成功则返回 T,否则返回 nil(如数据不存在)。

示例

向词典中添加 LISP 数据:

_$ (vlax-ldata-put "dict" "key" '(1))
(1)
使用 vlax-ldata-delete 删除 LISP 数据:

_$ (vlax-ldata-delete "dict" "key")
T
如果再次调用 vlax-ldata-delete 删除相同的数据,该函数将返回 nil,因为词典中已不再有该数据。

_$ (vlax-ldata-delete "dict" "key")
nil

xiaolong1487 发表于 2015-12-15 18:40:01

不知道是不是你想要的

羊渔蛋 发表于 2015-12-16 13:55:53

xiaolong1487 发表于 2015-12-15 18:37 static/image/common/back.gif
vlax-ldata-put




是的,就是这个东西,不过一下子看不太明白,我拿去测试一下这个东西!

冰之绝恋 发表于 2015-12-16 19:56:58

赞一个

迷不知途 发表于 2015-12-17 09:42:35

xiaolong1487 发表于 2015-12-15 18:37 static/image/common/back.gif
vlax-ldata-put




多谢大师,造福人类

yukuai2000 发表于 2019-1-22 20:35:21

多谢大师,造福人类
页: [1] 2
查看完整版本: 如何创建字典类型的数据列表??