ymcui 发表于 2015-8-17 10:12:06

求助:表前面相同字母前加1.2···

本帖最后由 ymcui 于 2015-8-17 10:18 编辑

求助:表前面相同字母前加1.2···
例如:
      ((F 立柱 1)(F 侧面 2)(B 立面 1))得出((F1 立柱 1)(F2 侧面 2)(B 立面 1))
                                                                              谢谢

llsheng_73 发表于 2015-8-17 10:12:07

本帖最后由 llsheng_73 于 2015-8-17 15:20 编辑

(defun subtotals(lst m / a b c d)
(foreach x lst
    (setq a(if(setq c(nth m x)d(list(vl-remove c x))b(assoc c a))
       (subst(append b d)b a)
       (append a(list(append(list c)d)))))))
(defun tt(lst / i)
(vl-sort(apply'append(mapcar'(lambda(x)(setq i 0)
                         (mapcar'(lambda(y)(setq i(1+ i))
                                 (cons(read(strcat(vl-princ-to-string(car x))
                                                    (if(>(length(cdr x))1)(itoa i)"")))y))(cdr x)))
                      (subtotals lst 0)))'(lambda(x y)(< (vl-princ-to-string(car x))(vl-princ-to-string(car y)) )))
)
$ (tt'((F 立柱 1)(F 侧面 2)(B 立面 1)))==>((B 立面 1)(F1 立柱 1) (F2 侧面 2))

ymcui 发表于 2015-8-17 10:17:49

表是以以下这种方式得到:
                   (Setq w5 (Strcat w2 " " w3))
        (if (Setq lSt (aSSoc w5 LI))
                (Setq LI (SubSt (liSt w5 (1+ (nth 2 lSt))) lSt LI))
                (Setq LI (conS (liSt w5 1) LI))
        )

llsheng_73 发表于 2015-8-17 11:01:58

ymcui 发表于 2015-8-17 10:17 static/image/common/back.gif
表是以以下这种方式得到:
                   (Setq w5 (Strcat w2 " " w3))
        (if (Setq lSt (aSSoc w5 L ...

如果是这样的可以加(("F" 立柱 1)("F" 侧面 2)("B" 立面 1)),原来那样都是符号不知道怎么加了

ymcui 发表于 2015-8-17 11:27:59

llsheng_73 发表于 2015-8-17 11:01 http://bbs.mjtd.com/static/image/common/back.gif
如果是这样的可以加(("F" 立柱 1)("F" 侧面 2)("B" 立面 1)),原来那样都是符号不知道怎么加了

谢谢llsheng_73老师的关注,也希望llsheng_73老师能帮忙解决,程序对我来说用处非常大.谢谢

ymcui 发表于 2015-8-17 14:20:23

llsheng_73 发表于 2015-8-17 12:12 static/image/common/back.gif
$ (tt'((F 立柱 1)(F 侧面 2)(B 立面 1)))==>((F1 立柱 1) (F2 侧面 2) (B 立面 1))

还有一个问题带小数点后面的文字会自动消除,能解决吗?还有字母能否按顺序排例:谢谢
       (princ(tt'((F %%50.5立柱 3) (F %%30.5立柱 1) (B %%30.5立柱 2) (F %%30.5立柱 1))))
得出:((F1 %%50 3) (F2 %%30 1) (F3 %%30 1) (B %%30 2))

llsheng_73 发表于 2015-8-17 14:26:30

本帖最后由 llsheng_73 于 2015-8-17 14:45 编辑

ymcui 发表于 2015-8-17 14:20 http://bbs.mjtd.com/static/image/common/back.gif
还有一个问题带小数点后面的文字会自动消除,能解决吗?还有字母能否按顺序排例:谢谢
       (princ(tt'(( ...

字母按顺序排列肯定能,但这是另一个问题。。。。
至于字母后边还有别的小数点什么的,跟第一次问题描述不符,可以算作无休止追加要要求。。。。。
虽然说白了,明经币毫无意义,但5楼的代码已经解决了最初的问题

另外,'((F %%50.5立柱 3) (F %%30.5立柱 1) (B %%30.5立柱 2) (F %%30.5立柱 1))
==>((F %%50 3) (F %%30 1) (B %%30 2) (F %%30 1))
也就是说这是你自己的表就不能按你的想法来表示,而不是代码处理过程中给你弄丢了
其实有的内容用字符串来表示比用符号来表示要容易处理得多,非要把那些弄成符号,给处理增加难度不说,甚至有的想法根本实现不了,比如你自己的想法都没能实现。。。。。因为系统不认它

ymcui 发表于 2015-8-17 15:03:46

llsheng_73 发表于 2015-8-17 14:26 static/image/common/back.gif
字母按顺序排列肯定能,但这是另一个问题。。。。
至于字母后边还有别的小数点什么的,跟第一次问题描 ...

老师我想你也不是冲着我的金币来的,小数点是点取圆得出的,确实可以用其它方式实现.按字母顺序也在网上找到.谢谢

llsheng_73 发表于 2015-8-17 15:09:56

本帖最后由 llsheng_73 于 2015-8-17 15:16 编辑

ymcui 发表于 2015-8-17 15:03 http://bbs.mjtd.com/static/image/common/back.gif
老师我想你也不是冲着我的金币来的,小数点是点取圆得出的,确实可以用其它方式实现.按字母顺序也在网上找到 ...

把表里的元素该用字符串来表达的的用字符串表达就什么问题都没有了。。。
5楼的代码已经加上了把顺序从小到大。。。。
之前这样说是希望描述问题最好一次性把要求说完。。。。。。
想象一下,如果你的领导交待你一件事,你刚做完,他又给你说这事情还有个什么什么要求,叫你拿回去按这个要求改下,你会怎么样?

ymcui 发表于 2015-8-17 15:51:47

非常感谢                     
页: [1]
查看完整版本: 求助:表前面相同字母前加1.2···