BIGAL 发表于 2022-7-5 23:31:55

第1部分
开始学习lisp的好时机(setq str是一个用于测试目的的样本行,对entsel或ssget、entget和assoc进行一些搜索,它们一起工作,允许您选择文本并返回文本字符串,您将在上面的代码中设置为str。只需阅读一些lisp示例,您就会很快看到
第二部分阅读塔瓦特邮报,然后最终解决方案就会出来。

subodh_gis 发表于 2022-7-5 23:36:20

请参阅此线程中的附加图像。

subodh_gis 发表于 2022-7-5 23:38:27

请参见所附图片作为示例

pBe 发表于 2022-7-5 23:42:19


(Defun c:m45 (/ str ent ll [t 45:s txt ur)
;;;                pBeMay2014                ;;;
(princ "\nSelect Text objects")
(if (setq strs (ssget "_:L" '((0 . "TEXT"))))
   (repeat (Setq i (sslength strs))
   (setq ent        (entget (ssname strs (setq i (1- i))))
    pt        (cdr (assoc 10 ent))
    str        (cdr (assoc 1 ent)) cl 1
   )
   (repeat (1+ (/ (strlen str) 45))
(setq 45:S (substr str 1 45))
(setq txt (entmakex (list (cons 0 "TEXT")
                          (cons 10 pt)
                          (Cons 1 45:S)
                          (assoc 7 ent)
                          (assoc 40 ent)
                          (cons 62 cl);<-color for identification
                  )
          )
)
(vla-getboundingbox (vlax-ename->vla-object txt) 'll 'ur)
(setq ur (vlax-safearray->list ur))
(setq pt(list (car ur) (cadr pt))
      cl(1+ cl)
      str (substr str 46)
)
   )
   (entdel (ssname strs i))
   )
)
(princ)
))
 
但我同意比格尔的观点
 
 
@ymg公司
注意:
(setq strlst (cons (substr str x (- len 1)) strlst) x (+ x len -1))
 
每项生成44个字符串的列表
 
不确定,但这应该是公正的吗
(setq strlst (cons (substr str x len) strlst)x (+ x len ))

subodh_gis 发表于 2022-7-5 23:45:07

但代码实际上并不是我所需要的。代码应该首先要求选择文本,然后拆分它。

pBe 发表于 2022-7-5 23:48:56

你是说你需要在同一个地方用45个字符的字符串替换选中的文本实体吗?因为在你13号帖子和世界其他地方发布的图片上,它看起来不是那样的。
 
我内心的善良只会给你一次机会。正如塔瓦特已经要求的那样,请张贴一张样图

ReMark 发表于 2022-7-5 23:50:29

像这样的lisp例程的问题是很容易得到这样的结果。。。
 
通常用于描述ba的语言
共和党内部正在发生的事情令人担忧
g和误导性。今年春天的比赛不是
在“草根”和“体制”之间
nt”,但在两个建立分数sp之间
结束巨额资金以占上风。泰伊
r对抗与长ter无关
共和党的哲学方向。非常富有
明白我的意思吗?文字会被不自然地剪掉,不会像在正常的书面文本中那样插入连字符。在我看来,这是个坏主意。

Tharwat 发表于 2022-7-5 23:56:26

这是我的变体,但没有时间测试代码,因为我现在必须离开办公室。
 

(defun c:Test (/ _l ss)
;;    Tharwat 18. May. 2014      ;;
(defun _l (e / a b l)
   (vla-getboundingbox (vlax-ename->vla-object e) 'a 'b)
   (setq l (mapcar 'vlax-safearray->list (list a b)))
   (distance (car l) (cadr l))
)
(if (setq ss (ssget "_:L" '((0 . "TEXT"))))
   ((lambda (i / sn st pt e en j n)
      (while (setq sn (ssname ss (setq i (1+ i))))
      (if (> (strlen (setq st (cdr (assoc 1 (setq en (entget sn)))))) 45)
          (progn (setq pt (cdr (assoc 10 en))
                     e(cdr (assoc -1 (entmod (append en (list (cons 1 (substr st 1 45)))))))
                     st (substr st 46)
               )
               (repeat (1+ (/ (strlen st) 45))
                   (setq
                     e (entmakex (append (vl-remove-if-not '(lambda (x) (member (car x) '(0 8 62 40 41 50))) (entget e))
                                       (list (cons 1 (substr st 1 45))
                                             (cons 10 (setq pt (polar pt (cdr (assoc 50 (entget e))) (_l e))))
                                       )
                                 )
                     )
                   )
                   (setq st (substr st 46))
               )
          )
      )
      )
    )
   -1
   )
)
(princ)
) (vl-load-com)

pBe 发表于 2022-7-5 23:57:10

 
我知道你的意思。。。但我们的“最后一次机会”节目确实说:
 
我想,如果程序将字符串拆分到同一个位置,它仍然“看起来”正常。
 
编辑:等等。我相信OP确实说过将结果导出到外部文件。也许你有什么意见,[现在我很困惑]
 
FWIW:代码在14日后更新
 
@塔瓦特
在那里输入7作为TEXTSTYLE
...(member (car x) '(0 7 8 62 40 41 50))..

subodh_gis 发表于 2022-7-6 00:02:05

是,在同一位置用分割的45个字符串替换选定的文本实体。见附图。
样品图纸
页: 1 [2]
查看完整版本: 将文本字符串拆分为45个字符