langjs 发表于 2011-12-30 14:18:18

求一个修改词典的函数(已解决)

本帖最后由 langjs 于 2012-1-5 01:24 编辑

求助了好几天也不见动静,因此也悬赏吧,希望能得到解决。






一个问题困扰好久了,我摸索了很长时间也没成功。实在没有办法测试图纸有个标题栏信息存储在用(namedobjdict)得到的词典下面的PC_PAPER_DIC再下面的PC_PAPER_REC中,其内容如下:PC_PAPER_REC====((-1 . <图元名: 7efc1728>) (0 . TH_PAPERRECORDER) (5 . 2A5) (102 . {ACAD_REACTORS) (330 . <图元名: 7efc1720>) (102 . }) (330 . <图元名: 7efc1720>) (100 . TH_PaperRecorder) (70 . 800) (170 . 4) (171 . 1) (172 . 1) (173 . 1) (174 . 1) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (179 . 2) (180) (140 . 0.04) (300 . Tydh) (301 . 国电南自) (302 . 国电南自) (303 . 国电南自) (-3 (TH_PaperRecorder (1070 . 1) (1070 . 23) (1070 . 2) (1000 . 制图) (1070 . 3) (1000 . ) (1070 . 4) (1000 . 产品名称或材料标记) (1070 . 5) (1000 . ) (1070 . 6) (1000 . 比例) (1070 . 7) (1000 . 1:25) (1070 . 8) (1000 . 重量) (1070 . 9) (1000 . ) (1070 . 10) (1000 . 材料) (1070 . 11) (1000 . 304) (1070 . 12) (1000 . 零件名称) (1070 . 13) (1000 . 自制法兰) (1070 . 14) (1000 . 标准化) (1070 . 15) (1000 . ) (1070 . 16) (1000 . 设计) (1070 . 17) (1000 . ) (1070 . 18) (1000 . 图纸张数) (1070 . 19) (1000 . 1) (1070 . 20) (1000 . 共几页) (1070 . 21) (1000 . ) (1070 . 22) (1000 . 设备型号) (1070 . 23) (1000 . ) (1070 . 24) (1000 . 产品名称) (1070 . 25) (1000 . ) (1070 . 26) (1000 . 日期) (1070 . 27) (1000 . ) (1070 . 28) (1000 . 图幅) (1070 . 29) (1000 . A4) (1070 . 30) (1000 . 审核) (1070 . 31) (1000 . ) (1070 . 32) (1000 . 审定) (1070 . 33) (1000 . ) (1070 . 34) (1000 . 第几页) (1070 . 35) (1000 . ) (1070 . 36) (1000 . 设备名称) (1070 . 37) (1000 . ) (1070 . 38) (1000 . 图样代号) (1070 . 39) (1000 . XKZ-25.08006) (1070 . 40) (1000 . 工艺) (1070 . 41) (1000 . ) (1070 . 42) (1000 . 图样名称) (1070 . 43) (1000 . ) (1070 . 44) (1000 . 零件数量) (1070 . 45) (1000 . 1件) (1070 . 46) (1000 . 企业名称) (1070 . 47) (1000 . ) (1070 . 48) (1070 . 4) (1070 . 49) (1070 . 0) (1070 . 50) (1070 . 0) (1070 . 51) (1070 . 2) (1070 . 52) (1070 . 2) (1070 . 53) (1070 . 1) (1070 . 54) (1070 . 1) (1070 . 55) (1070 . 4) (1070 . 56) (1070 . 1) (1070 . 57) (1070 . 1) (1070 . 58) (1070 . 1) (1070 . 59) (1040 . 0.04) (1070 . 60) (1000 . Tydh) (1070 . 61) (1000 . 国电南自) (1070 . 62) (1000 . 国电南自) (1070 . 63) (1000 . 国电南自))))目前,我用如下程序可以将其读取出来(那个repeat语句觉得很别扭,却不知道其它办法怎么弄),这个功能已经成功了;;; =============================================*;;; 读取标题栏字典测试                           *;;;                                              *(defun c:ccc ( / dicts i name)(setq dicts (dictsearch (namedobjdict) "PC_PAPER_DIC"))(repeat (setq i (length dicts))    (if (= (cdr (nth (setq i (1- i))                   dicts            )          ) "PC_PAPER_REC"       )      (setq name (cdr (nth (1+ i) dicts)))    ))   (princ "\nPC_PAPER_REC====")(princ (entget name '("*")))(princ))现在我需要一个函数,目的是替换内容并更新该词典:例如,我现在要将(1000 . 零件名称)位置后的第2个表(1000 . 自制法兰)部分替换成(1000 . 螺栓),替换后更新词典。其中“零件名称”和“螺栓” 为变量。万分感谢!!   

namezg 发表于 2011-12-30 16:39:15

本帖最后由 namezg 于 2011-12-30 16:40 编辑

正在研究同一问题,第一个问题可以用member

namezg 发表于 2011-12-30 16:45:20

你以前获得图幅的方法麻烦用这里的信息多好.我用的就是词典里的信息.

langjs 发表于 2012-1-2 21:47:09

别沉呀,沉到水底就没希望了

690994 发表于 2012-1-3 08:01:11

我的保存只用到1000,各项用“/”分隔


langjs 发表于 2012-1-4 20:23:49

希望早点能把问题解决

Gu_xl 发表于 2012-1-4 21:42:44

很简单的,不就是修改扩展数据么,搜一下,论坛里有相关代码的,我的博客里也有扩展数据修改的程序,去找找看!

langjs 发表于 2012-1-4 23:00:33

Gu_xl 发表于 2012-1-4 21:42 static/image/common/back.gif
很简单的,不就是修改扩展数据么,搜一下,论坛里有相关代码的,我的博客里也有扩展数据修改的程序,去找找 ...

这个好像是嵌套的,我搞不定。附着在图元上的好搞一些,这个好像不是附在图元上的。

highflybird 发表于 2012-1-5 00:51:46

;;; ==================================================;;
;;; 读取标题栏字典测试                                ;;
;;; 修改扩展数据例子:                                      ;;
;;; ==================================================;;
(defun c:ccc (/ dicts DicObj RecObj xType xData)                       
(setq dicts(dictsearch (namedobjdict) "PC_PAPER_DIC"))
(setq DicObj (vlax-ename->vla-object (cdar dicts)))
(setq RecObj (vla-item DicObj "PC_PAPER_REC"))

(princ "\nPC_PAPER_REC====")
(princ (entget (vlax-vla-object->ename RecObj) '("*")))
                                                          
(vla-getxdata RecObj "" 'xType 'xData)               
(princ (vlax-safearray-get-element xData 24))            ;零件名称
(princ (vlax-safearray-get-element xdata 26))           ;自制法兰

(vlax-safearray-put-element xdata 26 (vlax-make-variant "螺丝"))
(vla-setxdata RecObj xType xData)
(princ)       
)

zhangcan0515 发表于 2020-3-17 17:20:57

留个脚印 等日后学到这里好用 谢谢楼主提问
页: [1] 2
查看完整版本: 求一个修改词典的函数(已解决)