明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2031|回复: 7

[已解答] 悬赏:相同的文字依次加上递增的后缀来区分

[复制链接]
发表于 2014-4-19 16:26 | 显示全部楼层 |阅读模式
本帖最后由 vlisp2012 于 2014-4-23 14:44 编辑

大侠们开个价吧。

面材排版的问题,请教一下大家:
石材幕墙,已经按照不同的大小,完成了不同的面材编号,来下单。这样一来不同的部位,相同的石头都编辑成一种编号了;
如:17B-B02。数量可能有20多块。
问题是,石材厂家,不希望有相同编号的石头,以区分其不同的位置。
希望将相同的编号,加上依次递增的后缀来区分。如:17B-B02-1,17B-B02-2,17B-B02-3…….
没有相同编号的,不用改动文字内容。如17B-B08.
大家有好的思路,或程序吗?

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-4-19 17:26 | 显示全部楼层
本来是个很简单的事,但看了样图都是多行文字,我只能表示无能为力,因为我做不到从MTEXT的内容里边把控制字符去掉得到真正需要的字串进行处理
下边我就把它们当成TEXT来说下大概思路吧:
得到所有文字图元,初始化一个空表txts()进行循环处理,取出文本内容(多行文本有可能文本内容一样但控制字符不一样,所以这地方比较头痛)
如果(assoc txt txts) (setq txts(subst(list txt (1+(last(assoc txt txts))))(assoc txt txts) txts)实现该文本内容加1,同时修改这个文字的内容(加上它的后续编号),反之(setq txts(append(txts(list(list txt 1))))),同时把文本内容加上后续编号1

当然,为了效果,可以先把所有文字按一定规则对根据坐标进行排序,那样编号不会显得杂乱无章
但最关键的是怎么让控制字符不同(也就是格式不同)的相同文本能被准确识别

评分

参与人数 1明经币 +1 收起 理由
vlisp2012 + 1 多谢高手了,我改成单行文字,做一下。

查看全部评分

 楼主| 发表于 2014-4-19 20:09 | 显示全部楼层
多谢大家了,有思路了.
发表于 2014-12-22 23:31 | 显示全部楼层
vlisp2012 发表于 2014-4-19 20:09
多谢大家了,有思路了.

楼主您好!
程序搞出来了不!
我也需要单行相同的文字依次加上递增的后缀
发表于 2014-12-22 23:32 | 显示全部楼层
vlisp2012 发表于 2014-4-19 20:09
多谢大家了,有思路了.

楼主您好!
程序搞出来了不!
我也需要单行相同的文字依次加上递增的后缀
 楼主| 发表于 2014-12-23 10:04 | 显示全部楼层
;;;图中大量编号,现在需要把这些是相同的编号(单行文字)建立成一个组,希望一次性框选可以完成,单个编号也建组。
;;;
;;;比如:
;;;C1 编号的建一个组
;;;C2 编号的建一个组
;;;C3 编号的建一个组

(defun c:bzz ()
  (setvar "cmdecho" 0)
  (vl-cmdf "undo" "be")
  (prompt "\n多行文字需要炸开,变成单行文字")
  (prompt "\n选择文字:")
  (setq        ss (ssget
                  '((-4 . "<and") (0 . "text")  (-4 . "and>"))
           )
  )
(or ss (setq ss (ssadd)))
  (setq        n 0
        wz-lst nil
  )
  (while (< n (sslength ss))
    (setq en   (ssname ss n)
          data (entget en)
    )
    (setq txt (cdr (assoc 1 data)))
    (if        (null (member txt wz-lst))
      (setq wz-lst (cons txt wz-lst))
    )
    (setq n (1+ n))
  )
  (setq n 0)
  (while (< n (length wz-lst))
    (vl-cmdf "select" ss "")
    (setq txt (nth n wz-lst)
          xx  (ssget "p" (list (cons 0 "text") (cons 1 txt)))
    )
(if (> (sslength xx) 1)
  (progn
(setq j 0)
(while (< j (sslength xx))
    (setq enxx   (ssname xx j)
          dataxx (entget enxx)
    )
  (setq ntxt (strcat txt "-" (itoa (+ j 1))))
  
;;;  (setq txt (cdr (assoc 1 dataxx)))
  (setq dataxx (subst (cons 1 ntxt) (assoc 1 dataxx) dataxx ))

  (entmod dataxx)
    (setq j (1+ j))
  )))

    (setq n (1+ n))
  )
  (vl-cmdf "undo" "e")
  (setvar "cmdecho" 1)
  (princ)
)
 楼主| 发表于 2014-12-23 10:05 | 显示全部楼层
是我的一个朋友,帮我编辑的这个程序。
发表于 2015-2-21 08:43 | 显示全部楼层
vlisp2012 发表于 2014-12-23 10:04
;;;图中大量编号,现在需要把这些是相同的编号(单行文字)建立成一个组,希望一次性框选可以完成,单个编号 ...

感谢分享!2015年新年快乐!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 04:33 , Processed in 0.392496 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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