找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 979|回复: 1

[字串处理系列二][编程申请]:求字符串断开程序。

[复制链接]
发表于 2002-7-31 21:10:06 | 显示全部楼层 |阅读模式

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

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

×
看论坛上都讲探索者的字处理最好,我不搞结构,用理正多些,再加晓东工具箱,请版主费心在工具箱加强些字处理程序,比如字串打断、字串连接、排版等等。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-7-31 23:58:43 | 显示全部楼层
我这有个以前的。和天正或理正的效果一样的。
其中:hzbrk----将字串拆成单个字符
      wdbrk----在指定点处断开字串

  1. (defun redraw_le ()
  2.   (foreach e le_drw (redraw e 4))
  3.   (foreach e le_del (entdel e))
  4.   (setq        le_drw nil
  5.         le_del nil
  6.   )
  7. )
  8. (defun c:hzbrk (/ ss e le txt p1 a d2 pe n i cha d1 cha1 le1)
  9.   (xdrx_begin)
  10.   (xdrx_end)
  11.   (princ "\n请选取要拆成单字的汉字 <退出>: ")
  12.   (setq ss (ssget '((0 . "TEXT"))))
  13.   (if ss
  14.     (progn
  15.       (xdrx_setsstodb ss 0)
  16.       (while (setq e (xdrx_getentdata 0))
  17.         (setq le  (entget e)
  18.               txt (xdrx_getentdxf 1)        ;字串项
  19.               txt (xdrx_string_trimleft txt)
  20.               txt (xdrx_string_trimright txt) ;去首尾空格
  21.               p1  (mapcar '-
  22.                           (xdrx_getentdxf 10)
  23.                           (append (list (caar (textbox le)))
  24.                                   '(0 0) ;消y的偏移如 g 字符
  25.                           )
  26.                   )
  27.               a          (xdrx_getentdxf 50)        ;旋转角
  28.               d2  (- (caadr (textbox le)) (caar (textbox le))) ;x值
  29.               pe  (polar p1 a d2)        ;字符最右点坐标
  30.         )
  31.         (entdel e)
  32.         (setq i 1)
  33.         (while (not (equal txt ""))
  34.           (setq cha (substr txt i 1))
  35.           (if (> (ascii cha) 159)
  36.             (setq n 2)
  37.             (if        (= (ascii cha) 37)        ;  文字是: %
  38.               (progn
  39.                 (setq cha1 (substr txt 2 1))
  40.                 (if (= (ascii cha1) 37)
  41.                   (progn
  42.                     (setq cha2 (substr txt 3 1))
  43.                     (if        (or (= (ascii cha2) 112)
  44.                             ;; %%p
  45.                             (= (ascii cha2) 100)
  46.                             ;; %%d
  47.                         )
  48.                       (setq n 3)
  49.                     )
  50.                     (setq n 5)
  51.                     ;;其它控制字符
  52.                   )
  53.                 )
  54.               )
  55.               (setq n 1)
  56.             )
  57.           )
  58.           (setq        d1 (- (caadr (textbox (list (cons 1 txt))))
  59.                       (caar (textbox (list (cons 1 txt))))
  60.                    )
  61.                 p1 (polar pe
  62.                           (+ pi a)
  63.                           d1
  64.                    )
  65.           )
  66.           (setq        cha (substr txt i n)
  67.                 le1 (subst (cons 1 cha) (assoc 1 le) le)
  68.                 le1 (subst (cons 10 p1) (assoc 10 le) le1)
  69.           )
  70.           (entmake le1)
  71.           (setq txt (xdrx_string_right txt (- (strlen txt) n)))
  72.           (if (/= txt "")
  73.             (setq txt (xdrx_string_trimleft txt)
  74.                   txt (xdrx_string_trimright txt)
  75.                   d1  (- (caadr (textbox (list (cons 1 txt))))
  76.                          (caar (textbox (list (cons 1 txt))))
  77.                       )
  78.                   p1  (polar pe
  79.                              (+ pi a)
  80.                              d1
  81.                       )
  82.             )
  83.           )
  84.         )
  85.       )
  86.     )
  87.   )
  88.   (xdrx_ucsoff)
  89.   (xdrx_end)
  90.   (princ)
  91. )
  92. (defun c:wdbrk (/    e0          e1   e10  le         le0  le1  p1        px   a          a1
  93.                 d    d1          dx   dm   i         i1  js txt0 txt2 txt  txt1        cha  tfhz tf
  94.                )
  95.   (if (and (setq e0 (xdrx_entsel "\n请点取要打断的文字 <退出>: "))
  96.            (setq e0  (car e0)
  97.                  le0 (entget e0)
  98.            )
  99.            (= "TEXT" (cdr (assoc 0 le0)))
  100.            (progn (redraw e0 3)
  101.                   (setq        le_drw (cons e0 le_drw)
  102.                         px     (getpoint "\n再点一下要打断的位置 <退出>: ")
  103.                   )
  104.            )
  105.            (> (setq e1        (assoc 1 le0)
  106.                     txt        (cdr e1)
  107.                     e10        (assoc 10 le0)
  108.                     p1        (cdr e10)
  109.                     a        (cdr (assoc 50 le0))
  110.                     a1        (+ a (/ pi 2))
  111.                     dx        (xdrx_p2ldist px p1 (polar p1 a1 1e3))
  112.               )
  113.               0
  114.            )
  115.       )
  116.     (progn
  117.       (setq dm         (caadr (textbox le0))
  118.             i         1
  119.             i1         1
  120.             d1         0
  121.             txt1 ""
  122.             tf         T
  123.       )
  124.       (while (and tf
  125.                   (/= ""
  126.                       (setq cha
  127.                              (substr txt i 1)
  128.                       )
  129.                   )
  130.              )
  131.         (if (setq tfhz (> (ascii cha) 159))
  132.           (setq cha (substr txt i 2))
  133.         )
  134.         (setq txt1 (strcat txt1 cha)
  135.               le   (subst (cons 1 txt1) e1 le0)
  136.               d           (caadr (textbox le))
  137.               i           (+ i
  138.                       (if tfhz
  139.                         2
  140.                         1
  141.                       )
  142.                    )
  143.               tf   (> dx d)
  144.         )
  145.         (if tf
  146.           (setq        i1  i
  147.                 d1  d
  148.                 le1 le
  149.           )
  150.         )
  151.       )
  152.       (if (< (abs (- d dx)) (abs (- d1 dx)))
  153.         (setq i1  i
  154.               d1  d
  155.               le1 le
  156.         )
  157.       )
  158.       (if (and (not tf)
  159.                (<= 2 i1 (strlen txt))
  160.           )
  161.         (progn
  162.           (entmod le1)
  163.           (if (not js)
  164.             (setq js 0)
  165.           )
  166.           (setq        le (subst (cons 1 (substr txt (- i1 js))) e1 le0)
  167.                 d1 (caadr (textbox le))
  168.                 px (polar p1 a (- dm d1))
  169.                 le (subst (cons 10 px) e10 le)
  170.           )
  171.           (entmake le)
  172.         )
  173.       )
  174.     )
  175.   )
  176.   (redraw_le)
  177.   (princ)
  178. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 00:47 , Processed in 0.557560 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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