明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: x_s_s_1

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

  [复制链接]
 楼主| 发表于 2011-10-30 17:14:02 | 显示全部楼层
cabinsummer 发表于 2011-10-30 17:12
任意分割字符串函数

这样你也就可以一次将"13-0-6"分割为("13" "0" "6")了,祝楼主好运

谢谢您的函数,我前面找了飞诗的
  1. ;; ! ***************************************************************************
  2. ;; ! Fsxm-Split
  3. ;; ! ***************************************************************************
  4. ;; ! 功  能  : 用指定的分隔符对字符串分段提取字符.
  5. ;; ! 参  数  : string字符串,strkey分隔符。
  6. ;; ! 返回值  : 字符串表
  7. ;; ! 说  明  : 适用 AutoCAD 2000+
  8. ;; ! from    : fsxm
  9. ;; ! Web     : http://bbs.mjtd.com/thread-89969-1-5.html
  10. ;; ! ****************************************************************************
  11. (defun Fsxm-Split (string strkey / po strlst xlen)
  12.   (setq xlen (1+ (strlen strkey)))
  13.   (while (setq po (vl-string-search strkey string))
  14.     (setq strlst (cons (substr string 1 po) strlst))
  15.     (setq string (substr string (+ po xlen)))
  16.   ) ;_ 结束while
  17.   (reverse (cons string strlst))
  18. ) ;_ 结束defun

点评

原理和结果都是一样的,只是参数顺序颠倒了一下。  发表于 2011-10-30 17:18
发表于 2011-10-31 09:26:50 | 显示全部楼层
给楼主整了一个,看看行不?(对10以上数字排序还没处理,如“2”和“12”,2会在前滴)




本帖子中包含更多资源

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

x

点评

字符串比较就会出现这样,但是数值比较就不会有这个问题  发表于 2011-10-31 18:50
谢谢了  发表于 2011-10-31 12:52
发表于 2011-10-31 09:48:19 来自手机 | 显示全部楼层
很好的练习题哦,
技巧性较强
有空的童鞋可以试试玩!

点评

童鞋?what mean?  发表于 2011-10-31 09:49
 楼主| 发表于 2011-10-31 12:56:06 | 显示全部楼层
飞诗(fsxm) 发表于 2011-10-31 09:48
很好的练习题哦,
技巧性较强
有空的童鞋可以试试玩!

谢谢飞版主的关注
发表于 2011-10-31 14:40:19 | 显示全部楼层
貌似已经解决了楼主的问题。。。。。




本帖子中包含更多资源

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

x

点评

文字的对齐方式为调整,不是左对齐  发表于 2011-10-31 20:43
可惜是fas  发表于 2011-10-31 20:22

评分

参与人数 1明经币 +1 金钱 +10 收起 理由
x_s_s_1 + 1 + 10 赞一个!

查看全部评分

发表于 2011-10-31 20:03:57 来自手机 | 显示全部楼层
本帖最后由 飞诗(fsxm) 于 2011-10-31 22:54 编辑

我也过来练练手哦!
先占下本楼备用!
下班后上传程序!
玩这个的确还是要些技巧的,嘿嘿

OK ,请测试一下哈!程序命令是:Test
源程序帖在50楼!


本帖子中包含更多资源

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

x

点评

貌似不行  发表于 2011-10-31 22:47
我本来以为文字宽度不等会不归并,结果飞版不存在这个问题,照归并不误,等下试试效率如何  发表于 2011-10-31 21:14
谢谢,本人必想折顶到50楼  发表于 2011-10-31 21:09
飞版,偶等你  发表于 2011-10-31 20:22

评分

参与人数 1明经币 +1 金钱 +15 收起 理由
x_s_s_1 + 1 + 15 没钱了,只剩18,给您15意思一下,明经币不.

查看全部评分

 楼主| 发表于 2011-10-31 20:24:50 | 显示全部楼层
