用VB實現多文件查找與替換功能
發表于:2007-07-14來源:作者:點擊數:
標簽:
文摘: 文件中特定字符串的尋找與替換是一種極其常見的操作,在Win95中,可以很容易地使用寫字板、Word等軟件的替換功能在某個文件中完成尋找替換的工作,而如果要在多個文件中進行尋找替換,則需費一翻精力。針對這一問題,筆者用Visual Basic 5.0編制了一
文摘:
文件中特定字符串的尋找與替換是一種極其常見的操作,在Win95中,可以很容易地使用"寫字板"、"Word"等軟件的"替換"功能在某個文件中完成尋找替換的工作,而如果要在多個文件中進行尋找替換,則需費一翻精力。針對這一問題,筆者用Visual Basic 5.0編制了一個小程序,使用它可以快速地完成在多個文件中查找與替換的任務。
正文:
眾所周知,文本文件中特定字符串的尋找與替換是一種極其常見的操作,在Win95中,可以很容易地使用"寫字板"、"Word"等軟件的"替換"功能在某個文件中完成尋找替換的工作,可是如果想在很多文件中查找某個字符串并進行替換就不是一件輕松的事情了,如果你沒有足夠的耐心,恐怕是無法完成這個工作的。而在平時的學習工作中又經常會遇到需要在多個文件中進行尋找替換的情況,特別是從Inte
.net上大量
下載網頁后,經常要對下載的頁面做一些簡單的批量修改,如將太小的字體變大、將刺眼的背景色變成柔和的利于常時間瀏覽的顏色等。
針對這一問題,筆者用Visual Basic 5.0編制了一個小程序,使用它可以快速地完成在多個文件中查找與替換的任務。
一、關鍵技術說明
為完成上述任務,主要有下面兩個問題需要解決:
1、如何在一個文件中進行字符串的查找與替換;
解決這個問題的基本思路是將要處理的文件讀入內存,對文件進行掃描,找出匹配的字符串,然后進行替換。這一工作我們可以借助于RichTextBox控件來完成。
首先使用RichTextBox控件的LoadFile方法將文件讀入文本框,然后用Find方法在 RichTextBox 控件中搜索給定的字符串,在找到匹配的字符串后,可以通過設定SelStart、SelLength屬性選中搜索文本,最后將替換字符串賦值給SelText,這樣就完成了一次尋找替換的任務。重復上述過程,即可將文件中所有匹配的字符串替換掉。
2、如何處理多個文件
在
VB中有多種方法可以用來獲取文件名列表,如使用FileListBox控件、CommonDialog控件或使用OLE拖動,這里我們采用CommonDialog控件來實現。
在使用CommonDialog控件之前,首先要進行一些設置工作:將Flags屬性設定為 cdlOFNAllowMultiselect,即允許選擇多個文件;根據具體需要設置Filter屬性來決定"打開文件"對話框允許顯示的文件類型;給MaxFileSize屬性賦予較大的值,以便FileName屬性可容納較多的文件名。設置完成后調用ShowOpen即可顯示"打開文件"對話框讓用戶選擇文件,在對話完畢后檢查FileName屬性以獲取選中的文件名。
需要注意的是,CommonDialog控件將用戶選中的所有文件名都保存在FileName這個簡單字符型屬性中,文件名之間用空格分開,因此在進行替換處理之前必須首先用程序將每個文件名取出。
二、程序實例
1、窗體布局
新建一個工程,在Form1上放置兩個命令按鈕cmdChooseFiles、cmdOk,Caption屬性分別為"選擇文件"和"開始尋找替換";放置兩個標簽,Caption分別為"搜索字符串"和"替換字符串";放置兩個文本框txtSearch和txtReplace;放置一個RichTextBox控件和一個CommonDialog控件,控件名取缺省名即可。窗體布局如下圖:
2、程序代碼
為Form1添加如下代碼:
Dim FileNames() As String '文件名列表數組,下標從1開始
Dim FileCount As Long '文件名列表中的文件名總數
Private Sub cmdChooseFiles_Click()
Dim i As Long,y As Long,Dim z As Long
With CommonDialog1
.Flags = cdlOFNAllowMultiselect '允許選擇多個文件
.Filter = "HTM Files|*.HTM" '只顯示HTM文件,可根據需要改變
.MaxFileSize = 10000 'FileName屬性的最大長度,可根據需要改變
.ShowOpen '顯示"打開文件"對話框
If .filename = "" Then
'如選擇了"取消"按鈕,則將FileCount置為0并返回
FileCount = 0
Exit Sub
End If
.filename = .filename & " " '在FileName最后添加一個空格,以便處理
'以下從FileName屬性中逐個讀取文件名,并放入FileNames數組中
z = 1
y = 0
For i = 1 To Len(.filename)
i = InStr(z, .filename, " ")
If i = 0 Then
Exit For
End If
ReDim Preserve FileNames(y)
FileNames(y) = Mid(.filename, z, i - z)
If y > 0 Then '如有多個文件,則在每個文件名前加上完整的路徑
FileNames(y) = FileNames(0) & "\" & FileNames(y)
End If
z = i + 1
y = y + 1
Next i
If y = 1 Then '如FileName只包含一個文件名,則將其賦給FileName(1)
'并將FileCount置為1
ReDim Preserve FileNames(1)
FileNames(1) = FileNames(0)
FileCount = 1
Else '否則根據文件數確定FileCount的值
FileCount = y - 1
End If
End With
End Sub
Private Sub cmdOk_Click()
Dim i As Long
Dim SearchString As String '搜索字符串
Dim ReplaceString As String '替換字符串
Dim StartPosition As Long '搜索字符串在文件中出現的位置
Dim SearchLength As Long '搜索字符串長度
SearchString = Trim(txtSearch)
ReplaceString = Trim(txtReplace)
SearchLength = Len(SearchString)
With RichTextBox1
For i = 1 To FileCount '以下依次處理FileNames數組中的文件
RichTextBox1.LoadFile FileNames(i), rtfText '讀入文件
StartPosition = .Find(SearchString) '尋找搜索字符串
If StartPosition <> -1 Then '如果找到,則執行替換操作
.SelStart = StartPosition
.SelLength = SearchLength
.SelText = ReplaceString
.SaveFile FileNames(i), rtfText '寫入文件
End If
Next i
End With
MsgBox "轉換結束!",
vbExclamation
End Sub
3、程序說明
(1)運行程序后,單擊"選擇文件"按鈕選擇文件,并分別輸入搜索和替換字符串,然后單擊"開始尋找替換"按鈕,即可自動進行工作。
(2)由于篇幅有限,程序沒有進行任何錯誤處理,實際使用前,應加入必要的錯誤處理代碼,如:在未選中文件前、未輸入搜索和替換字符串前使"開始尋找替換"按鈕失效;在某個文件中沒有找到搜索字符串時給予提示并跳過該文件等。
(3)可在程序中加入進度指示條(可使用ProgressBar控件),使界面更加友好。
(4)程序對每個文件僅替換第一個匹配的字符串,如需要替換所有匹配的字符串,只需加入簡單幾句代碼即可實現。
(5)本程序用Visual Basic 5.0編寫,在Pwin95、Pwin97環境下運行正常。
原文轉自:http://www.anti-gravitydesign.com