明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 926|回复: 9

[已解答] 求助:表前面相同字母前加1.2···

[复制链接]
发表于 2015-8-17 10:12 | 显示全部楼层 |阅读模式
20明经币
本帖最后由 ymcui 于 2015-8-17 10:18 编辑

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

最佳答案

查看完整内容

$ (tt'((F 立柱 1)(F 侧面 2)(B 立面 1)))==>((B 立面 1)(F1 立柱 1) (F2 侧面 2))
发表于 2015-8-17 10:12 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-8-17 15:20 编辑

  1. (defun subtotals(lst m / a b c d)
  2.   (foreach x lst
  3.     (setq a(if(setq c(nth m x)d(list(vl-remove c x))b(assoc c a))
  4.        (subst(append b d)b a)
  5.        (append a(list(append(list c)d)))))))
  6. (defun tt(lst / i)
  7.   (vl-sort(apply'append(mapcar'(lambda(x)(setq i 0)
  8.                          (mapcar'(lambda(y)(setq i(1+ i))
  9.                                    (cons(read(strcat(vl-princ-to-string(car x))
  10.                                                     (if(>(length(cdr x))1)(itoa i)"")))y))(cdr x)))
  11.                       (subtotals lst 0)))'(lambda(x y)(< (vl-princ-to-string(car x))(vl-princ-to-string(car y)) )))
  12.   )

$ (tt'((F 立柱 1)(F 侧面 2)(B 立面 1)))==>((B 立面 1)(F1 立柱 1) (F2 侧面 2))
回复

使用道具 举报

 楼主| 发表于 2015-8-17 10:17 | 显示全部楼层
表是以以下这种方式得到:
                   (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))
        )
回复

使用道具 举报

发表于 2015-8-17 11:01 | 显示全部楼层
ymcui 发表于 2015-8-17 10:17
表是以以下这种方式得到:
                   (Setq w5 (Strcat w2 " " w3))
        (if (Setq lSt (aSSoc w5 L ...

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

使用道具 举报

 楼主| 发表于 2015-8-17 11:27 | 显示全部楼层
llsheng_73 发表于 2015-8-17 11:01
如果是这样的可以加(("F" 立柱 1)("F" 侧面 2)("B" 立面 1)),原来那样都是符号不知道怎么加了


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

使用道具 举报

 楼主| 发表于 2015-8-17 14:20 | 显示全部楼层
llsheng_73 发表于 2015-8-17 12:12
$ (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))
回复

使用道具 举报

发表于 2015-8-17 14:26 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-8-17 14:45 编辑
ymcui 发表于 2015-8-17 14:20
还有一个问题带小数点后面的文字会自动消除,能解决吗?还有字母能否按顺序排例:谢谢
       (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))
也就是说这是你自己的表就不能按你的想法来表示,而不是代码处理过程中给你弄丢了
其实有的内容用字符串来表示比用符号来表示要容易处理得多,非要把那些弄成符号,给处理增加难度不说,甚至有的想法根本实现不了,比如你自己的想法都没能实现。。。。。因为系统不认它
回复

使用道具 举报

 楼主| 发表于 2015-8-17 15:03 | 显示全部楼层
llsheng_73 发表于 2015-8-17 14:26
字母按顺序排列肯定能,但这是另一个问题。。。。
至于字母后边还有别的小数点什么的,跟第一次问题描 ...

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

点评

虽然都知道币没用,但既然你能挂出币来以求解决问题,我为什么不可以就是冲着币来呢?  发表于 2015-8-17 15:19
回复

使用道具 举报

发表于 2015-8-17 15:09 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-8-17 15:16 编辑
ymcui 发表于 2015-8-17 15:03
老师我想你也不是冲着我的金币来的,小数点是点取圆得出的,确实可以用其它方式实现.按字母顺序也在网上找到 ...


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

使用道具 举报

 楼主| 发表于 2015-8-17 15:51 | 显示全部楼层
非常感谢                     
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-13 10:56 , Processed in 0.167617 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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