明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: x_s_s_1

[悬10币求]如何求出多个带分隔符字符串每段的最大值并返回带分隔符最大字符串(具体详

  [复制链接]
发表于 2011-11-1 08:01 | 显示全部楼层
yjr111 发表于 2011-10-31 22:09
源程序上传,没必要自己留着,就怕自己写得不好,所以不好意思拿出来。。。

可分组max,层次递进也比排序快
发表于 2011-11-1 08:16 | 显示全部楼层
cabinsummer 发表于 2011-11-1 08:01
可分组max,层次递进也比排序快

谢谢!其实max的用法我是前几天看http://bbs.mjtd.com/thread-90011-1-1.html这个帖子的时候才知道,ZZXXQQ版主用了max,所以没怎么用过,有时间我试试!
发表于 2011-11-1 12:41 | 显示全部楼层
为了看源码,占层楼
 楼主| 发表于 2011-11-2 01:10 | 显示全部楼层
大概实现了自己的想法(其实别人早实现了,在结构界都实现烂了,不过不合意,并且无源码修改,都捂的紧,除了无所不及大侠放了点出来,只有自己从头再来了,浪费时间),放到办公室了,早晨上班将源码与测试图形发上来,还有些问题没解决,希望各位大侠支持
发表于 2011-11-2 05:49 | 显示全部楼层
x_s_s_1 发表于 2011-11-2 01:10
大概实现了自己的想法(其实别人早实现了,在结构界都实现烂了,不过不合意,并且无源码修改,都捂的紧,除 ...

适合自己的才是最好的。公布源码会对那些编译的人是个沉重的打击。如果楼主开源、宣传,并且适合多数人使用,会成为行业的事实标准。

点评

您好晚啊  发表于 2011-11-2 09:33
 楼主| 发表于 2011-11-2 09:07 | 显示全部楼层
本帖最后由 x_s_s_1 于 2011-11-2 09:09 编辑

根据大家的意见及提示做的,和前面的示例不同,问题不好表达,写在新示例中了
希望各位大侠继续指导,代码如下
  1. ;;;(setq ss(ssget "x" '((0 . "TEXT"))));构造针对TEXT的选择集
  2. (defun c:tt (/ ss lst i n lstt bb ang h)
  3.   (setvar "dimzin" 8)
  4.   (setvar "osmode" 0)
  5.   (setq ss (ssget '((0 . "TEXT"))))        ;构造针对TEXT的选择集
  6.   (command "justifytext" ss "" "c")
  7.   (SETQ LST (makelsp ss 11));根据特征组码11分类列表
  8.   (setq i 0)
  9.   (setq n (length lst))
  10.   (while (< i n)
  11.     (setq lstt (nth i lst))
  12. ;;;(setq bb(mapcar '(lambda (x) (Fsxm-Split x "-")) (cdr lstt)))
  13.     (setq bb                        ;;;得到数字列表
  14.            (mapcar
  15.              '(lambda (x) (Fsxm-Split x "-"))
  16.              (mapcar '(lambda (x) (cdr (assoc 1 (entget x)))) (cdr lstt))
  17.            ) ;_ 结束mapcar
  18.     ) ;_ 结束setq
  19.     (setq ang (cdr (assoc 50 (entget (car (cdr lstt))))))
  20.     (setq h (cdr (assoc 40 (entget (car (cdr lstt))))))
  21.     (if        (wcmatch (car (car bb)) "#")
  22.       (maketext (for-pj bb) h (car lstt) ang)
  23.       (if (wcmatch (substr (car (car bb)) 1 1) "G")
  24.         (maketext (for-g bb) h (car lstt) ang)
  25.         (maketext (for-vt bb) h (car lstt) ang)
  26.       ) ;_ 结束if求数字最大值并连接成字符串插入
  27.     ) ;_ 结束if
  28.     (setq i (1+ i))
  29.   ) ;_ 结束while
  30.   (command "_.erase" ss "");;;删除原有文字
  31. ) ;_ 结束defun
  32. ;; ! ***************************************************************************
  33. ;; ! Fsxm-Split
  34. ;; ! ***************************************************************************
  35. ;; ! 功  能  : 用指定的分隔符对字符串分段提取字符.
  36. ;; ! 参  数  : string字符串,strkey分隔符。
  37. ;; ! 返回值  : 字符串表
  38. ;; ! 说  明  : 适用 AutoCAD 2000+
  39. ;; ! from    : fsxm
  40. ;; ! Web     : http://bbs.mjtd.com/thread-89969-1-5.html
  41. ;; ! ****************************************************************************
  42. (defun Fsxm-Split (string strkey / po strlst xlen)
  43.   (setq xlen (1+ (strlen strkey)))
  44.   (while (setq po (vl-string-search strkey string))
  45.     (setq strlst (cons (substr string 1 po) strlst))
  46.     (setq string (substr string (+ po xlen)))
  47.   ) ;_ 结束while
  48.   (reverse (cons string strlst))
  49. ) ;_ 结束defun
  50. ;; ! ***************************************************************************
  51. ;; ! makelsp
  52. ;; ! ***************************************************************************
  53. ;; ! 功  能  : 根据特征组码分类列表.
  54. ;; ! 参  数  : SS选折集,bk特征组码。
  55. ;; ! 返回值  : 特征组码值与图元名表
  56. ;; ! 说  明  : 适用 AutoCAD 2000+
  57. ;; ! from    : 龙龙仔
  58. ;; ! Web     : http://bbs.mjtd.com/forum.php?mod=viewthread&tid=45690
  59. ;; ! ****************************************************************************

  60. (defun makelsp (ss BK / ENT LST1 LST2 LST3 N NAME)
  61.   (setq N 0)
  62.   (if ss
  63.     (progn
  64.       (repeat (sslength SS)
  65.         (setq ENT (ssname SS N))
  66.         (if (setq LST3
  67.                    (assoc (setq NAME (cdr (assoc BK (entget ENt)))) LST2)
  68.             ) ;_ 结束setq
  69.           (progn
  70. ;;;            (setq LST1 (append LST3 (list (CDR (assoc 1 (entget ENt))))))
  71.             (setq LST1 (append LST3 (list ENt)))
  72.             (setq LST2 (subst LST1 LST3 LST2))
  73.           ) ;_ 结束progn
  74. ;;;          (setq LST2 (cons (list NAME (CDR (assoc 1 (entget ENt)))) LST2))
  75.           (setq LST2 (cons (list NAME ENt) LST2))
  76.         ) ;_ 结束if
  77.         (setq N (1+ N))
  78.       ) ;_ 结束repeat
  79.     ) ;_ 结束progn
  80.   ) ;_ 结束if
  81.   LST2
  82. ) ;_ 结束defun
  83. ;;;G字头判断
  84. (defun for-g (bb /)
  85.   (strcat
  86.     "G"
  87.     (rtos
  88.       (eval
  89.         (cons
  90.           'max
  91.           (mapcar 'atof
  92.                   (mapcar '(lambda (x) (vl-string-left-trim "G" x))
  93.                           (CAR (apply 'mapcar (cons 'list bb)))
  94.                   ) ;_ 结束mapcar
  95.           ) ;_ 结束mapcar
  96.         ) ;_ 结束cons
  97.       ) ;_ 结束eval
  98.       2
  99.       1
  100.     ) ;_ 结束rtos
  101.     "-"
  102.     (rtos (eval
  103.             (cons 'max
  104.                   (mapcar 'atof (CADR (apply 'mapcar (cons 'list bb))))
  105.             ) ;_ 结束cons
  106.           ) ;_ 结束eval
  107.           2
  108.           1
  109.     ) ;_ 结束rtos
  110.   ) ;_ 结束strcat
  111. ) ;_ 结束defun
  112. ;;;VT字头判断
  113. (defun for-VT (bb /)
  114.   (strcat
  115.     "VT"
  116.     (rtos
  117.       (eval
  118.         (cons
  119.           'max
  120.           (mapcar 'atof
  121.                   (mapcar '(lambda (x) (vl-string-left-trim "VT" x))
  122.                           (CAR (apply 'mapcar (cons 'list bb)))
  123.                   ) ;_ 结束mapcar
  124.           ) ;_ 结束mapcar
  125.         ) ;_ 结束cons
  126.       ) ;_ 结束eval
  127.       2
  128.       1
  129.     ) ;_ 结束rtos
  130.     "-"
  131.     (rtos (eval
  132.             (cons 'max
  133.                   (mapcar 'atof (CADR (apply 'mapcar (cons 'list bb))))
  134.             ) ;_ 结束cons
  135.           ) ;_ 结束eval
  136.           2
  137.           1
  138.     ) ;_ 结束rtos
  139.   ) ;_ 结束strcat
  140. ) ;_ 结束defun
  141. ;;;无字头判断
  142. (defun for-pj (bb /)
  143.   (strcat
  144.     (rtos (eval
  145.             (cons 'max
  146.                   (mapcar 'atof (CAR (apply 'mapcar (cons 'list bb))))
  147.             ) ;_ 结束cons
  148.           ) ;_ 结束eval
  149.           2
  150.           1
  151.     ) ;_ 结束rtos
  152.     "-"
  153.     (rtos (eval
  154.             (cons 'max
  155.                   (mapcar 'atof (CADR (apply 'mapcar (cons 'list bb))))
  156.             ) ;_ 结束cons
  157.           ) ;_ 结束eval
  158.           2
  159.           1
  160.     ) ;_ 结束rtos
  161.     "-"
  162.     (rtos (eval
  163.             (cons 'max
  164.                   (mapcar 'atof (CADdR (apply 'mapcar (cons 'list bb))))
  165.             ) ;_ 结束cons
  166.           ) ;_ 结束eval
  167.           2
  168.           1
  169.     ) ;_ 结束rtos
  170.   ) ;_ 结束strcat
  171. ) ;_ 结束defun
  172. ;;;写文字
  173. (defun maketext        (textt h pt ang /)
  174.   (entmake (list '(0 . "text")
  175.                  '(100 . "AcDbEntity")
  176.                  '(8 . "0")
  177.                  '(100 . "AcDbText")
  178.                  (list 10 (car pt) (car (cdr pt)) 0)
  179.                  (cons 1 textt)
  180.                  (cons 40 h)
  181.                  '(41 . 0.6)
  182.                  '(7 . "standard")
  183.                  '(72 . 1)
  184.                  (list 11 (car pt) (car (cdr pt)) 0)
  185.                  (cons 50 ang)
  186.            ) ;_ 结束list
  187.   ) ;_ 结束entmake
  188. ) ;_ 结束defun

本帖子中包含更多资源

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

x
发表于 2011-11-2 09:30 | 显示全部楼层
适合自己的才是好的!
 楼主| 发表于 2011-11-2 09:32 | 显示全部楼层
本帖最后由 x_s_s_1 于 2011-11-2 09:34 编辑
yjr111 发表于 2011-11-2 09:30
适合自己的才是好的!


请教一下,以组码11为特征值过滤选择集的话,容差如何设置呢?还是期待飞版的,不知他如何实现的前面的效果
发表于 2011-11-2 11:18 来自手机 | 显示全部楼层
本帖最后由 fsxm 于 2011-11-2 11:52 编辑

................................................
发表于 2011-11-2 11:19 来自手机 | 显示全部楼层
先按文字左下角的y坐标排序,
再以两倍字高为容差分组
后面按每组对应位置操作就行了

点评

新示例有,您源码干脆发39楼算了,别浪费楼层,嘿嘿  发表于 2011-11-2 11:59
手机回复的点了两次回复居然就发了两次!你一开始又没说有角度!  发表于 2011-11-2 11:55
这样的通用性是不是就差一些呢?文字有N种不同角度的  发表于 2011-11-2 11:32
谢谢飞版,呵呵还帮多我砌了一层楼  发表于 2011-11-2 11:29
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 05:39 , Processed in 1.069678 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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