明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: x_s_s_1

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

  [复制链接]
发表于 2011-11-2 15:50 | 显示全部楼层
正像楼主说的,结构圈早就有成熟的程序,只是没源码。楼主精神可嘉,赞一个。
发表于 2011-11-5 10:29 | 显示全部楼层
cabinsummer 发表于 2011-10-30 16:19
(setvar "dimzin" 8)可以抑制rtos后面的0
你的做法复杂了,用inpos将每个G开头的字符串按-分割成两段, ...

(defun subs(fengefu str)
       (while (vl-string-search fengefu str)
         (setq str(vl-string-subst " " fengefu str))
         )
  (Setq str(read(strcat "("  str  ")" )))
  str
  )
;(subs "-" "ming-jing-tong-dao-5-2-0")======(MING JING TONG DAO 5 2 0)
;(subs "v" "明经通v道v我嗳你")              (明经 通道 我嗳你)

点评

程序有缺陷,如果字符串本身含有" ",就会输出不正确的结果。  发表于 2011-11-12 10:31
老师,你太强大了!能不能发一下(明经一通道520好吧二)转换成(明经 一 通道 520 好吧 二)的函数?  发表于 2011-11-5 11:01

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
x_s_s_1 + 1 + 5 很给力!

查看全部评分

发表于 2011-11-5 10:57 | 显示全部楼层
灌水一下,请版主见谅!
发表于 2011-11-5 10:57 | 显示全部楼层
顶满50楼,在此灌水,请版主不要扣我钱!
 楼主| 发表于 2011-11-8 10:27 | 显示全部楼层
不好意思前段时间出差了,刚刚回来,看了yanshengjiang 兄的帖子灰常给力,谢谢了,谢谢YJR111兄的顶帖
发表于 2011-11-12 23:35 | 显示全部楼层
难道大伙就这样让飞诗的源码压在箱底?
发表于 2011-11-14 10:34 | 显示全部楼层
绞尽脑汁,搞不定第36楼的例题,厚颜顶起,坐等飞版源码,看是否可以给予启发。(我是马甲)
发表于 2011-11-14 10:59 | 显示全部楼层
飞诗(fsxm) 发表于 2011-10-31 20:03
我也过来练练手哦!
先占下本楼备用!
下班后上传程序!

来凑热闹了,好像已经到50楼了。。。
发表于 2011-11-14 13:09 | 显示全部楼层
49楼建设,迎接飞诗
发表于 2011-11-14 14:59 来自手机 | 显示全部楼层
本帖最后由 飞诗(fsxm) 于 2011-11-14 17:23 编辑

