无痕 发表于 2004-6-27 16:45:00

本帖最后由 作者 于 2004-6-27 17:11:17 编辑

好帖子阿!



能不能再举出一个例子,将可能的格式特征字符都包括进去?最好再传一个dwg文件。

mccad 发表于 2004-6-27 18:24:00

本帖最后由 作者 于 2004-6-27 19:19:41 编辑

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

洋葱老爹 发表于 2004-6-28 12:11:00

看看我的代码怎么样。。。


Public Function 提取多行文字(文字串 As String)<BR>                       Dim 多行文字1 As String<BR>                       Dim 多行文字 As String<BR>                       Dim 多行文字2 As String<BR>                       Dim 数据(0 To 1)<BR>       <BR>                       Dim i As Integer<BR>                       <BR>                       i = 0: 数据(0) = "": 多行文字1 = 文字串<BR>处理:<BR>                       Do Until Len(多行文字1) = 0<BR>                                                       多行文字 = Left(多行文字1, 1)<BR>                                                       If 多行文字 = "\" Then<BR>                                                                                       多行文字2 = Mid(多行文字1, 2, 1)<BR>                                                                                       Select Case 多行文字2<BR>                                                                                                                       Case "\"<BR>                                                                                                                                                       数据(0) = 数据(0) + "\"<BR>                                                                                                                       Case "{"<BR>                                                                                                                                               数据(0) = 数据(0) + "{"<BR>                                                                                                                       Case "}"<BR>                                                                                                                                                       数据(0) = 数据(0) + "}"<BR>                                                                                                                       Case "~"                       '插入不间断空格<BR>                                                                                                                                                       数据(0) = 数据(0) + " "<BR>                                                                                                                       Case "P"                       '结束段落<BR>                                                                                                                                                       数据(0) = 数据(0) + vbCr<BR>                                                                                       End Select<BR>                                                                                       多行文字1 = Mid(多行文字1, 3): GoTo 处理<BR>                                                       End If<BR>                                                       If 多行文字 = "{" Then<BR>                                                                                       数据(1) = Mid(多行文字1, 3, InStr(多行文字1, ";") - 3)<BR>                                                                                       多行文字1 = Mid(多行文字1, InStr(多行文字1, ";") + 1): GoTo 处理<BR>                                                       End If<BR>                                                       If 多行文字 = "}" Then 多行文字1 = Mid(多行文字1, 2): GoTo 处理<BR>                                                       数据(0) = 数据(0) + 多行文字: 多行文字1 = Mid(多行文字1, 2)<BR>                       Loop<BR>                       提取多行文字 = 数据<BR>End Function<BR>

evaporated 发表于 2006-2-7 17:24:00

<P>mccad老大的函数不行啊。</P>
<P>无论是否引用控件,都没有对字符串做任何处理。</P>
<P>但是也没有报错</P>
<P>小弟用的是autocad2004,win2000 sp4</P>
<P>&nbsp;</P>

兰州人 发表于 2007-12-5 15:29:00

好好研究一下。

雪山飞狐_lzh 发表于 2009-4-19 17:56:00

本帖最后由 作者 于 2009-4-19 20:23:27 编辑

不需替换\\\\用正则的方法      public static string GetMTextContents(string str)
      {
            string[] strs = str.Split(
                  new string[] { "\\\\" },
                  StringSplitOptions.None);
            for (int i = 0;i<strs.Length;i++)
            {
                strs = Regex.Replace(
                        strs,
                        @"(?<!\\)[{}]|\\|\\[^;]*;",
                        "",
                        RegexOptions.IgnoreCase);
                strs = Regex.Replace(
                        strs,
                        @"\\S(.*?)[/#\^](.*?)[;$]",
                        "($1/$2)",
                        RegexOptions.IgnoreCase);
                strs = Regex.Replace(
                        strs,
                        @"\\([{}])",
                        "$1");
            }
            str = string.Join("\\", strs);
            return str;
      }

5061220 发表于 2009-8-22 21:09:00

<p>收藏</p>

chubiao1126 发表于 2011-10-20 22:47:17

{\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}

chubiao1126 发表于 2011-10-20 22:48:29

请问上面的 mtext 中的 |b0|i0|c134|p2 是什么意思?

czb203 发表于 2011-11-19 14:08:33

测试一下,真的还不错啊 谢谢啊
页: 1 2 [3] 4
查看完整版本: [原创]获取MText中的可用字符