明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索

[原创]获取MText中的可用字符

  [复制链接]
发表于 2004-6-27 16:45 | 显示全部楼层
本帖最后由 作者 于 2004-6-27 17:11:17 编辑

好帖子阿!



能不能再举出一个例子,将可能的格式特征字符都包括进去?最好再传一个dwg文件。
发表于 2004-6-27 18:24 | 显示全部楼层
本帖最后由 作者 于 2004-6-27 19:19:41 编辑

这些就是大部分格式符,另外还有的内容就是缩进格式和制表符格式:
以下函数已经改进支持缩进和制表符格式,还做了改进,不必做控件引用。
  1. Public Function GetMTextUnformatString(MTextString As String) As String
  2.        Dim s As String
  3.        Dim RE As Object
  4.        Set RE = ThisDrawing.Application.GetInterfaceObject("Vbscript.RegExp")
  5.       
  6.        RE.IgnoreCase = False
  7.        RE.Global = True
  8.        s = MTextString
  9.       
  10.        '替换\\字符
  11.        RE.Pattern = "\\\"
  12.        s = RE.Replace(s, Chr(1))
  13.        '替换\{字符
  14.        RE.Pattern = "\\{"
  15.        s = RE.Replace(s, Chr(2))
  16.        '替换\}字符
  17.        RE.Pattern = "\\}"
  18.        s = RE.Replace(s, Chr(3))
  19.       
  20.        '删除段落缩进格式
  21.        RE.Pattern = "\\pi(.[^;]*);"
  22.        s = RE.Replace(s, "")
  23.        '删除制表符格式
  24.        RE.Pattern = "\\pt(.[^;]*);"
  25.        s = RE.Replace(s, "")
  26.        '删除堆迭格式
  27.        RE.Pattern = "\\S(.[^;]*)(\^|#|\\)(.[^;]*);"
  28.        s = RE.Replace(s, "$1$3")
  29.        '删除字体、颜色、字高、字距、倾斜、字宽、对齐格式
  30.        RE.Pattern = "(

本帖子中包含更多资源

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

x
发表于 2004-6-28 12:11 | 显示全部楼层
看看我的代码怎么样。。。 Public Function 提取多行文字(文字串 As String)
Dim 多行文字1 As String
Dim 多行文字 As String
Dim 多行文字2 As String
Dim 数据(0 To 1)

Dim i As Integer

i = 0: 数据(0) = "": 多行文字1 = 文字串
处理:
Do Until Len(多行文字1) = 0
多行文字 = Left(多行文字1, 1)
If 多行文字 = "\" Then
多行文字2 = Mid(多行文字1, 2, 1)
Select Case 多行文字2
Case "\"
数据(0) = 数据(0) + "\"
Case "{"
数据(0) = 数据(0) + "{"
Case "}"
数据(0) = 数据(0) + "}"
Case "~" '插入不间断空格
数据(0) = 数据(0) + " "
Case "P" '结束段落
数据(0) = 数据(0) + vbCr
End Select
多行文字1 = Mid(多行文字1, 3): GoTo 处理
End If
If 多行文字 = "{" Then
数据(1) = Mid(多行文字1, 3, InStr(多行文字1, ";") - 3)
多行文字1 = Mid(多行文字1, InStr(多行文字1, ";") + 1): GoTo 处理
End If
If 多行文字 = "}" Then 多行文字1 = Mid(多行文字1, 2): GoTo 处理
数据(0) = 数据(0) + 多行文字: 多行文字1 = Mid(多行文字1, 2)
Loop
提取多行文字 = 数据
End Function
发表于 2006-2-7 17:24 | 显示全部楼层

mccad老大的函数不行啊。

无论是否引用控件,都没有对字符串做任何处理。

但是也没有报错

小弟用的是autocad2004,win2000 sp4

 

发表于 2007-12-5 15:29 | 显示全部楼层
好好研究一下。
 楼主| 发表于 2009-4-19 17:56 | 显示全部楼层
本帖最后由 作者 于 2009-4-19 20:23:27 编辑

不需替换\\\\用正则的方法
  1.         public static string GetMTextContents(string str)
  2.         {
  3.             string[] strs = str.Split(
  4.                     new string[] { "\\\" },
  5.                     StringSplitOptions.None);
  6.             for (int i = 0;i<strs.Length;i++)
  7.             {
  8.                 strs[i] = Regex.Replace(
  9.                         strs[i],
  10.                         @"(?<!\\)[{}]|\\[OLP\~]|\\[CFHTQWA][^;]*;",
  11.                         "",
  12.                         RegexOptions.IgnoreCase);
  13.                 strs[i] = Regex.Replace(
  14.                         strs[i],
  15.                         @"\\S(.*?)[/#\^](.*?)[;$]",
  16.                         "($1/$2)",
  17.                         RegexOptions.IgnoreCase);
  18.                 strs[i] = Regex.Replace(
  19.                         strs[i],
  20.                         @"\\([{}])",
  21.                         "$1");
  22.             }
  23.             str = string.Join("\", strs);
  24.             return str;
  25.         }
复制代码
发表于 2009-8-22 21:09 | 显示全部楼层

收藏

发表于 2011-10-20 22:47 | 显示全部楼层
{\fArial|b0|i0|c0|p32;A012-C035SI1202A\fSimSun|b0|i0|c134|p2; 下线银浆 }Ver.{\fSimSun|b0|i0|c134|p2;2} {\fSimSun|b0|i0|c134|p2;目数}:400 {\fSimSun|b0|i0|c134|p2;解析度:}25{\fSimSun|b0|i0|c134|p2;0}00{\fSimSun|b0|i0|c134|p2;-25400}  {\fSimSun|b0|i0|c134|p2;膜厚:
  1
10}-1{\fSimSun|b0|i0|c134|p2;2}u  \P{\fSimSun|b0|i0|c134|p2;角度:}22.5{\fSimSun|b0|i0|c134|p2;度 张力:}22~26N {\fSimSun|b0|i0|c134|p2;日期:}2011-{\fSimSun|b0|i0|c134|p2;09}-{\fSimSun|b0|i0|c134|p2;19}
发表于 2011-10-20 22:48 | 显示全部楼层
请问上面的 mtext 中的 |b0|i0|c134|p2 是什么意思?
发表于 2011-11-19 14:08 | 显示全部楼层
测试一下,真的还不错啊 谢谢啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-24 03:42 , Processed in 2.027563 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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