俺占楼备用哈!
上源码!本程序只针对一楼只有一列的情况哦!
多列的还得另修改哈!就是我在程序中用====双横线夹着的中间“分组”部分!

  1. ;;几个常用的全局变量
  2. (vl-load-com)
  3. (setq *acad* (vlax-get-acad-object))
  4. (setq *doc* (vla-get-ActiveDocument *acad*))
  5. ;;无声退出
  6. (defun fsxm-silenceexit (/ *error*)
  7.   (t (setq *error* strcat))
  8. )
  9. ;;连结表中字符串
  10. (defun Fsxm-join (lst str)
  11.   (substr (apply 'strcat
  12.    (mapcar (function (lambda (a) (strcat str a))) lst)
  13.    )
  14.    (1+ (strlen str))
  15.   )
  16. )
  17. ;;左下角Y坐标
  18. (defun GetMinY (obj)
  19.   (vla-GetBoundingBox obj 'Minp 'Maxp)
  20.   (cadr (vlax-safearray->list Minp))
  21. )
  22. ;;分离字母前缀(GetSYM "VH12-5-6")
  23. (defun GetSYM (str / cur n nstr nums)
  24.   (setq n 1)
  25.   (while (not (wcmatch (substr str n 1) "#"))
  26.     (setq n (1+ n))
  27.   )
  28.   (setq nums (vl-string-translate "-" " " (substr str n)))
  29.   (list (substr str 1 (1- n)) (read (strcat "(" nums ")")))
  30. )
  31. ;;
  32. (defun Obj->List (obj)
  33.   (cons obj (GetSYM (vla-get-TextString obj)))
  34. )
  35. ;;处得一组最大值文字
  36. (defun GetMaxStr (lst / bodystr maxnums sym)
  37.   (setq maxNums
  38.   (apply 'mapcar
  39.   (cons 'max (vl-remove nil (mapcar 'last lst)))
  40.   )
  41.   )
  42.   (setq BodyStr (fsxm-join (mapcar 'itoa maxNums) "-")) ;主体
  43.   (setq sym (cadar   ;前缀
  44.        (vl-member-if
  45.   (function (lambda (a) (= (caaddr a) (car maxNums))))
  46.   lst
  47.        )
  48.      )
  49.   )
  50.   (strcat sym bodyStr)
  51. )

  52. ;;主程序
  53. (defun c:test (/      copy   grp    grplen lasty  miny  n obj
  54.         objs   objs2  objs3  pt    pt0   ss  str strlst
  55.         texthx2      tmp
  56.        )
  57.   (setq ss (ssget '((0 . "text"))))
  58.   (or ss (fsxm-silenceexit))

  59.   ;;分组=======================================================
  60.   ;;(setq objs nil)
  61.   (vlax-for obj (vla-get-ActiveSelectionSet *doc*)
  62.     (setq objs (cons (list (GetminY obj) obj) objs))
  63.   )
  64.   (setq objs (vl-sort objs
  65.         (function (lambda (a b) (> (car a) (car b))))
  66.       )
  67.   )
  68.   (setq TextHx2 (* 2.0 (vla-get-Height (cadar objs))))
  69.   (setq lastY (caar objs))
  70.   (setq objs2 nil)
  71.   (setq tmp (list (Obj->List (cadar objs))))
  72.   (foreach obj (cdr objs)
  73.     (setq minY (car obj))
  74.     (if (equal lastY minY TextHx2)
  75.       (setq tmp (cons (Obj->List (cadr obj)) tmp))
  76.       (setq objs2 (cons (reverse tmp) objs2)
  77.      tmp   (list (Obj->List (cadr obj)))
  78.       )
  79.     )
  80.     (setq lastY minY)
  81.   )
  82.   (setq objs2 (reverse (cons (reverse tmp) objs2)))
  83.   (setq GrpLen (apply 'max (mapcar 'length objs2)))
  84.   ;;(setq objs3 nil)
  85.   (setq n 0)
  86.   (repeat GrpLen
  87.     (setq objs3 (cons (mapcar (function (lambda (a) (nth n a))) objs2)
  88.         objs3
  89.   )
  90.    n (1+ n)
  91.     )
  92.   )
  93.   ;;分组end=====================================================

  94.   ;;生成结果文字
  95.   (setq strLst (mapcar 'GetMaxStr (reverse objs3)))
  96.   (setq grp (mapcar
  97.        'car
  98.        (car
  99.   (vl-member-if
  100.     (function (lambda (a) (= (length a) GrpLen)))
  101.     objs2
  102.   )
  103.        )
  104.      )
  105.   )
  106.   (setq pt (getpoint "\n放置结果:"))
  107.   (or pt (fsxm-silenceexit))
  108.   (setq pt (trans pt 1 0))
  109.   (setq pt0 (vlax-get (last grp) 'InsertionPoint))
  110.   (mapcar '(lambda (obj str)
  111.       (setq copy (vla-copy obj))
  112.       (vla-put-TextString copy str)
  113.       (vlax-invoke copy 'Move pt0 pt)
  114.     )
  115.    grp
  116.    strLst
  117.   )
  118.   (princ)
  119. )

点评

飞版不好意思,我实在是不知如何加币了,呵呵。前后加起来也差不多了。代码我慢慢研究,非常感谢  发表于 2011-11-14 21:49

评分

参与人数 3明经币 +3 金钱 +10 收起 理由
yjr111 + 1 现在怎么每天只能加一个币了,飞版向明总反.
x_s_s_1 + 1 赞一个!
夏生生 + 1 + 10 很给力!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-3 07:08 , Processed in 0.152802 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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