各位大佬好,手上有一个这样的程序,我希望在单行/多行文字中,从左往右数,第3个字后面加2个空格,目前遇到的问题是第3个字是字母,数字,的时候没问题,但是第3个字是特殊符号,汉字的时候,就出现问题了,可能因为是符号,汉字不止一个字符?我不知道怎么去区分开这个。有没有大佬能帮忙修改一下,要求就是单行、多行文字下,批量框选后,都在第3个字后面加2个空格,无论第3个字是什么,谢谢~
如果不能实现就做把第3个字符是φ的时候不拆成% %c吧,从φ后面开始分,谢谢
希望大概能帮忙改一下,本人不太会写程序,谢谢
- (defun c:TT ()
- (prompt "\n选择需要处理的文字: ") ; 提示用户选择文字
- (setq sslst (ssget '((0 . "TEXT,MTEXT")))) ; 获取选中的文字对象集合
- (if sslst ; 如果选择对象集合非空
- (progn
- (setq n -1) ; 初始化计数器
- (repeat (sslength sslst) ; 循环处理每一个选中的文字对象
- (setq ename (ssname sslst (setq n (1+ n)))) ; 获取对象名字
- (setq entdata (entget ename)) ; 获取对象的详细数据
- (setq textstr (cdr (assoc 1 entdata))) ; 提取文字内容
- ;; 判断文字长度是否大于等于3,然后处理文字
- (if (>= (strlen textstr) 3)
- (progn
- (setq part1 (substr textstr 1 3)) ; 取前3个字符
- (setq part2 (substr textstr 4)) ; 剩余的字符
- (setq newtext (strcat part1 " " part2)) ; 在第三个字符后添加两个空格
- )
- (setq newtext textstr)) ; 如果长度小于3,则不做改变
- ;; 更新文字内容
- (setq entdata (subst (cons 1 newtext) (assoc 1 entdata) entdata)) ; 替换原始数据中的文字内容
- (entmod entdata) ; 更新对象
- )
- (princ "\n处理完成!") ; 打印处理完成信息
- )
- (princ "\n没有选择任何文字.") ; 如果选择对象集合为空,则打印未选择任何文字信息
- )
- (princ) ; 返回空值
- )
|