数据载入中,请稍等...
http://blog.gz-auto.com/
数据载入中,请稍等...
博客公告
数据载入中,请稍等...
时间记忆
数据载入中,请稍等...
博客登陆
数据载入中,请稍等...
最新日志
数据载入中,请稍等...
最新评论
数据载入中,请稍等...
最新留言
数据载入中,请稍等...
博客相册
博客好友
数据载入中,请稍等...
友情连接
博客统计
数据载入中,请稍等...
htm文本转为txt文本的函数代码 | 2007-10-26 13:41:00
转换的规则是:
1.如果提取的字符是“>”,那么就对它后面的字符进行分析:如果是汉字、英文空格、回车换行符或
“(”、“&”等,就从这里开始接收,直到提取的字符是“<”才停止接收。
2.整个文件接收完了后,还要删除其中的html标记。这些标记在有的源htm文件上有,有的源htm文件没
有。当然,如果还有我没有写上的标记,请自行添加转换代码(这些标记均转换为长度为0的空字符)。
3.最后还要处理一下换行符。我们知道,在txt文件中,是回车符与换行符联用的,而在htm文件中,大
多数情况下,是单独使用换行符,在将htm文本转为txt文本后,最好也将单独的换行符转为回车符与换
行符联用的形式,以符合一般的习惯,当然,不转换问题也不大。
还有一个<br>标记问题,在htm文档中,这是一个回车换行标记,要是在一个htm文档中,既有换行
符chr(10)又有<br>标记,那么在函数代码中声明变量后,应使用
“ST = Replace(ST, "<BR>", Chr$(10))”句式将其转换为换行符,请自行添加代码。
说明一下:本函数适用于转换从中文网站下载的文学类型htm文档,其它类型的htm文档未测试。
下面是函数代码:
Function HtmToTxt(ByVal st As String) As String
On Error GoTo Err1
Dim Dat1() As Byte, Dat2() As Byte
Dim k1 As Long, k2 As Long, L As Long, J As Integer
Dat1 = StrConv(ST, vbFromUnicode): L = UBound(Dat1): ReDim Dat2(L * 2): ST = ""
For k1 = 0 To L
If Dat1(k1) = 62 Then '">"
k1 = k1 + 1: If k1 >= L Then Exit For
J = Dat1(k1)
If J = 13 Or J = 10 Then k1 = k1 + 1: J = Dat1(k1)
If J > 126 Or J = 32 Or J = 13 Or J = 10 Or J = 40 Or J = 38 Then
Do
Dat2(k2) = Dat1(k1): k1 = k1 + 1: k2 = k2 + 1: If k1 >= L Then Exit For
Loop Until Dat1(k1) = 60 '"<"
End If
End If
Next
ReDim Preserve Dat2(k2 - 1)
ST = Dat2: ReDim Dat1(0), Dat2(0)
ST = StrConv(ST, vbUnicode): ST = UCase(ST)
ST = Replace(ST, "&NBSP;", "")
ST = Replace(ST, "&", "")
ST = Replace(ST, """, "")
ST = Replace(ST, "<", "")
ST = Replace(ST, ">", "")
ST = Replace(ST, "&MIDDOT;", "")
ST = Replace(ST, vbCrLf, Chr$(10))
ST = Replace(ST, Chr$(10), vbCrLf)
Err1:
If Err.Number = 0 Then HtmToTxt = st
End Function
1.如果提取的字符是“>”,那么就对它后面的字符进行分析:如果是汉字、英文空格、回车换行符或
“(”、“&”等,就从这里开始接收,直到提取的字符是“<”才停止接收。
2.整个文件接收完了后,还要删除其中的html标记。这些标记在有的源htm文件上有,有的源htm文件没
有。当然,如果还有我没有写上的标记,请自行添加转换代码(这些标记均转换为长度为0的空字符)。
3.最后还要处理一下换行符。我们知道,在txt文件中,是回车符与换行符联用的,而在htm文件中,大
多数情况下,是单独使用换行符,在将htm文本转为txt文本后,最好也将单独的换行符转为回车符与换
行符联用的形式,以符合一般的习惯,当然,不转换问题也不大。
还有一个<br>标记问题,在htm文档中,这是一个回车换行标记,要是在一个htm文档中,既有换行
符chr(10)又有<br>标记,那么在函数代码中声明变量后,应使用
“ST = Replace(ST, "<BR>", Chr$(10))”句式将其转换为换行符,请自行添加代码。
说明一下:本函数适用于转换从中文网站下载的文学类型htm文档,其它类型的htm文档未测试。
下面是函数代码:
Function HtmToTxt(ByVal st As String) As String
On Error GoTo Err1
Dim Dat1() As Byte, Dat2() As Byte
Dim k1 As Long, k2 As Long, L As Long, J As Integer
Dat1 = StrConv(ST, vbFromUnicode): L = UBound(Dat1): ReDim Dat2(L * 2): ST = ""
For k1 = 0 To L
If Dat1(k1) = 62 Then '">"
k1 = k1 + 1: If k1 >= L Then Exit For
J = Dat1(k1)
If J = 13 Or J = 10 Then k1 = k1 + 1: J = Dat1(k1)
If J > 126 Or J = 32 Or J = 13 Or J = 10 Or J = 40 Or J = 38 Then
Do
Dat2(k2) = Dat1(k1): k1 = k1 + 1: k2 = k2 + 1: If k1 >= L Then Exit For
Loop Until Dat1(k1) = 60 '"<"
End If
End If
Next
ReDim Preserve Dat2(k2 - 1)
ST = Dat2: ReDim Dat1(0), Dat2(0)
ST = StrConv(ST, vbUnicode): ST = UCase(ST)
ST = Replace(ST, "&NBSP;", "")
ST = Replace(ST, "&", "")
ST = Replace(ST, """, "")
ST = Replace(ST, "<", "")
ST = Replace(ST, ">", "")
ST = Replace(ST, "&MIDDOT;", "")
ST = Replace(ST, vbCrLf, Chr$(10))
ST = Replace(ST, Chr$(10), vbCrLf)
Err1:
If Err.Number = 0 Then HtmToTxt = st
End Function
超音速工作室 版权所有