无痕
发表于 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> </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
测试一下,真的还不错啊 谢谢啊