明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5455|回复: 22

[已解答] 带有汉字的数字分类求和的LSP代码怎样编写?

[复制链接]
发表于 2016-1-6 10:57:01 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2019-4-30 01:12:05 | 显示全部楼层
dingtiedt 发表于 2016-1-6 11:24
设置两个列表,例如listA和listB
listA为原列表,从中选择符合第一个名称的所有项,归为listB,例如((" ...

(setq aa'(("建筑S=" 21) ("厨房S=" 68)  ("建筑S=" 357) ("楼梯间S=" 62) ("楼梯间S=" 53)))
        (setq lst '())               
        (foreach x aa
                (if (assoc  (car x) lst)
                        (setq lst (subst (list (car x) (+ (cadr x) (cadr (assoc (car x) lst)))) (assoc (car x) lst) lst))
                        (setq lst (cons x lst))
                )
        )
发表于 2019-11-13 15:01:38 | 显示全部楼层
xyp1964 发表于 2016-1-6 17:47
;; 用不上千万别下载!

唉,付币下载了,还要其他的函数支持啊 ,老大你应该提前说清啊。光一个这个不能用的啊……
发表于 2019-11-13 14:47:50 | 显示全部楼层
没币啊,可以免币下么
发表于 2016-1-6 11:06:24 | 显示全部楼层
楼主口吻很眼熟!

点评

真的被你猜对了!  发表于 2016-1-6 18:13
 楼主| 发表于 2016-1-6 11:07:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2016-1-6 11:24:19 | 显示全部楼层

设置两个列表,例如listA和listB
listA为原列表,从中选择符合第一个名称的所有项,归为listB,例如(("建筑S=" "21")   ("建筑S=" "357")),接着对后面的数字求和,剩下的所有项仍然设置为listA
再对listA进行相同的操作
 楼主| 发表于 2016-1-6 12:40:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2016-1-6 12:46:56 | 显示全部楼层
发表于 2016-1-6 12:55:32 来自手机 | 显示全部楼层
这种情况正则表达式是王道
发表于 2016-1-6 12:55:50 | 显示全部楼层
  1. (defun c:tt ()
  2.   (defun count (lst / a b b1 lst1 lst2)
  3.     (setq lst  (vl-sort lst '(lambda (x y) (< (car x) (car y))))
  4.           a    (car lst)
  5.           b    (car a)
  6.           lst  (cdr lst)
  7.           lst1 (list b (cdr a))
  8.           lst2 '()
  9.     )
  10.     (while (setq a (car lst))
  11.       (setq b1        (car a)
  12.             lst        (cdr lst)
  13.       )
  14.       (if (equal b1 b)
  15.         (setq lst1 (append lst1 (list (cdr a))))
  16.         (setq lst2 (cons lst1 lst2)
  17.               lst1 (list b1 (cdr a))
  18.               b           b1
  19.         )
  20.       )
  21.     )
  22.     (reverse (cons lst1 lst2))
  23.   )
  24.   (setq        lst '(("建筑S=" "21")
  25.               ("厨房S=" "68")
  26.               ("建筑S=" "357")
  27.               ("楼梯间S=" "62")
  28.               ("楼梯间S=" "53")
  29.              )
  30.         lst (count lst)
  31.         lst (mapcar '(lambda (x)
  32.                        (setq b (apply 'append (cdr x))
  33.                              b (apply '+ (mapcar 'atoi b))
  34.                        )
  35.                        (list (car x) b)
  36.                      )
  37.                     lst
  38.             )
  39.   )
  40.   (princ lst)
  41.   (princ)
  42. )
结果:(("厨房S=" 68) ("建筑S=" 378) ("楼梯间S=" 115))
 楼主| 发表于 2016-1-6 13:09:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2016-1-6 15:58:58 | 显示全部楼层
  1. (setq aa'(("建筑S=" "21") ("厨房S=" "68")  ("建筑S=" "357") ("楼梯间S=" "62") ("楼梯间S=" "53") ))
  2. (setq bb(mapcar '(lambda(x)(strcat (car x)(cadr x)))aa))

点评

("建筑S=21" "厨房S=68" "建筑S=357" "楼梯间S=62" "楼梯间S=53") ?  发表于 2016-1-6 17:23
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 06:44 , Processed in 0.210142 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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