本帖最后由 x_s_s_1 于 2011-10-31 21:49 编辑
飞诗(fsxm) 发表于 2011-10-31 20:03
我也过来练练手哦!
先占下本楼备用!
下班后上传程序!

我先把文字挪到了一起,然后justifytext
写到这里


  1. ;; ! ***************************************************************************
  2. ;; ! Fsxm-Split
  3. ;; ! ***************************************************************************
  4. ;; ! 功  能  : 用指定的分隔符对字符串分段提取字符.
  5. ;; ! 参  数  : string字符串,strkey分隔符。
  6. ;; ! 返回值  : 字符串表
  7. ;; ! 说  明  : 适用 AutoCAD 2000+
  8. ;; ! from    : fsxm
  9. ;; ! Web     : http://bbs.mjtd.com/thread-89969-1-5.html
  10. ;; ! ****************************************************************************
  11. (defun Fsxm-Split (string strkey / po strlst xlen)
  12.   (setq xlen (1+ (strlen strkey)))
  13.   (while (setq po (vl-string-search strkey string))
  14.     (setq strlst (cons (substr string 1 po) strlst))
  15.     (setq string (substr string (+ po xlen)))
  16.   ) ;_ 结束while
  17.   (reverse (cons string strlst))
  18. ) ;_ 结束defun
  19. ;; ! ***************************************************************************
  20. ;; ! makelsp
  21. ;; ! ***************************************************************************
  22. ;; ! 功  能  : 根据特征组码分类列表.
  23. ;; ! 参  数  : SS选折集,bk特征组码。
  24. ;; ! 返回值  : 特征组码值与图元名表
  25. ;; ! 说  明  : 适用 AutoCAD 2000+
  26. ;; ! from    : 龙龙仔
  27. ;; ! Web     : http://bbs.mjtd.com/forum.php?mod=viewthread&tid=45690
  28. ;; ! ****************************************************************************
  29. (defun makelsp (ss BK / ENT LST1 LST2 LST3 N NAME)
  30.   (setq N 0)
  31.   (if ss
  32.     (progn
  33.       (repeat (sslength SS)
  34. (setq ENT (ssname SS N))
  35. (if (setq LST3
  36.      (assoc (setq NAME (cdr (assoc BK (entget ENt)))) LST2)
  37.      ) ;_ 结束setq
  38.    (progn
  39.      (setq LST1 (append LST3 (list (CDR (assoc 1 (entget ENt))))))
  40.      (setq LST2 (subst LST1 LST3 LST2))
  41.    ) ;_ 结束progn
  42.    (setq LST2 (cons (list NAME (CDR (assoc 1 (entget ENt)))) LST2))
  43. ) ;_ 结束if
  44. (setq N (1+ N))
  45.       ) ;_ 结束repeat
  46.     ) ;_ 结束progn
  47.   ) ;_ 结束if
  48.   LST2
  49. ) ;_ 结束defun
  50. (setq ss(ssget  "x" '((0 . "TEXT"))));构造针对TEXT的选择集
  51. (command "justifytext " ss "" "c" "")
  52. (SETQ LST (makelsp ss 11))
  53. ;|这里还没想好循环
  54. (setq n (length lst))
  55. (setq lstt (nth 1 lst))
  56. (setq bb(mapcar '(lambda (x) (Fsxm-Split x "-")) (cdr lstt)))
  57. |;
  58. ;;;G字头判断
  59. (defun for-g (bb /)
  60.   (strcat
  61.     "G"
  62.     (rtos
  63.       (eval
  64.         (cons
  65.           'max
  66.           (mapcar 'atof
  67.                   (mapcar '(lambda (x) (vl-string-left-trim "G" x))
  68.                           (CAR (apply 'mapcar (cons 'list bb)))
  69.                   ) ;_ 结束mapcar
  70.           ) ;_ 结束mapcar
  71.         ) ;_ 结束cons
  72.       ) ;_ 结束eval
  73.       2
  74.       1
  75.     ) ;_ 结束rtos
  76.     "-"
  77.     (rtos (eval
  78.             (cons 'max
  79.                   (mapcar 'atof (CADR (apply 'mapcar (cons 'list bb))))
  80.             ) ;_ 结束cons
  81.           ) ;_ 结束eval
  82.           2
  83.           1
  84.     ) ;_ 结束rtos
  85.   ) ;_ 结束strcat
  86. ) ;_ 结束defun
  87. ;;;VT字头判断
  88. (defun for-VT (bb /)
  89.   (strcat
  90.     "VT"
  91.     (rtos
  92.       (eval
  93.         (cons
  94.           'max
  95.           (mapcar 'atof
  96.                   (mapcar '(lambda (x) (vl-string-left-trim "VT" x))
  97.                           (CAR (apply 'mapcar (cons 'list bb)))
  98.                   ) ;_ 结束mapcar
  99.           ) ;_ 结束mapcar
  100.         ) ;_ 结束cons
  101.       ) ;_ 结束eval
  102.       2
  103.       1
  104.     ) ;_ 结束rtos
  105.     "-"
  106.     (rtos (eval
  107.             (cons 'max
  108.                   (mapcar 'atof (CADR (apply 'mapcar (cons 'list bb))))
  109.             ) ;_ 结束cons
  110.           ) ;_ 结束eval
  111.           2
  112.           1
  113.     ) ;_ 结束rtos
  114.   ) ;_ 结束strcat
  115. ) ;_ 结束defun
  116. ;;;无字头判断
  117. (defun for-pj (bb /)
  118.   (strcat
  119.     (rtos (eval
  120.             (cons 'max
  121.                   (mapcar 'atof (CAR (apply 'mapcar (cons 'list bb))))
  122.             ) ;_ 结束cons
  123.           ) ;_ 结束eval
  124.           2
  125.           1
  126.     ) ;_ 结束rtos
  127.     "-"
  128.     (rtos (eval
  129.             (cons 'max
  130.                   (mapcar 'atof (CADR (apply 'mapcar (cons 'list bb))))
  131.             ) ;_ 结束cons
  132.           ) ;_ 结束eval
  133.           2
  134.           1
  135.     ) ;_ 结束rtos
  136.     "-"
  137.     (rtos (eval
  138.             (cons 'max
  139.                   (mapcar 'atof (CADdR (apply 'mapcar (cons 'list bb))))
  140.             ) ;_ 结束cons
  141.           ) ;_ 结束eval
  142.           2
  143.           1
  144.     ) ;_ 结束rtos
  145.   ) ;_ 结束strcat
  146. ) ;_ 结束defun

点评

你这样只能针对“G”“VT”的字符,太局限了  发表于 2011-10-31 22:40
程序已在26楼上传了,你测试一下哈!  发表于 2011-10-31 21:10
 楼主| 发表于 2011-10-31 21:20:30 | 显示全部楼层
飞诗(fsxm) 发表于 2011-10-31 20:03
我也过来练练手哦!
先占下本楼备用!
下班后上传程序!

飞版,1827个对象的时候就比较慢了

点评

1827?那是肯定的了,都是在不停的排序啊  发表于 2011-10-31 22:08
发表于 2011-10-31 22:09:39 | 显示全部楼层
本帖最后由 yjr111 于 2011-10-31 22:21 编辑

源程序上传,没必要自己留着,就怕自己写得不好,所以不好意思拿出来。。。
  1. ;;;;;;;;;;;;;找出各组对应位置最大值 BY YJR111 2011-10-30;;;;;;;;;;;;;;;;;;;;;;;

  2. (DEFUN c:findmaxnum(/ nn mm ss n ss0 pt0 lst ssn ptn  lst_1 lst_2 lst_3 lst_4 nth_n $dist);;;;;局部变量自己填吧,习惯还没改过来
  3.          
  4.   (vl-load-com)
  5.   (setvar "cmdecho" 0)   
  6.     (if (SETQ SS (ssget  '((0 . "*TEXT" ))))
  7.      (progn
  8.      (SETQ nn 1)
  9.   (SETQ SS0(ENTGET (SSNAME SS 0)))
  10.   (setq height (CDR(ASSOC 40 SS0)))
  11.   (SETQ PT0(list (CDR(ASSOC 10 SS0))(CDR(ASSOC -1 SS0))))
  12.   (SETQ LST_0 (LIST PT0))
  13.   (REPEAT (-(SSLENGTH SS) 1)
  14.    (SETQ SSN(ENTGET (SSNAME SS nn)))
  15.    (SETQ PTN (list (CDR(ASSOC 10 SSN))(CDR(ASSOC -1 SSN))))
  16.    (SETQ LST_0(REVERSE (APPEND(LIST PTN)(REVERSE LST_0))))
  17.    (SETQ nn (1+ nn))
  18.   )
  19.    (princ"\n 共选中")(princ (sslength ss))(princ "个文本")
  20.    
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;根据距离不同进行分组;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  22.   (setq txt_lst(vl-sort LST_0(function(lambda (x1 x2)
  23.     (>(cadar x1) (cadar x2))))))
  24.     (setq txt_lst1 (cdr txt_lst))
  25.     (setq txt_lst2 (reverse(cdr(reverse txt_lst))))
  26.   
  27.     (setq lst_dist(vl-sort (mapcar (function (lambda(x y)(-(cadar x )(cadar y )))) txt_lst2 txt_lst1)'>))
  28.     (setq lst_$dist1 (cdr lst_dist))
  29.     (repeat (length lst_dist)
  30.     (setq lst_dist11(vl-remove nil (mapcar (function (lambda(x y)(if (/= x  y )  x ))) lst_dist lst_$dist1)))
  31.     )
  32.      (setq lst_dist (append lst_dist11 (list (last lst_dist))))
  33.     (princ  "\n 文字间距列表清单如下")
  34.     (princ  lst_dist )
  35.    (initget 128 "Y N")
  36.    (setq key (getkword "\n  是否需要重新确定各组间距?<Y> \n 或以程序默认的列表第一个间距值?(N)<右键默认>"))

  37.     (if (not key)(setq key "N"))
  38. (if (= key "N")(progn
  39. (cond ((= (length lst_dist)1)
  40.         (setq $dist (+(car lst_dist)1e-3)))
  41.        ((= (length lst_dist)2)
  42.         (setq $dist (car lst_dist)))
  43.        ((> (length lst_dist)2)
  44.    (setq $dist (cadr (reverse lst_dist))))
  45.      )



本帖子中包含更多资源

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

x

点评

今天没钱了,改天给你加币  发表于 2011-11-1 08:02
在12楼我也用了排序,可以不局限前缀,但速度慢了很多  发表于 2011-10-31 23:16
根据cabinsummer 的建议,我用的max函数,没排序,但是max有数量限制  发表于 2011-10-31 23:14
非常感谢您,很多代码对我有帮助,谢谢。没钱了,又不知道如何给币,口头感谢了  发表于 2011-10-31 23:09

评分

参与人数 1明经币 +1 金钱 +10 收起 理由
x_s_s_1 + 1 + 10 赞一个!

查看全部评分

发表于 2011-10-31 22:56:43 | 显示全部楼层
俺26楼又更新了一下速度加快N倍罗,
2000个文字基本上能秒杀了!可以测试下!
老规矩50楼发源码!

点评

还有20楼,有时间慢慢砌,反正我是搞结构的  发表于 2011-10-31 23:29
强烈期待飞版的源码!又有好多函数可以用了,不在伤脑筋喽  发表于 2011-10-31 23:24
测试了11500个比前面的1827个还快  发表于 2011-10-31 23:23
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 17:33 , Processed in 0.172138 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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