把一行文字转成两行怎么写
本帖最后由 柱哥 于 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))
)
)
)
总是有错,中间汉字有时会出错,求高手指点,小菜在此谢谢。
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=93336
可以参考下这个 主要是汉字双字节的问题 本帖最后由 柱哥 于 2014-11-20 13:05 编辑
伪书虫86 给的我看了,只是我这样的不会改,请学长们出手帮忙。
把文字打段的改到d1里面。
两段品名一般写的一样长就可以了,所以没有指定在那个字上边分段,用按键决定品名一加长点或品名二加长点。 本帖最后由 llsheng_73 于 2014-11-20 10:58 编辑
关键是没有说清楚从哪个地方分段,或者可以指定?
(defun makedcl(str_lst / dclfile fileID dclHandle)
(setq dclfile(vl-filename-mktemp nil nil ".dcl")fileID(open dclfile "w"))
(write-line(apply'strcat(listall(list str_lst)t))fileID)
(close fileID)
(setq dclHandle(load_dialog dclfile))
(vl-file-delete dclfile)
dclHandle)
(defun ListAll(tlst f / aaa lst);;f为t时全部压平,nil时保留一层
(defun aaa(tlst)
(foreach b tlst
(if(listp b)(if f(aaa b)(if(listp(car b))(aaa b)(setq lst(cons b lst))))
(setq lst(cons b lst)))))
(if(listp tlst)(if(setq lst (aaa tlst))(reverse lst))))
(defun mtext2txt(s / ob)
(vlax-put-property(setq ob(vlax-create-object"Vbscript.RegExp"))"IgnoreCase"0)
(vlax-put-property ob "Global" 1)
(setq s(mapcar'(lambda(x y)(vlax-put-property ob"Pattern"x)(setq s(vlax-invoke-method ob"Replace"s y)))
'("\\\\\\\\""\\\\{""\\\\}""\\\\pi(.[^;]*);""\\\\pt(.[^;]*);""\\\\S(.[^;]*)(\\^|#|\\\\)(.[^;]*);"
"(\\\\F|\\\\f|\\\\C|\\\\H|\\\\T|\\\\Q|\\\\W|\\\\A)(.[^;]*);""(\\\\L|\\\\O|\\\\l|\\\\o)""\\\\~"
"\\\\P""\n""({|})""\\x01""\\x02""\\x03")(list(CHR 1)(CHR 2)(CHR 3)"""""""""""""""""""\\""{""}")))
(if ob(vlax-release-object ob))
(last s))
(defun delsame(l1 / L2 X)
(while(setq x(car l1)l1(cdr l1))
(setq l2(cons x l2))(if(member x l1)(setq l1(vl-remove x l1))))
(reverse l2))
(defun mysel(msg filter / p a b c)
(if(and(setq a(entsel msg))(setq b(entget(car a)))(apply'and(mapcar'(lambda(x)(if(member x b)t))filter)))a
(progn(setq p(last(grread t 8))b(getvar'pickbox)c(* b 0.05))
(while(null(setq b(+ b c)
a(ssget"c"(polar p b 0.785398)(polar p b 3.92699)filter)
a(if a(ssname a 0));;此处严格应该计算点p到选择集a里边最近的一个图元
)))
(list a p))))
(defun str->lst(a / c)
(setq a(vl-string->list a))
(while a
(if(<(car a)129)(setq c(cons(chr(car a))c)a(cdr a))
(setq c(cons(strcat(chr(car a))(chr(cadr a)))c)a(cddr a))))
(reverse c))
(Defun STB(TAB / snl sll)
(SetQ sll(TblNext TAB T))
(While(SetQ snl(Cons(Cdr(Assoc 2 sll))snl)sll(TblNext TAB nil)))
(reverse snl))
(defun SstoEs(ss / a lst)
(if ss(progn(setq a -1)(repeat(sslength ss)(setq lst(cons(ssname ss(setq a(1+ a)))lst))))))
(defun c:Dtxt(/ dcl lys ctl a b c i pat pats la lb lc)
(setq dcl(makedcl'("TXTCF:dialog{key=\"AAA\";"
":column{:row{:button{label=\"拾取样本文字\";key=\"SEL\";}:popup_list{label=\"分隔符\";key=\"PAT\";}}"
":row{:popup_list{label=\"第一部分\";key=\"LA\";}:popup_list{label=\"其余部分\";key=\"LB\";}}"
":row{:button{key = \"ESC\";label = \"退出\";is_cancel = true;}:button{key = \"DO\";label=\"执行\";}}}}"))
LYS(STB"layer")ctl 5)
(while(> ctl 1)
(new_dialog"TXTCF"dcl)
(set_tile "AAA""文本拆分")
(action_tile"SEL""(done_dialog 2)")
(start_list"PAT")(mapcar'add_list pats)(end_list)
(start_list"LA")(mapcar'add_list LYS)(end_list)(if a(set_tile"LA"(itoa(vl-position LC LYS))))
(start_list"LB")(mapcar'add_list LYS)(end_list)(if a(set_tile"LB"(itoa(vl-position LC LYS))))
(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)")
(action_tile"ESC""(done_dialog 0)")
(setq ctl(start_dialog))
(cond((= ctl 2)(setq a(car(mysel"拾取样本文字"'((0 . "*TEXT"))))a(if a(entget a))
pats(delsame(Str->Lst(vl-string-trim" "(mtext2txt(cdr(assoc 1 a)))))) LC(cdr(assoc 8 a))))
((= ctl 1)
(foreach a(sstoes(ssget"X"(list'(0 . "TEXT")(assoc 8 a))))
(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))))
(entmakex(setq b(append(list'(0 . "TEXT")(cons 1(substr c 1 i))(cons 8 LA)'(72 . 2)'(10 0 0 0)'(73 . 2)
(cons 11(cdr(assoc(if(=(+(cdr(assoc 72 b))(cdr(assoc 73 b)))0)10 11)b))))
(mapcar'(lambda(x)(assoc x b))'(40 41 7 50 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))))
(entdel a))))))
以前写来分段文字的,没有考虑它的位置问题,因为当时那不是关注的重点
可以根据自己需要进行修改
页:
[1]