找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1330|回复: 12

[研讨] 将含空格的文字分解为单个文字而保持文字位置不变

[复制链接]

已领礼包: 207个

财富等级: 日进斗金

发表于 2013-5-31 14:01:30 | 显示全部楼层 |阅读模式

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

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

×
原来下载的eachy的 将含空格的文字分解为单个文字而保持文字位置不变
讨论一下,如何实现的?
附件:为eachy的程序
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:将含空格的文字按空格分解为单个文字而保持文字位置不变t.rar 
下载次数:105  文件大小:2.17 KB 
下载权限: 不限 以上  [免费赚D豆]



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-5-31 14:28:47 | 显示全部楼层
真不错! 看不出哪里不对! 位置相当精确
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-31 14:29:39 | 显示全部楼层
摘人家的行不?好像狂刀的
  1. ;;;示例 (txtTolst (ssname (ssget ":s" '((0 . "TEXT"))) 0))
  2. ;;;例子 "cad总平面-规划图" -> ("c" "a" "d" "总" "平" "面" "-" "规" "划" "图")
  3. (defun txtTolst (e / txt st stl)
  4.   (setq txt (cdr (assoc 1 (entget e))) stl T)
  5.   (mapcar 'vl-list->string
  6.     (vl-remove-if 'null
  7.       (mapcar
  8.         '(lambda (x)
  9.            (cond
  10.              ((< x 160) (list x)) ;; 一般 汉字编码 > 160. 英文符号<128.!!!
  11.              (T (if stl (setq st x stl nil) (setq stl (list st x))));;写法:确保返回值并设开关.
  12.            )
  13.          )
  14.          (vl-string->list txt)
  15.       )
  16.     )
  17.   )
  18. )

评分

参与人数 1D豆 +2 收起 理由
xshrimp + 2 及时回复奖!

查看全部评分

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

使用道具 举报

发表于 2013-5-31 14:36:36 | 显示全部楼层
本帖最后由 wowan1314 于 2013-5-31 14:41 编辑

晕! 换了几个字体,写了好多乱七八糟的符号,位置都相当精确。 {:soso_e154:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2688个

财富等级: 家财万贯

发表于 2013-5-31 14:52:52 | 显示全部楼层
就是根据字高、宽度比例吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-31 15:12:06 | 显示全部楼层
晓东工具箱的XDLSP.LSP通用函数库中,提供了一个函数$XDLSP_TXTBRK 就是做这个的,找到文字的打断点,我贴上来,里面有些XDRX的函数,但不影响看思路。

  1. (defun $xdlsp_txtbrk (e pt / e0 e1 p10 le le0 le1 p1 px a a1 d d1 dx dm i i1
  2.                         txt txt1 cha tfhz tf pos
  3.                      )
  4.   (xdrx_setenttodb e)
  5.   (if (= "TEXT" (xdrx_getentdxf 0))
  6.     (progn
  7.       (setq _pi2 (/ pi 2)
  8.             le0 (entget e)
  9.             e1 (assoc 1 le0)
  10.             txt (cdr e1)
  11.             p10 (assoc 10 le0)
  12.             p1 (cdr p10)
  13.             a (cdr (assoc 50 le0))
  14.             a1 (+ a _pi2)
  15.             px (trans pt 1 0)
  16.             dx (xdrx_p2ldist px p1 (polar p1 a1 1e3))
  17.       )
  18.       (setq dm (caadr ($xdlsp_textbox le0))
  19.             i 1
  20.             i1 1
  21.             d1 0
  22.             txt1 ""
  23.             tf T
  24.       )
  25.       (while (and
  26.                tf
  27.                (/= "" (setq cha (substr txt i 1)))
  28.              )
  29.         (if (setq tfhz (> (ascii cha) 159))
  30.           (setq cha (substr txt i 2))
  31.         )
  32.         (setq txt1 (strcat txt1 cha)
  33.               le (subst
  34.                    (cons 1 txt1)
  35.                    e1
  36.                    le0
  37.                  )
  38.               d (caadr ($xdlsp_textbox le))
  39.               i (+ i (if tfhz
  40.                        2
  41.                        1
  42.                      )
  43.                 )
  44.               tf (> dx d)
  45.         )
  46.         (if tf
  47.           (setq i1 i
  48.                 d1 d
  49.                 le1 le
  50.                 len (strlen (cdr (assoc 1 le)))
  51.           )
  52.         )
  53.       )
  54.       (if (< (abs (- d dx)) (abs (- d1 dx)))
  55.         (setq i1 i
  56.               d1 d
  57.               le1 le
  58.         )
  59.       )
  60.       (if (and
  61.             (not tf)
  62.             (<= 2 i1 (strlen txt))
  63.           )
  64.         (progn
  65.           (setq pos (strlen (xdrx_string_trimRight (cdr (assoc 1 le1))))
  66.                 le (subst
  67.                      (cons 1 (substr txt i1))
  68.                      e1
  69.                      le0
  70.                    )
  71.                 d1 (caadr ($xdlsp_textbox le))
  72.                 px (polar p1 a (- dm d1))
  73.                 le (subst
  74.                      (cons 10 px)
  75.                      p10
  76.                      le
  77.                    )
  78.           )
  79.           (list pos px)
  80.         )
  81.       )
  82.     )
  83.   )
  84. )


  1. (setq pt ($xdlsp_txtbrk e p1))
  2. ;;(4 (608903.0 4.61917e+006 -282.0))   断开点P1前面的字符是4,断开点后面的文字的起始点位置是P2=(608903.0 4.61917e+006 -282.0)


QQ截图20130531150916.png

评分

参与人数 2D豆 +10 收起 理由
QiaoCheng + 5 很给力!经验;技术要点;资料分享奖!
xshrimp + 5 及时回复奖!

查看全部评分

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-5-31 15:12:11 | 显示全部楼层
  1. ;;;文字去空格程序
  2. (defun c:ttrim(/ ss i l0 en ne eg ng e0 e1 j)
  3.   (if (not acet-tjust) (load "acetutil3.fas"))
  4.   (command ".color" (getvar "cecolor"))
  5.   (princ "\n选择需要去空格的文本: ")
  6.   (setq ss(ssget '((0 . "TEXT") (1 . "* *"))))
  7.   (if ss
  8.     (progn
  9.       (setq l0 (sslength ss)
  10.      i -1
  11.       )
  12.       (acet-tjust ss "R")
  13.     )
  14.   )
  15.   (repeat l0
  16.     (setq i (1+ i)
  17.    en (ssname ss i)
  18.    eg (entget en)
  19.    e1 (cdr (assoc 1 eg))
  20.     )
  21.     (if (wcmatch e1 " *")
  22.       (progn
  23. (setq e1 (vl-string-left-trim " " e1)
  24.        eg (subst (cons 1 e1) (assoc 1 eg) eg)
  25. )
  26. (entmod eg)
  27.       )
  28.     )
  29.     (if (wcmatch e1 "* ")
  30.       (progn
  31. (acet-tjust (ssadd en) "S")
  32. (setq eg (entget en)
  33.        e1 (cdr (assoc 1 eg))
  34.        e1 (vl-string-right-trim " " e1)
  35.        eg (subst (cons 1 e1) (assoc 1 eg) eg)
  36. )
  37. (entmod eg)
  38.       )
  39.       (acet-tjust (ssadd en) "S")
  40.     )
  41.     (while (wcmatch e1 "* *")
  42.       (setq eg (entget en)
  43.      ng (entmake eg)
  44.      ne (entlast)
  45.      ng (entget ne)
  46.      e0 (cdr (assoc 1 ng))
  47.      e0 (substr e0 1 (setq j (vl-string-search " " e0)))
  48.      ng (subst (cons 1 e0) (assoc 1 ng) ng)
  49.       )
  50.       (entmod ng)
  51.       (acet-tjust (ssadd en) "R")
  52.       (setq eg (entget en)
  53.      e1 (cdr (assoc 1 eg))
  54.      e1 (vl-string-left-trim " " (substr e1 (+ j 1)))
  55.      eg (subst (cons 1 e1) (assoc 1 eg) eg)
  56.       )
  57.       (entmod eg)
  58.       (setq eg (entget en)
  59.      e1 (cdr (assoc 1 eg))
  60.       )
  61.       (acet-tjust (ssadd en) "S")
  62.     )
  63.   )
  64.   (princ)
  65. )

点评

测试,可行。  发表于 2013-5-31 15:30

评分

参与人数 3D豆 +15 收起 理由
QiaoCheng + 5 很给力!经验;技术要点;资料分享奖!
xshrimp + 5 及时回复奖!
Lispboy + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-6-1 11:20:10 | 显示全部楼层
都不记得写过了,看看还能不能找到源码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2013-6-1 11:44:40 | 显示全部楼层
  1. (DEFUN STR2CELST (STR / I LST N STRI)
  2.   (SETQ I 1
  3.         N (STRLEN STR)
  4.   )
  5.   (WHILE (<= I N)
  6.     (SETQ STRI (SUBSTR STR I 1))
  7.     (IF (> (ASCII STRI) 159);不知道到底应该是159还是160
  8.       (SETQ STRI (SUBSTR STR I 2)
  9.             I (+ I 2)
  10.             LST (CONS STRI LST)
  11.       )
  12.       (SETQ I (1+ I)
  13.             LST (CONS STRI LST)
  14.       )
  15.     )
  16.     (REVERSE LST)
  17.   )
  18. )
  19. ;(str2celst "BatchPlot 或 BPlot 启动主程序。")
  20. ;("B" "a" "t" "c" "h" "P" "l" "o" "t" " " "或" " " "B" "P" "l" "o" "t" " " "启" "动" "主" "程" "序" "。")

评分

参与人数 2D豆 +8 收起 理由
Lispboy + 5 有始有终奖!
xshrimp + 3 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 308个

财富等级: 日进斗金

发表于 2013-6-1 16:07:19 | 显示全部楼层
xyp 的函数也不错

  1. ;;;******************************************************** xyp-Str1List 将一行字符串拆分转为单独字符表   [e派]
  2. ;;;语法:(xyp-Str1List str);str 任意字符串
  3. ;;; (xyp-Str1List "工具箱函数再揭秘") → ("工" "具" "箱" "函" "数" "再" "揭" "秘" )
  4. (defun xyp-Str1List (STR / i lst tx)
  5.   (setq i   1 lst '())
  6.   (while (<= i (strLen STR))
  7.     (setq tx (substr STR i 1))
  8.     (if (> (ASCII tx) 160)
  9.       (setq tx  (substr STR i 2)
  10.             i   (+ i 2)
  11.             lst (cons tx lst)
  12.       )
  13.       (setq i   (1+ i)
  14.             lst (cons tx lst)
  15.       )
  16.     )
  17.   )
  18.   (reverse lst)
  19. )

评分

参与人数 1D豆 +5 收起 理由
Lispboy + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 683个

财富等级: 财运亨通

发表于 2013-6-5 08:47:36 | 显示全部楼层
(setq str (cdr (assoc 1 (entget (car (entsel))))))
(setq str (vl-string->list str))
(while str
  (setq a (car str) str (cdr str))
  (if (> a 160)
        (setq a (list a (car str)) str (cdr str))
        (setq a (list a)))
  (setq new_str (cons a new_str))
  )
(setq new_str )
(mapcar 'vl-list->string  (reverse new_str))

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 17:33 , Processed in 0.504948 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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