找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2079|回复: 4

[求助] 请各位前辈改进程序

[复制链接]
发表于 2014-8-10 00:34:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
以下是我收集的一个程序,作用是将数字分成和相近的三组。现在希望能改动一下:1.1.待分组的不全是数字,是“6kW"这种,后面加了个”kW"后缀。2.实现输入“10kW"("10KW“只是举例),则只有小于10的才进入分组,10及以上的都不分组。先谢过各位,

  • (defun C:tt ()
  • 0.jpg   (setq *n* 3) ;_容器数量
  • 1.jpg
  • 2.jpg   ;; 0、选择
  • 3.jpg   (if (and (princ "\n请选择数值文本对象...")
  • 4.jpg      (setq SS (ssget '((0 . "*TEXT"))))
  • 5.jpg       )
  • 6.jpg     (progn
  • 7.jpg       ;; 1、形成列表
  • 8.jpg       (setq LST  '()
  • 9.jpg       I  0
  • 10.jpg       )
  • 11.jpg       (repeat (sslength SS)
  • 12.jpg   (setq en   (ssname SS I)
  • 13.jpg         ent  (entget en)
  • 14.jpg         real (read (cdr (assoc 1 ent)))
  • 15.jpg   )
  • 16.jpg   (setq LST (cons (list real en) LST))
  • 17.jpg   (setq I (1+ I))
  • 18.jpg       )
  • 19.jpg       (setq lst (reverse LST))
  • 20.jpg       ;; 2、排序
  • 21.jpg       (setq lst  (vl-sort lst
  • 22.jpg        '(lambda (e1 e2)
  • 23.jpg           (>= (car e1) (car e2))
  • 24.jpg         )
  • 25.jpg     )
  • 26.jpg       )
  • 27.jpg       ;;(print lst)
  • 28.jpg       ;; 3、创建容器
  • 29.jpg       (setq *lst* '()
  • 30.jpg       i 65
  • 31.jpg       )
  • 32.jpg       (repeat *n*
  • 33.jpg   (setq *lst* (cons (list (list 0 i)) *lst*)
  • 34.jpg         i      (1+ i)
  • 35.jpg   )
  • 36.jpg       )
  • 37.jpg       (setq *lst* (reverse *lst*))
  • 38.jpg       ;; 4、逐个分配
  • 39.jpg       (foreach N lst
  • 40.jpg   (setq *lst* (tt-02 *lst* N))
  • 41.jpg       )
  • 42.jpg       (setq *lst* (mapcar 'reverse *lst*))
  • 43.jpg       ;;(print *lst*)
  • 44.jpg       ;; 5、让用户指定相位名称
  • 45.jpg       (if ZL-INPUTBOX
  • 46.jpg   (setq *lst* (tt-05-01 *lst*))
  • 47.jpg   (setq *lst* (tt-05-02 *lst*))
  • 48.jpg       )
  • 49.jpg       ;; 6、写文字
  • 50.jpg       (foreach n *lst*
  • 51.jpg   (setq str ( nth 2 (car n))
  • 52.jpg         n    (cdr n)
  • 53.jpg   )
  • 54.jpg   (foreach m n
  • 55.jpg     (command "_.copy" (cadr m) "" '(0 0) '(0 2500))
  • 56.jpg     (setq  en  (entlast)
  • 57.jpg     ent (entget en)
  • 58.jpg     ent (subst (cons 1 str) (assoc 1 ent) ent)
  • 59.jpg     ent (subst (cons 62 6) (assoc 62 ent) ent)
  • 60.jpg     )
  • 61.jpg     (entmod ent)
  • 62.jpg   )
  • 63.jpg       )
  • 64.jpg       ;; 7、显示结果
  • 65.jpg       (setq lst_str '())
  • 66.jpg       (foreach n *lst*
  • 67.jpg   (setq str ( nth 2(car n))
  • 68.jpg         lst (mapcar 'car (cdr n))
  • 69.jpg         sum (apply '+ lst)
  • 70.jpg   )
  • 71.jpg   (setq lst_str (cons (strcat "\n\n相位 = "
  • 72.jpg             str
  • 73.jpg             "\t\tsum = "
  • 74.jpg             (rtos sum 2 2)
  • 75.jpg             "\t\t成员 = "
  • 76.jpg             (vl-princ-to-string lst)
  • 77.jpg           )
  • 78.jpg           lst_str
  • 79.jpg           )
  • 80.jpg   )
  • 81.jpg       )
  • 82.jpg       (setq lst_str
  • 83.jpg        (append '("\n===========================================")
  • 84.jpg          (reverse lst_str)
  • 85.jpg          '("\n===========================================")
  • 86.jpg        )
  • 87.jpg       )
  • 88.jpg       (alert (princ (apply 'strcat lst_str)))
  • 89.jpg       ;;
  • 90.jpg     )
  • 91.jpg   )
  • 92.jpg   (princ)
  • 93.jpg )
  • 94.jpg
  • 95.jpg ;;;=================================================================*
  • 96.jpg ;;;功能:根据差值决定分配给谁,返回结果
  • 97.jpg ;;;      将数值  分配给  总和最小的表。
  • 98.jpg (defun tt-02 (*lst* N / i tmp)
  • 99.jpg   (setq  i   (IsMin *lst*)
  • 100.jpg   tmp (nth i *lst*)
  • 101.jpg   )
  • 102.jpg   (setq *lst* (subst (cons n tmp) tmp *lst*))
  • 103.jpg   ;;返回
  • 104.jpg   *lst*
  • 105.jpg )
  • 106.jpg ;;;
  • 107.jpg
  • 108.jpg ;;;=================================================================*
  • 109.jpg ;;参数:lst ----- '( ( (r en) (r en)..)
  • 110.jpg ;;                   ( (r en) (r en)..)
  • 111.jpg ;;                   ( (r en) (r en)..)
  • 112.jpg ;;                   ...
  • 113.jpg ;;                 )
  • 114.jpg ;;返回:最小值是第几个
  • 115.jpg (defun IsMin (lst / lst_tmp)
  • 116.jpg   (setq  lst_tmp  (mapcar  '(lambda (x)
  • 117.jpg          (apply '+ (mapcar 'car x))
  • 118.jpg        )
  • 119.jpg       lst
  • 120.jpg     )
  • 121.jpg   lst_tmp  (vl-sort-i lst_tmp '<=)
  • 122.jpg   )
  • 123.jpg   ;;返回
  • 124.jpg   (car lst_tmp)
  • 125.jpg )
  • 126.jpg ;;;=================================================================*
  • 127.jpg ;;;=================================================================*
  • 128.jpg ;;;功能:询问用户,附加相位名称(方式一:对话框)
  • 129.jpg ;;(defun C:TT () (tt-05-01 *lst*))
  • 130.jpg (defun tt-05-01 (lst / lst_tmp)
  • 131.jpg   ;; 修改数据格式
  • 132.jpg   (setq  lst_tmp  (mapcar  '(lambda (e)
  • 133.jpg          (cons (list 0 (apply '+ (mapcar 'car e)))
  • 134.jpg          (cdr e)
  • 135.jpg          )
  • 136.jpg        )
  • 137.jpg       lst
  • 138.jpg     )
  • 139.jpg   )
  • 140.jpg   ;; 排序
  • 141.jpg   (setq
  • 142.jpg     lst_tmp
  • 143.jpg      (vl-sort lst_tmp
  • 144.jpg         '(lambda (e1 e2)
  • 145.jpg      (>= (cadar e1)
  • 146.jpg          (cadar e2)
  • 147.jpg      )
  • 148.jpg          )
  • 149.jpg      )
  • 150.jpg   )
  • 151.jpg   ;; 对话框获取输入
  • 152.jpg   (if (setq lst_str
  • 153.jpg        (ZL-INPUTBOX
  • 154.jpg          "相位指定"
  • 155.jpg          (list
  • 156.jpg      (list "popup_list"
  • 157.jpg            (strcat "  " (rtos (cadar (nth 0 lst_tmp)) 2 2) "   伯:")
  • 158.jpg            '("L1" "L2" "L3")
  • 159.jpg            "20"
  • 160.jpg      )
  • 161.jpg      (list "popup_list"
  • 162.jpg            (strcat "  " (rtos (cadar (nth 1 lst_tmp)) 2 2) "   仲:")
  • 163.jpg            '("L2" "L3" "L1")
  • 164.jpg            "20"
  • 165.jpg      )
  • 166.jpg      (list "popup_list"
  • 167.jpg            (strcat "  " (rtos (cadar (nth 2 lst_tmp)) 2 2) "   叔:")
  • 168.jpg            '("L3" "L1" "L2")
  • 169.jpg            "20"
  • 170.jpg      )
  • 171.jpg      '("spacer_1")
  • 172.jpg      '("*text" "")
  • 173.jpg          )
  • 174.jpg        )
  • 175.jpg       )
  • 176.jpg     ;;返回
  • 177.jpg     (mapcar '(lambda (tmp str)
  • 178.jpg          (cons (list 0 (cadar tmp) str) (cdr tmp))
  • 179.jpg        )
  • 180.jpg       lst_tmp
  • 181.jpg       lst_str
  • 182.jpg     )
  • 183.jpg     ()
  • 184.jpg   )
  • 185.jpg )
  • 186.jpg ;;;=================================================================*
  • 187.jpg ;;;功能:询问用户,附加相位名称(方式二:命令行)
  • 188.jpg ;;(defun C:TT () (tt-05-02 *lst*))
  • 189.jpg (defun tt-05-02  (lst / lst_tmp lst_str)
  • 190.jpg   ;; 修改数据格式
  • 191.jpg   (setq  lst_tmp  (mapcar  '(lambda (e)
  • 192.jpg          (cons (list 0 (apply '+ (mapcar 'car e)))
  • 193.jpg          (cdr e)
  • 194.jpg          )
  • 195.jpg        )
  • 196.jpg       lst
  • 197.jpg     )
  • 198.jpg   )
  • 199.jpg     ;; 获取输入
  • 200.jpg   (or (and
  • 201.jpg   (princ "\n相位指定(例如:\"ABC\"/\"BCA\"...]<\"ABC\">: ")
  • 202.jpg   (setq lst_str (getstring))
  • 203.jpg   (setq lst_str (vl-string->list (strcase lst_str)))
  • 204.jpg   (= (length lst_str) *n*)
  • 205.jpg   (setq lst_str (mapcar 'chr lst_str))
  • 206.jpg       )
  • 207.jpg       (setq lst_str '("L1" "L2" "L3"))
  • 208.jpg   )
  • 209.jpg   ;; 返回
  • 210.jpg   (mapcar '(lambda (tmp str)
  • 211.jpg          (cons (list 0 (cadar tmp) str) (cdr tmp))
  • 212.jpg        )
  • 213.jpg       lst_tmp
  • 214.jpg       lst_str
  • 215.jpg     )
  • 216.jpg )
  • 217.jpg ;;;=================================================================*
  • 218.jpg (alert "命令名称:\"TT\"")
  • 219.jpg (PRINC)




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 5600个

财富等级: 富甲天下

发表于 2014-8-10 12:23:34 | 显示全部楼层
  1. (setq Lst '("100" "123KW" 1 2 3 "3kw" 5 "5kw" 10 "10kw" 13 "13kw" 15 "15kw" 20 "20kw"))
  2. (setq kw-max 10.0)  ;;;设置<=10阀值
  3. (setq min-Lst '())
  4. (setq max-Lst '())
  5. (mapcar '(lambda(x)
  6.   (cond
  7.     ((numberp x)
  8.      (if (<= x kw-max)
  9.        (setq min-Lst (cons x min-Lst))
  10.        (setq max-Lst (cons x max-Lst))
  11.        ))
  12.     ((= (type x) 'STR)
  13.      (if (<= (atof x) kw-max)
  14.        (setq min-Lst (cons x min-Lst))
  15.        (setq max-Lst (cons x max-Lst))
  16.        ))
  17.     (t (alert "存在未知数据,程序有错"))
  18.     )) Lst)
  19. (setq min-Lst (reverse min-Lst))
  20. (setq max-Lst (reverse max-Lst))
  21. ;;; 现分大组,运行后便知。

点评

谢谢这位前辈,新手求问这个加到哪里啊...  详情 回复 发表于 2014-8-10 18:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-10 18:20:06 | 显示全部楼层

谢谢这位前辈,新手求问这个加到哪里啊...

点评

没有看你的程序,只是将表分开为:一个是10或“10KW”及其以下的组成一个表,其余的组成另一个表。程序是个示范,只是想教你读懂程序后自己编入程序中。只能帮你到这了。  详情 回复 发表于 2014-8-10 22:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5600个

财富等级: 富甲天下

发表于 2014-8-10 22:56:14 | 显示全部楼层
wyuh12 发表于 2014-8-10 18:20
谢谢这位前辈,新手求问这个加到哪里啊...

没有看你的程序,只是将表分开为:一个是10或“10KW”及其以下的组成一个表,其余的组成另一个表。程序是个示范,只是想教你读懂程序后自己编入程序中。只能帮你到这了。

点评

好的,谢谢了,我要加油  详情 回复 发表于 2014-8-10 23:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-10 23:09:50 | 显示全部楼层
HLCAD 发表于 2014-8-10 22:56
没有看你的程序,只是将表分开为:一个是10或“10KW”及其以下的组成一个表,其余的组成另一个表。程序是 ...

好的,谢谢了,我要加油
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 20:27 , Processed in 0.278576 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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