用VB將Html轉換為文本文件
p align="center">如何將一個超文本文件Html文件格式轉換為Txt文本文件呢?這就是本文所要討論的內容了。我們都知道,超文本文件有很多的標記,如$#@60;Html$#@62;、$#@60;Head$#@62;、$#@60;Body$#@62;等等,在文本文件中,這些都是沒用的,我們要把它們都刪去,而且超文本文件還有很多不可見的內容,如用“$#@60;!--”、“--$#@62;”括起來的內容、Java腳本程序,這些在文本文件中也是不可用的,我們也要把它們都刪去。因此,我們可以得出這么一個結論:
一個簡單的Html轉換Txt程序的基本原理就是--將超文本文件不可視部分去掉,將超文本文件可視部分的內容寫到文本文件中去。
好了,有了理論就應該有些實際的東西了。轉換的步驟可以簡單地歸納為:
轉換的步驟可用VB的函數IsStr來實現,如下面的代碼可以去掉文本框Text3中超文本文件開頭到$#@60;/Head$#@62;標記部分的內容:
詳細的程序代碼請參看程序清單或源程序。這個轉換程序設計時考慮的是轉換規范的超文本文件,當要轉換的文件不夠標準(如:有$#@60;/head$#@62;而沒有$#@60;head$#@62;與之配對)的時候,轉換就不能完成。而且,這個例子只轉換了部分的超文本標記,還有許多的標記,如表單標記“FORM”并沒有被轉換,更多、更詳盡的功能就有待你完成了。
附程序清單:
Option Explicit
Private Sub Form_Load()
Private Sub Command1_Click()
Private Sub Command3_Click()
Private Sub Command2_Click()
一個簡單的Html轉換Txt程序的基本原理就是--將超文本文件不可視部分去掉,將超文本文件可視部分的內容寫到文本文件中去。
好了,有了理論就應該有些實際的東西了。轉換的步驟可以簡單地歸納為:
1、 去掉$#@60;head$#@62;部分的內容
2、 去掉$#@60;script$#@62;部分的Java腳本程序
3、 轉換$#@60;br為換行符
4、 轉換$#@60;/p$#@62;為換行符
5、 轉換和去掉其它所有的超文本標記
6、 轉換“$#@60;”為“<”符號
7、 轉換“$#@62;”為“>”符號
8、 轉換“&”為“&”符號
9、 轉換“ ”為空格符號
10、轉換“"”為引號
11、去掉轉換后開頭和結尾出現的所有空格符號
12、轉換完成
轉換的步驟可用VB的函數IsStr來實現,如下面的代碼可以去掉文本框Text3中超文本文件開頭到$#@60;/Head$#@62;標記部分的內容:
Do While InStr(1, LCase(Text3.Text), "$#@60;/head$#@62;") <> 0
Text3.SelStart = 0
Text3.SelLength = InStr(1, LCase(Text3.Text), "$#@60;/head$#@62;") + 6
Text3.SelText = ""
Loop
詳細的程序代碼請參看程序清單或源程序。這個轉換程序設計時考慮的是轉換規范的超文本文件,當要轉換的文件不夠標準(如:有$#@60;/head$#@62;而沒有$#@60;head$#@62;與之配對)的時候,轉換就不能完成。而且,這個例子只轉換了部分的超文本標記,還有許多的標記,如表單標記“FORM”并沒有被轉換,更多、更詳盡的功能就有待你完成了。
附程序清單:
Option Explicit
Private Sub Form_Load()
CommonDialog1.CancelError = TrueEnd Sub
Text3.Visible = False
Command1.Capti = "打開"
Command2.Caption = "轉換==$#@62;"
Command3.Caption = "保存"
Private Sub Command1_Click()
On Error Resume NextEnd Sub
Dim TextLine As String
CommonDialog1.Filter = "網頁|*.htm;*.html"
CommonDialog1.ShowOpen
If err $#@60;$#@62; 32755 Then
Text1 = ""Else
"打開文件
Open CommonDialog1.FileName For Input As #1
Do While Not EOF(1)
Line Input #1, TextLineLoop
Text1 = Text1 & Trim(TextLine)
Close #1
MsgBox "不能打開文件"End If
Private Sub Command3_Click()
On Error Resume NextEnd Sub
CommonDialog1.Filter = "文本文件|*.txt"
CommonDialog1.ShowSave
If err $#@60;$#@62; 32755 Then
Open CommonDialog1.FileName For Output As #1Else
Print #1, Text3
Close #1
MsgBox "不能保存文件"End If
Private Sub Command2_Click()
Dim txtStr As Stringerr:
On Error GoTo err
Form1.MousePointer = 11
Text3.Text = Text1.Text
DoEvents
Form1.Caption = "正在去掉$#@60;head$#@62;部分..."
"去掉$#@60;head$#@62;部分
Do While InStr(1, LCase(Text3.Text), "$#@60;/head$#@62;") $#@60;$#@62; 0
Text3.SelStart = 0Loop
Text3.SelLength = InStr(1, LCase(Text3.Text), "$#@60;/head$#@62;") + 6
Text3.SelText = ""
Form1.Caption = "正在去掉$#@60;script$#@62;部分..."
"去掉$#@60;script$#@62;部分
Do While InStr(1, LCase(Text3.Text), "$#@60;/script$#@62;") $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), "$#@60;script") - 1Loop
Text3.SelLength = InStr(1, LCase(Text3.Text), "$#@60;/script$#@62;") - Text3.SelStart + 9
Text3.SelText = ""
Form1.Caption = "正在轉換$#@60;br$#@62;為換行符..."
"轉換$#@60;br$#@62;為換行符
Do While InStr(1, LCase(Text3.Text), "$#@60;br$#@62;") $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), "$#@60;br$#@62;") - 1Loop
Text3.SelLength = 4
Text3.SelText = "" + vbCrLf
Form1.Caption = "正在轉換$#@60;p$#@62;$#@60;/p$#@62;為換行符..."
"轉換$#@60;/p$#@62;為換行符
Do While InStr(1, LCase(Text3.Text), "$#@60;/p$#@62;") $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), "$#@60;/p$#@62;") - 1Loop
Text3.SelLength = 4
Text3.SelText = "" + vbCrLf
Form1.Caption = "正在刪除Html標記..."
"去掉其它的Html標記
Do While InStr(1, LCase(Text3.Text), "$#@60;") $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), "$#@60;") - 1Loop
Text3.SelLength = InStr(1, LCase(Text3.Text), "$#@62;") - Text3.SelStart
Text3.SelText = ""
Form1.Caption = "正在轉換"$#@60;"為"$#@60;"..."
"轉換"$#@60;"為"$#@60;"
Do While InStr(1, LCase(Text3.Text), "$#@60;") $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), "$#@60;") - 1Loop
Text3.SelLength = 4
Text3.SelText = "$#@60;"
Form1.Caption = "正在轉換"$#@62;"為"$#@62;"..."
"轉換"$#@62;"為"$#@62;"
Do While InStr(1, LCase(Text3.Text), "$#@62;") $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), "$#@62;") - 1Loop
Text3.SelLength = 4
Text3.SelText = "$#@62;"
Form1.Caption = "正在轉換"&"為"&"..."
"轉換"&"為"&"
Do While InStr(1, LCase(Text3.Text), "&") $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), "&") - 1Loop
Text3.SelLength = 5
Text3.SelText = "&"
Form1.Caption = "正在轉換" "為空格符..."
"轉換" "為" "
Do While InStr(1, LCase(Text3.Text), " ") $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), " ") - 1Loop
Text3.SelLength = 6
Text3.SelText = " "
Form1.Caption = "正在轉換"""為引號..."
"轉換"""為引號
Do While InStr(1, LCase(Text3.Text), """) $#@60;$#@62; 0
Text3.SelStart = InStr(1, LCase(Text3.Text), """) - 1Loop
Text3.SelLength = 6
Text3.SelText = """"
"去掉前后空格符
Text2.Text = Trim$(Text3.Text)
Form1.Caption = "轉換成功!"
Form1.MousePointer = 0
Exit Sub
Form1.Caption = "轉換錯誤"End Sub
Form1.MousePointer = 0
MsgBox "轉換時出錯,請檢查你的源文件!"
Exit Sub