明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2494|回复: 4

[已解答] 把一行文字转成两行怎么写

[复制链接]
发表于 2014-11-13 11:52:49 | 显示全部楼层 |阅读模式
本帖最后由 柱哥 于 2014-11-13 11:53 编辑

一行品名,中间有中文数字字母,怎样分成两行,求码怎么写。

  (setq nc (strlen pm))
  (setq        ncb (fix (* nc 0.5))
        nca (- nc ncb)
  )
  (setq tx (substr pm nca 1))  
(cond
  ((and (= nca ncb) (<= (ascii tx) 160))
   (progn
     (setq pma (substr pm 1 nca))
     (setq pmb (substr pm (1+ nca) nc))
   )
  )
  ((and (= nca ncb) (> (ascii tx) 160))
   (progn
     (setq pma (substr pm 1 nca))
     (setq pmb (substr pm (1+ nca) nc))
   )
  )
  ((and (/= nca ncb) (<= (ascii tx) 160))
   (progn
     (setq pma (substr pm 1 nca))
     (setq pmb (substr pm (1+ nca) nc))
   )
  )
  ((and (/= nca ncb) (> (ascii tx) 160))
   (progn
     (setq pma (substr pm 1 nca))
     (setq pmb (substr pm (1+ nca) nc))
   )
  )
)

总是有错,中间汉字有时会出错,求高手指点,小菜在此谢谢。

本帖子中包含更多资源

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

x
发表于 2014-11-13 15:48:07 | 显示全部楼层
发表于 2014-11-15 23:25:52 | 显示全部楼层
主要是汉字双字节的问题
 楼主| 发表于 2014-11-18 13:43:29 | 显示全部楼层
本帖最后由 柱哥 于 2014-11-20 13:05 编辑

伪书虫86 给的我看了,只是我这样的不会改,请学长们出手帮忙。




把文字打段的改到d1里面。
两段品名一般写的一样长就可以了,所以没有指定在那个字上边分段,用按键决定品名一加长点或品名二加长点。

本帖子中包含更多资源

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

x
发表于 2014-11-20 10:54:19 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-11-20 10:58 编辑

