王朝网络
分享
 
 
 

用VB实现多文件查找与替换功能

王朝厨房·作者佚名  2007-01-04
宽屏版  字体: |||超大  

文摘:

文件中特定字符串的寻找与替换是一种极其常见的操作,在Win95中,可以很容易地使用"写字板"、"Word"等软件的"替换"功能在某个文件中完成寻找替换的工作,而如果要在多个文件中进行寻找替换,则需费一翻精力。针对这一问题,笔者用Visual Basic 5.0编制了一个小程序,使用它可以快速地完成在多个文件中查找与替换的任务。

正文:

众所周知,文本文件中特定字符串的寻找与替换是一种极其常见的操作,在Win95中,可以很容易地使用"写字板"、"Word"等软件的"替换"功能在某个文件中完成寻找替换的工作,可是如果想在很多文件中查找某个字符串并进行替换就不是一件轻松的事情了,如果你没有足够的耐心,恐怕是无法完成这个工作的。而在平时的学习工作中又经常会遇到需要在多个文件中进行寻找替换的情况,特别是从Internet上大量下载网页后,经常要对下载的页面做一些简单的批量修改,如将太小的字体变大、将刺眼的背景色变成柔和的利于常时间浏览的颜色等。

针对这一问题,笔者用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环境下运行正常。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有