找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1101|回复: 3

[字串处理系列三][编程申请]:能否给大家写个多行智能的字符串连接程序?

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2002-7-31 23:31:44 | 显示全部楼层 |阅读模式

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

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

×
我们同事的图经常是文字都是单个的,能否提供个“多行智能”的字符串连接程序?

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

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-8-1 00:04:48 | 显示全部楼层

Re: [编程申请]:能否给大家写个多行智能的字符串连接程序?

最初由 marting 发布
[B]我们同事的图经常是文字都是单个的,能否提供个“多行智能”的字符串连接程序?

那样处理说明就太惬意了,谢谢! [/B]

好了。

  1. ;|
  2.    命令:txt_join
  3.    
  4.    功能:窗选字体自动按由上至下,由左至右的顺序将字串合并

  5.         程序配合XDRX_API build 20630+版本使用,朋友们可以把这个LISP拷贝到“晓东工具箱”的安装的
  6.         LISP目录,自己加入到菜单里面就可以非常方便的使用了。
  7.         关于程序的建议请到“晓东CAD空间-编程申请”论坛
  8.         [url]http://www.xdcad.net/forum留言[/url]         
  9.    
  10. |;
  11. (defun c:txt_join (/ cutz1 ll l11 l1 pt_min mm l0 ss tb        js strb        e str
  12.                    str0        pt p1
  13.                   )
  14.   (xdrx_begin)
  15.   (xdrx_ucson)
  16.   (defun cutz1 (p)
  17.     (list (car p) (cadr p))
  18.   )
  19.   (princ "\n请选取要编辑的文字 <退出>: ")
  20.   (setq ss (ssget '((0 . "TEXT"))))
  21.   (xdrx_setsstodb ss 0)
  22.   (setq        tb     nil
  23.         strb   nil
  24.         mm     (* 3e-4 (getvar "viewsize"))
  25.         pt_min (getvar "extmin")
  26.   )
  27.   ;;构造表(((x1 y1) "string1" "实体名1") ((x2 y2) "string2" "实体名2") ......)
  28.   (while (setq e (xdrx_getentdata 0))
  29.     (setq tb (append (list (list (cutz1 (xdrx_getentdxf 10))
  30.                                  (xdrx_getentdxf 1)
  31.                                  e
  32.                            )
  33.                      )
  34.                      tb
  35.              )
  36.     )
  37.   )
  38.   ;;构造ll 按y坐标((距离1 (x1 y1) (x2 y2)...)
  39.   ;;               (距离2 (x1 y1) (x2 y2) ....)
  40.   (foreach ll (mapcar 'car tb)
  41.     (setq ln (abs (xdrx_p2ldist ll pt_min (polar pt_min 0 1.0)))
  42.           l2 l1
  43.     )
  44.     (while (and        (setq ll1 (car l2))
  45.                 (not (equal ln (car ll1) mm))
  46.            )
  47.       (setq l2 (cdr l2))
  48.     )
  49.     ;;将距离值近似的线段归入同一个子表内, 否则另开一个新的子表。
  50.     (setq l1 (if ll1
  51.                (subst (append ll1 (list ll)) ll1 l1)
  52.                (cons (list ln ll) l1)
  53.              )
  54.     )
  55.   )
  56.   ;;y坐标降序
  57.   (setq l11 (mapcar 'cdr (reverse (apply 'xdrx_rlistsort2 l1))))
  58.   ;;ll x升序
  59.   (while (setq l0 (car l11))
  60.     (setq ll (append ll (apply 'xdrx_rlistsort2 l0)))
  61.     (setq l11 (cdr l11))
  62.   )
  63.   ;;取出第一个字串
  64.   (setq e (last (assoc (car ll) tb)))
  65.   (xdrx_setenttodb e)
  66.   (setq        ss (ssdel e ss)
  67.   )
  68.   ;;构造字串表("string" "string1" ......)
  69.   (setq js 0)
  70.   (repeat (length ll)
  71.     (setq str (cadr (assoc (nth js ll) tb)))
  72.     (setq strb (append (list str) strb))
  73.     (setq js (1+ js))
  74.   )
  75.   (setq strb (mapcar 'xdrx_string_trimleft strb))
  76.   (setq strb (mapcar 'xdrx_string_trimright strb))
  77.   (command "erase" ss "")
  78.   (setq str0 (apply 'strcat (reverse strb))) ;合并字串
  79.   (xdrx_modent 1 str0 10 (car ll))
  80.   (setq ss (ssadd e ss))
  81.   (setq pt (append (car ll) '(0)))
  82.   (if (setq
  83.         p1 (xdrx_dragssmove "\n请移动点<不移动>: " ss pt)
  84.       )
  85.     (command ".move" ss "" pt p1)
  86.   )
  87.   (xdrx_ucsoff)
  88.   (xdrx_end)
  89.   (princ)
  90. )
  91. (princ)
  92. (princ "\n字串合并, 命令C:txt_join.")
  93. (princ)

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

使用道具 举报

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

使用道具 举报

发表于 2002-8-5 13:57:12 | 显示全部楼层
送你一个r12版时用的程序。
当时用的是(command "sh" “edit"...),
后来改为用doslib调用notepad。
这样你可以随意调整各行文字。



  1. (defun c:edc (/ DT E E0 EN EN0 FIL H0 IN LAY0 N P0 P1 S S0 ST TXT W0)
  2.   (prompt "\n选择要在notepad中编辑的文字:")
  3.   (mapcar 'setvar '("cmdecho""blipmode") '(0 0))
  4.   (setq s (ssget '((0 . "TEXT"))) in 0 n(sslength s)
  5.           fil "c:/000.txt"  txt (open fil "w")
  6.         k-edc(acqs "\nYes or No 原文删否?" (if k-edc k-edc "Y"))
  7.         e0 (ssname s 0) en0(entget e0)
  8.         p0 (dxf 10 en0) h0 (dxf 40 en0)
  9.         s0(dxf 7 en0)  w0(dxf 41 en0)
  10.         lay0(dxf 8 en0)
  11.   )
  12.   (if (= "Y" k-edc)
  13.     (repeat n
  14.       (setq e (ssname s in) en (entget e)       
  15.             st (dxf 1 en)  in (1+ in))
  16.       (princ (strcat st "\n" )txt)
  17.       (entdel e)
  18.     )
  19.     (repeat n
  20.       (setq e (ssname s in) en (entget e)       
  21.             st (dxf 1 en)  in (1+ in))
  22.       (princ (strcat st "\n" )txt)
  23.     )   
  24.   )
  25.   (close txt)
  26.   (dos_shellexe "notepad.exe" fil)
  27.   (setq p1 (pri1 getpoint p0 "\n文字新起点:" p0)
  28.         txt(open fil "r"))
  29.   (while (setq dt(read-line txt))
  30.     (#M_TXT P1 dt s0 h0 w0 0 0 0 lay0 -1)
  31.     (setq p1(polar p1 (- a:pi2) (* 1.5 h0)))
  32.   )
  33.   (close txt)
  34.   (dos_delete "c:/000.txt")
  35.   (mapcar 'setvar '("cmdecho""blipmode" "osmode") '(1 1 32))(princ)
  36. )

  37. (defun #m_txt (pt txt sty th wid tan d72 d73 lay color /)
  38. (if (and (= d72 0)(= d73 0))
  39.   (setq en000 (list
  40.       (cons 0 "TEXT")
  41.       (cons 1 txt)
  42.       (cons 7 sty)
  43.       (cons 8 lay)
  44.       (cons 10 pt)
  45.       (cons 40 th)
  46.       (cons 41 wid)
  47.       (cons 50 tan)
  48.       (cons 72 d72)
  49.       (cons 73 d73)   ) )
  50.   (setq en000 (list
  51.       (cons 0 "TEXT")
  52.       (cons 1 txt)
  53.       (cons 7 sty)
  54.       (cons 8 lay)
  55.       (cons 10 pt)
  56.       (cons 11 pt)
  57.       (cons 40 th)
  58.       (cons 41 wid)
  59.       (cons 50 tan)
  60.       (cons 72 d72)
  61.       (cons 73 d73)   ) )
  62.   )
  63.   (IF (= STY "STANDARD")(setq en000 (append en000 (list (cons 51 0.261799)))))
  64.   (if (/= -1 color) (setq en000 (append en000 (list (cons 62 color)))))
  65.   (if (= nil (entmake en000)) (princ "\n制造 TEXT 实体失败.")  )
  66. )


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 06:40 , Processed in 0.404707 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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