关键是没有说清楚从哪个地方分段,或者可以指定?
  1. (defun makedcl(str_lst / dclfile fileID dclHandle)
  2.   (setq dclfile(vl-filename-mktemp nil nil ".dcl")fileID(open dclfile "w"))
  3.   (write-line(apply'strcat(listall(list str_lst)t))fileID)
  4.     (close fileID)
  5.     (setq dclHandle(load_dialog dclfile))
  6.     (vl-file-delete dclfile)
  7.     dclHandle)
  8. (defun ListAll(tlst f / aaa lst);;f为t时全部压平,nil时保留一层
  9.   (defun aaa(tlst)
  10.     (foreach b tlst
  11.       (if(listp b)(if f(aaa b)(if(listp(car b))(aaa b)(setq lst(cons b lst))))
  12.   (setq lst(cons b lst)))))
  13.   (if(listp tlst)(if(setq lst (aaa tlst))(reverse lst))))
  14. (defun mtext2txt(s / ob)
  15.   (vlax-put-property(setq ob(vlax-create-object"Vbscript.RegExp"))"IgnoreCase"0)
  16.   (vlax-put-property ob "Global" 1)
  17.   (setq s(mapcar'(lambda(x y)(vlax-put-property ob"Pattern"x)(setq s(vlax-invoke-method ob"Replace"s y)))
  18.     '("\\\\\\\\""\\\\{""\\\\}""\\\\pi(.[^;]*);""\\\\pt(.[^;]*);""\\\\S(.[^;]*)(\\^|#|\\\\)(.[^;]*);"
  19.       "(\\\\F|\\\\f|\\\\C|\\\\H|\\\\T|\\\\Q|\\\\W|\\\\A)(.[^;]*);""(\\\\L|\\\\O|\\\\l|\\\\o)""\\\\~"
  20.       "\\\\P""\n""({|})""\\x01""\\x02""\\x03")(list(CHR 1)(CHR 2)(CHR 3)"""""""""""""""""""\\""{""}")))
  21.   (if ob(vlax-release-object ob))
  22.   (last s))
  23. (defun delsame(l1 / L2 X)
  24.   (while(setq x(car l1)l1(cdr l1))
  25.     (setq l2(cons x l2))(if(member x l1)(setq l1(vl-remove x l1))))
  26.   (reverse l2))
  27. (defun mysel(msg filter / p a b c)
  28.   (if(and(setq a(entsel msg))(setq b(entget(car a)))(apply'and(mapcar'(lambda(x)(if(member x b)t))filter)))a
  29.     (progn(setq p(last(grread t 8))b(getvar'pickbox)c(* b 0.05))
  30.       (while(null(setq b(+ b c)
  31.            a(ssget"c"(polar p b 0.785398)(polar p b 3.92699)filter)
  32.            a(if a(ssname a 0));;此处严格应该计算点p到选择集a里边最近的一个图元
  33.            )))
  34.       (list a p))))
  35. (defun str->lst(a / c)
  36.   (setq a(vl-string->list a))
  37.   (while a
  38.   (if(<(car a)129)(setq c(cons(chr(car a))c)a(cdr a))
  39.     (setq c(cons(strcat(chr(car a))(chr(cadr a)))c)a(cddr a))))
  40. (reverse c))
  41. (Defun STB(TAB / snl sll)
  42.   (SetQ sll(TblNext TAB T))
  43.   (While(SetQ snl(Cons(Cdr(Assoc 2 sll))snl)sll(TblNext TAB nil)))
  44.   (reverse snl))
  45. (defun SstoEs(ss / a lst)
  46.   (if ss(progn(setq a -1)(repeat(sslength ss)(setq lst(cons(ssname ss(setq a(1+ a)))lst))))))
  47. (defun c:Dtxt(/ dcl lys ctl a b c i pat pats la lb lc)
  48.   (setq dcl(makedcl'("TXTCF:dialog{key=\"AAA\";"
  49.          ":column{:row{:button{label=\"拾取样本文字\";key=\"SEL\";}:popup_list{label=\"分隔符\";key=\"PAT\";}}"
  50.          ":row{:popup_list{label=\"第一部分\";key=\"LA\";}:popup_list{label=\"其余部分\";key=\"LB\";}}"
  51.          ":row{:button{key = \"ESC\";label = \"退出\";is_cancel = true;}:button{key = \"DO\";label=\"执行\";}}}}"))
  52.   LYS(STB"layer")ctl 5)
  53.   (while(> ctl 1)
  54.     (new_dialog"TXTCF"dcl)
  55.     (set_tile "AAA""文本拆分")
  56.     (action_tile"SEL""(done_dialog 2)")
  57.     (start_list"PAT")(mapcar'add_list pats)(end_list)
  58.     (start_list"LA")(mapcar'add_list LYS)(end_list)(if a(set_tile"LA"(itoa(vl-position LC LYS))))
  59.     (start_list"LB")(mapcar'add_list LYS)(end_list)(if a(set_tile"LB"(itoa(vl-position LC LYS))))
  60.     (action_tile"DO""(setq LA(nth(atoi(get_tile\"LA\"))lys)LB(nth(atoi(get_tile\"LB\"))lys)PAT(nth(atoi(get_tile\"PAT\"))pats))(done_dialog 1)")
  61.     (action_tile"ESC""(done_dialog 0)")
  62.     (setq ctl(start_dialog))
  63.     (cond((= ctl 2)(setq a(car(mysel"拾取样本文字"'((0 . "*TEXT"))))a(if a(entget a))
  64.        pats(delsame(Str->Lst(vl-string-trim" "(mtext2txt(cdr(assoc 1 a)))))) LC(cdr(assoc 8 a))))
  65.    ((= ctl 1)
  66.     (foreach a(sstoes(ssget"X"(list'(0 . "TEXT")(assoc 8 a))))
  67.       (setq b(entget a)c(vl-string-trim" "(cdr(assoc 1 b)))i(vl-string-search pat c)i(if i i(1+(strlen c))))
  68.       (entmakex(setq b(append(list'(0 . "TEXT")(cons 1(substr c 1 i))(cons 8 LA)'(72 . 2)'(10 0 0 0)'(73 . 2)
  69.             (cons 11(cdr(assoc(if(=(+(cdr(assoc 72 b))(cdr(assoc 73 b)))0)10 11)b))))
  70.         (mapcar'(lambda(x)(assoc x b))'(40 41 7 50 71)))))
  71.         (entmakex(append(list'(0 . "TEXT")(cons 1(vl-string-trim" "(substr c(1+ i))))(cons 8 LB))(vl-remove(assoc 72 b)(member'(10 0 0 0)b))))
  72.       (entdel a))))))




以前写来分段文字的,没有考虑它的位置问题,因为当时那不是关注的重点
可以根据自己需要进行修改

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-23 17:27 , Processed in 0.172692 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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