# 0. 引言

在CAD中进行文本替换已经存在一个find命令了,但是只能进行一对一的文本替换,如果遇到一个图形文件中有很多个文本需要替换时,你不可能一个一个的去find替换吧,当然你也可以尝试一个一个替换,效率就不得而知了。

这个是之前接触的一个工作内容,也可能是我走上CAD二次开发这条不归路的一个起点,因为确实是让我体会到代码所带来的效率提升有多大!

废话不说!Let's do it !!

# 1. CAD多个文本批量查找替换程序

大致逻辑就是:遍历文件图元对象,如果是文本对象,通过键值对的方式建立替换前文本和替换后文本的索引关系,进行查找替换。

老样子,打开图形数据库开启事务处理,打开块表和块表记录

遍历图元对象

完整代码:

using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace TextBatchReplace
{public class Tools{[CommandMethod("TBR")]public void TextBatchReplace(){List<KeyValuePair<string, string>> liststring = new List<KeyValuePair<string, string>>();// 添加需要替换和替换后的文本 liststring.Add(new KeyValuePair<string, string>("需要替换的文本", "替换后文本"));  // 打开图形数据库Database db = HostApplicationServices.WorkingDatabase;// 打开事务处理using (Transaction trans = db.TransactionManager.StartTransaction()){// 以只读方式打开块表BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);// 以写的方式打开块表记录BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);// 在块表记录中遍历对象foreach (ObjectId id in btr){DBObject ent = trans.GetObject(id, OpenMode.ForWrite);// 判断是否是单行文字if(ent is DBText){DBText dbText = ent as DBText;int newstring = ReplaceString(dbText.TextString.Trim(), liststring);// 如果正确索引到该文本字符串if(newstring >= 0){// 执行替换dbText.TextString = dbText.TextString.Replace(liststring[newstring].Key.Trim(), liststring[newstring].Value.Trim());}}// 如果是多行文本else if (ent is MText){MText mText = ent as MText;int newstring = ReplaceString(mText.Contents.Trim(), liststring);if (newstring >= 0){mText.Contents = mText.Contents.Replace(liststring[newstring].Key.Trim(), liststring[newstring].Value.Trim());}}}trans.Commit();}}// IndexOf() 查找字串中指定字符或字串首次出现的位置,返首索引值// Trim()    用于删除字符串头部及尾部出现的空格,删除的过程为从外到内,直到碰到一个非空格的字符为止/// <summary>/// 字符串查找/// </summary>/// <param name="inputstring">输入字符串</param>/// <param name="getalls"></param>/// <returns></returns>private int ReplaceString(string inputstring, List<KeyValuePair<string, string>> allgetstring){int returnvalues = -1;for (int i = 0; i < allgetstring.Count; i++){if (inputstring.Trim().IndexOf(allgetstring[i].Key.Trim()) >= 0) {returnvalues = i;break;}}return returnvalues;}}
}

完整代码下载:

https://gitee.com/yuzhaokai/CADExampleDemo.git​gitee.com

原文请关注公众号:数据智能笔记

.net trim 替换指定字符_CAD二次开发实例:批量文本查找替换相关推荐

  1. AutoCAD .NET 二次开发实例:批量文本查找替换

    转载自公众号:数据智能笔记 https://mp.weixin.qq.com/s?__biz=MzA3NzI3MjgyNQ==&mid=2247483879&idx=1&sn= ...

  2. sed命令替换指定字符后不固定字符串,文本信息的替换删除

    sed主要用来处理文本内容的修改,文本的提取分割可以使用awk和cut命令,参考本人文章linux常用文本字符分割分析awk和cut命令 sed命令格式: sed [选项] '.../.../...' ...

  3. js 正则表达式奇偶字符串替换_JS利用正则配合replace替换指定字符

    替换指定字符的方法有很多,在本文为大家详细介绍下,JS利用正则配合replace是如何做到的,喜欢的朋友可以参考下 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一 ...

  4. c语言字符串替换有大小写,(C语言)字符串大小写无关查找替换

    [问题描述] 编写程序将一行英文中指定的字符串替换为另一字符串后输出.注意:查找指定字符串时,大小写无关,而且有可能多次出现. [输入形式] 先从标准输入中分行输入两个英文字符串(每个字符串不为空,长 ...

  5. Python 语言 SAP2000 二次开发 实例

    目 录 Blog Links Remarks Example Blog Links DalNur | 博客总目录 Python语言 SAP2000 二次开发 -- 概述 Python语言 SAP200 ...

  6. solidworks api二次开发实例详解_Solidworks开发语言对比及分析

    很多初学Solidworks二次开发的同学,也许都会纠结使用何种语言进行二次开发.对于Solidworks二次开发的语言,官方有VBA,VB.NET,C#以及C++,四种语言. 用户通常会有如下疑问, ...

  7. python对abaqus本构二次开发_基于Python的Abaqus二次开发实例讲解

    第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...

  8. oa java 二次开发_泛微OA ecology 二次开发实例 开发完整.doc

    泛微OA ecology 二次开发实例 开发完整 二次开发培训文档 ECOLOGY系统框架结构 主要的程序结构 Ecology Classbean 存放编译后的CLASS文件 js 系统中使用的JAV ...

  9. OpenSees二次开发实例02

    一个记录器的二次开发过程 前言 过程 结语 前言 本文介绍了一个源代码中附带的记录器的二次开发过程,记录器的h和cpp文件是源代码自带的.这次花费了我3天的时间,才实现了记录器的添加. 过程 本记录器 ...

最新文章

  1. 怎么编写段错误(Segmentation fault)的程序
  2. 网络安全与机器学习(二):网络安全任务如何结合机器学习?
  3. Mel滤波器组的设计与实现(基于MATLAB和Python)
  4. MyBatis——动态SQL语句——if标签和where标签复合使用
  5. 【堆】【DP】Niyaz and Small Degrees(luogu 7600[APIO 2021 T3]/luogu-CF1119F)
  6. python需要的开发特点_Python编程语言特征
  7. SAP License:SAP成本收集器两则
  8. 基于Angular5和WebAPI的增删改查(一)
  9. solaris 查看CPU资源占用情况!
  10. 如何把XPS格式文档转换为PDF?
  11. 业余剪辑——从拍摄到剪辑到加字幕
  12. pandas统计个数
  13. 网页版OneDriver登录,解决OneNote同步不准确问题(需上网)
  14. 金融企业如何构建有效的数据分析体系?1000+案例经验汇总
  15. Revit土建软件的功能,【顶部对齐】【墙齐梁板】【快速切换材质】等等
  16. 怎么把视频压缩成表情包?如何把视频做成GIF动图
  17. 未来的计算机 展望未来作文,展望未来作文(通用10篇)
  18. 自定义View实战(一) 汽车速度仪表盘
  19. 计算机开机密码有几成,电脑密码设置有哪些类型 电脑开机密码忘了怎么解锁...
  20. 小程序如何逐渐改变我的手机使用习惯?

热门文章

  1. Python+django网页设计入门(12):使用Bootstrap和jQuery
  2. Python科学计算库numpy中的add运算
  3. 解析 URL Params 为对象
  4. 力扣429. N 叉树的层序遍历(JavaScript)
  5. leanote 支持php,Leanote source leanote源码导读
  6. 输入法快捷键_[秒杀必备]搜狗输入法自定义短语快捷键设置
  7. mysql创建临时表 主键_MySQL中临时表的基本创建与使用教程
  8. 多关卡连连看php源码_奇怪的连连看ios版是一款非常好玩的手机消除闯关游戏,奇怪的连连看采用了最经典的三消玩法,游戏中有着非常多的游戏关卡,是一...
  9. mongo3.5 java cursor,Spring Data MongoDB-需要'cursor'选项
  10. C语言丨栈(一):顺序栈