第7章 字符串处理函数
在前面两章中分别介绍了VB中的基本函数和日期函数,通过前面两章的介绍,希望读者能够熟练掌握这些函数的用法。除此之外,在编程过程中,字符串的使用频率也很高,本章就来介绍一些字符串的处理函数。
7.1 Filter过滤数组中的字符串
字符串在编程过程中的变化多种多样,因此关于字符串处理的函数也是多种多样。本节首先介绍一种可以从很多字符串中过滤出需要的字符串的函数——Filter的应用实例,即过滤输入的文本。
技术要点
在本实例中主要使用的技术是Filter函数。该函数主要根据指定的筛选条件,从一个已知数组中筛选出满足条件的字符串数组子集,具体语法如下:
Filter (Inputstrings,Value[,Include[,compare]])
其中各函数的含义如下:
●参数Inputstrings表示要执行搜索的一维字符串数组。
●参数Value表示筛选条件,即要搜索的字符串。
●参数Include表示返回的子串是否包含Value字符串。如果包含,则是True,Filter函数返回的是包含Value子字符串的数组子集;否则,则是False,Filter返回的是不包含Value子字符串的数组子集。
●参数compare表示字符串比较类型。当compare=vbUseCompareOption时,表示使用Option Compare语句的设置值来执行比较;当compare=vbBinaryCompare时,表示执行二进制比较;当compare=vbTextCompare时,表示执行文字比较;当compare=vbDatabaseCompare时,表示基于数据库信息进行比较。
实现代码
Option Explicit Dim Rslt,Prt As Variant '定义两个可变型变量 '过滤按钮的Click事件 Private Sub CmdFilter_Click() Dim Str(6)As String '定义一个字符串数组变量 '分别给数组变量赋初值 Str(0)= "Abcdefgh" '给数组第1个元素赋值为"Abcdefgh" Str(1)= "cefir" '给数组第2个元素赋值为"cefir" Str(2)= "nihao" '给数组第3个元素赋值为"nihao" Str(3)= "hello" '给数组第4个元素赋值为"hello" Str(4)= "你好!" '给数组第5个元素赋值为"你好!" Str(5)= "我们都是abc!" '给数组第6个元素赋值为"我们都是abc!" Str(6)= "学英语从abc开始!" '给数组第7个元素赋值为"学英语从abc开始!" Rslt=Filter(Str,"abc",True,vbTextCompare) '过滤数组中带有"abc"字符串的子集 TxtShow.Text = "" '置文本框为空 For Each Prt In Rslt '对于数组中每个元素执行的操作 TxtShow.Text = TxtShow.Text & vbCrLf & Prt '在文本框中显示过滤后的数组元素 Next End Sub 'Form窗体的Click事件 Private Sub Form_Click() Dim i As Integer '定义一个整型变量 Dim StrM(5)As String '定义一个字符串数组变量 For i = 0 To 5 StrM(i)= "我是" & i & "班的学生。" '分别给数组变量赋初值 Next i Rslt=Filter(StrM,"学生",True,vbTextCompare) '过滤数组中带有"学生"字符串的子集 For Each Prt In Rslt '对于数组中每个元素执行的操作 TxtShow.Text=TxtShow.Text&vbCrLf & Prt '在文本框中显示过滤后的数组元素 Next End Sub
单击工具栏中的保存按钮,保存工程,然后单击工具栏中的启动按钮,运行工程。当单击当前窗体时,程序的运行结果如图7.1所示。当单击“过滤”按钮时,程序的运行结果如图7.2所示。
图7.1 单击窗体的运行界面图
图7.2 单击过滤按钮的运行界面图
然后单击工具栏中的结束按钮,或者单击运行窗口的关闭按钮,结束程序的运行。
源程序解读
(1)代码首先定义了两个可变型变量Rslt和Prt,分别表示过滤后的字符串集合和遍历集合的元素变量。
(2)在Form_ Click()事件中,首先定义了一个整型变量i和一个字符串数组变量StrM (5),分别表示循环变量和过滤数组。然后运用For循环语句给字符串数组赋初值。接着由Filter函数从数组中过滤带有“学生”字符串的数组元素。最后,由For Each循环语句变量过滤后的字符串集合,并把结果由“TxtShow”文本框显示出来。
(3)当单击“CmdFilter”命令按钮时,就触发CmdFilter_ Click()事件。在该事件中,首先定义一个字符串数组变量Str(6),表示过滤数组。然后直接给数组中的每个元素赋初值。接着由Filter函数从数组中过滤带有“学生”字符串的数组元素。最后,由For Each循环语句变量过滤后的字符串集合,并把结果由“TxtShow”文本框显示出来。
7.2 LTrim除去字符串左边的空白字
在上一节中介绍了,字符串的过滤函数Filter,该函数主要从一个集合中根据选择条件过滤出一个子集。本节要介绍另外一种去除字符串中左边空白字符的函数——LTrim的应用实例,即去除输入字符串左边的空格。
技术要点
本实例中主要用到的技术是LTrim函数。该函数主要用于去掉字符串左边的空格,具体语法为:
LTrim (String)
其中,参数String表示任何有效的字符串表达式,如果String为空,则返回值为Null。
实现代码
Option Explicit Dim TrimStr As String '定义字符串变量 '去除字符串中空格的事件 Private Sub Command1_Click() TrimStr = LTrim(TrimStr) '去除字符串左边的空格 TxtShowE.Text = TrimStr 显示去除空格后的字符串 End Sub Private Sub Form_Load() TrimStr = " 我们都是学生! " '赋初始字符串 TxtShowS.Text = TrimStr '显示初始字符串 End Sub
按Ctrl+S组合键,保存工程,然后按F5键运行工程。当单击启动按钮后,程序的运行结果如图7.3所示。当单击“去除字符串中的开头空格”按钮时,程序的运行结果如图7.4所示。
图7.3 去除字符串左边空格前的界面图
图7.4 去除字符串左边空格后的界面图
源程序解读
(1)代码首先定义一个字符串变量TrimStr,用来存储进行操作的字符串。
(2)在Form_ Load()事件中,首先给字符串变量赋初始值:“ 我们都是学生! ”。然后,由“TxtShowS”文本框显示出来。当单击“Command1”命令按钮时会触发Command1的Click事件。
(3)在Command1_ Click()事件中,首先由LTrim函数去除字符串TrimStr左边的空格,并重新赋值给变量TrimStr。然后由“TxtShowE”文本框显示出来。
7.3 RTrim除去字符串右边的空白字
在上一节中介绍了去除字符串左边空白字的函数LTrim。本节接着介绍另外一种去掉字符串右边空白字的函数——RTrim的应用实例,即除去输入字符串右边的空格。在编程过程中,这两个函数往往成对出现。
技术要点
本实例运用的主要技术是RTrim函数和Len函数,主要功能和用法如下:
● RTrim函数,主要用于去除字符串右边的空格。
● Len函数,主要用于求字符串的长度。
RTrim函数的具体语法为:
RTrim (String)
Len函数的具体语法为:
Len (String | VarName)
其中,参数String表示任何有效的字符串表达式,如果 String为空,则返回0;参数VarName为任何有效的变量名,即存储字符串的变量。
实现代码
Option Explicit Dim TrimStr As String '定义字符串变量 '命令按钮CmdDel的Click事件 Private Sub CmdDel_Click() TrimStr = RTrim(TrimStr) '去除字符串变量右边的空格 TxtShowA.Text = TrimStr '显示去除空格后的字符串 TxtShowAL.Text = Len(TrimStr) '显示去除空格后的字符串长度 End Sub 'Form窗体的Load事件 Private Sub Form_Load() TrimStr = " 我们都是学生! " '初始化字符串 TxtShowB.Text = TrimStr '显示去除空格前的字符串 TxtShowBL.Text = Len(TrimStr) '显示去除空格前的字符串长度 End Sub
按Ctrl+S组合键,保存工程,然后按F5键运行工程。当单击启动按钮后,程序的运行结果如图7.5所示。当单击“去除字符串中的结尾空格”按钮后,程序的运行结果如图7.6所示。
图7.5 去除字符串右边空格前的界面图
图7.6 去除字符串右边空格后的界面图
源程序解读
(1)代码首先定义一个字符串变量TrimStr,用来存储进行操作的字符串。
(2)在Form_ Load()事件中,首先给字符串变量赋初始值:“ 我们都是学生! ”。然后,由“TxtShowB”文本框显示出来,并由“TxtShowBL”文本框显示出字符串的长度。
(3)当单击“CmdDel”命令按钮时会触发CmdDel的Click事件。在该事件中,首先由RTrim函数去除字符串TrimStr右边的空格,并重新赋值给变量TrimStr。然后由“TxtShowA”文本框显示出来,并由“TxtShowAL”文本框显示出去掉空格后的字符串长度。
7.4 Trim函数除去字符串左右两边的空白字
在前面两小节中分别介绍了去除字符串左边空白字的函数LTrim和去除字符串右边空白字的函数RTrim,如果在编程过程中两者成对出现,说明字符串左右两边的空白字都需要去除。本节就介绍一种这样的函数——Trim的应用实例,即除去字符串左右两边的空格。
技术要点
本实例中主要运用的技术是Trim函数,该函数主要用于去除字符串左右两边的空格,具体语法为
Trim (String)
其中,参数String的含义与前面介绍的一样。
实现代码
Option Explicit Dim TrimStr As String '定义字符串变量 '命令按钮CmdDel的Click事件 Private Sub CmdDel_Click() TrimStr = Trim(TrimStr) '去除字符串两边的空格 TxtShowA.Text = TrimStr '显示去除空格后的字符串变量 TxtShowAL.Text = Len(TrimStr) '显示去除空格后的字符串变量长度 End Sub '窗体Form的Load事件 Private Sub Form_Load() TrimStr = " 我们都是学生! " '初始化字符串变量 TxtShowB.Text = TrimStr '显示去除空格前的字符串变量 TxtShowBL.Text = Len(TrimStr) '显示去除空格前的字符串变量长度 End Sub
按Ctrl+S组合键,保存工程,然后按F5键,运行工程。当单击启动按钮后,程序的运行结果如图7.7所示。单击“去除字符串中的结尾空格”按钮后,程序的运行结果如图7.8所示。
图7.7 去除字符串左右两边空格前的界面图
图7.8 去除字符串左右两边空格后的界面图
源程序解读
(1)代码首先定义一个字符串变量TrimStr,用来存储进行操作的字符串。
(2)在Form_ Load()事件中,首先给字符串变量赋初始值:“ 我们都是学生! ”。然后由“TxtShowB”文本框显示出来,并由“TxtShowBL”文本框显示出字符串的长度。
(3)当单击“CmdDel”命令按钮时会触发 CmdDel的 Click事件。在该事件中,首先由Trim函数去除字符串 TrimStr左右两边的空格,并重新赋值给变量 TrimStr。然后由“TxtShowA”文本框显示出来,并由“TxtShowAL”文本框显示出去掉空格后的字符串长度。
7.5 InStrRev查找字符串的位置
在前面小节中分别介绍了去除字符串左边空格的函数LTrim和去除字符串右边空格的函数RTrim以及去除字符串左右两边空格的函数Trim,这三个函数各有利弊,在编程过程中要合理使用。本节介绍另外一种字符串处理的函数——InStrRev的应用实例,即查找指定字符串中指定字符的位置。
技术要点
本节实例中主要使用的技术是InStrRev函数。该函数主要用于查找一个字符串在另一个字符串中出现的位置,查找的顺序是从字符串的末尾开始。具体语法为:
InStrRev(String1,String2 [,Start [,Compare]])
其中各参数的含义如下:
●参数String1表示被查找的字符串。
●参数String2表示要查找的字符串。
●参数Start用来设置每次查找的开始位置,是数值表达式,如果省略,Start的值为-1,表示从上一个字符位置开始查找。
●参数Compare用来设定判断子字符串时运用的比较方法,具体的比较方式在前面已经介绍过。
实现代码
Option Explicit Private Sub CmbStr_Click() Dim StrVal As Long '定义长整型变量 Select Case CmbStr.ListIndex Case 0 StrVal = InStrRev("w.hao123.com","w") '查找字符w的位置 TxtFind.Text = "w.hao123.com" '显示被查找的字符串 TxtFindOut.Text = "w" '显示要查找的字符串 TxtWhere.Text = StrVal '显示要查找的字符串的位置 Case 1 StrVal = InStrRev("ww.hao123.com","w") '查找字符w的位置 TxtFind.Text = "ww.hao123.com" '显示被查找的字符串 TxtFindOut.Text = "w" '显示要查找的字符串 TxtWhere.Text = StrVal '显示要查找的字符串的位置 Case 2 StrVal = InStrRev("www.hao123.com","w") '查找字符w的位置 TxtFind.Text = "www.hao123.com" '显示被查找的字符串 TxtFindOut.Text = "w" '显示要查找的字符串 TxtWhere.Text = StrVal '显示要查找的字符串的位置 End Select End Sub '初始化组合框,添加被查找的字符串 Private Sub Form_Load() CmbStr.AddItem "w.hao123.com" '给组合框添加"w.hao123.com" CmbStr.AddItem "ww.hao123.com" '给组合框添加"ww.hao123.com" CmbStr.AddItem "www.hao123.com" '给组合框添加"www.hao123.com" End Sub
按Ctrl+S组合键,保存工程,然后按F5键,运行工程。当选择组合框中的“w.hao123.com”项,并查找字符“w”时,程序的运行结果如图7.9所示。当选择组合框中的“ww.hao123.com”项,并查找字符“w”时,程序的运行结果如图7.10所示。
图7.9 第一种选择被查字符串的界面图
图7.10 第二种选择被查字符串的界面图
源程序解读
(1)在Form_ Load()事件中,初始化“CmbStr”组合框。运用Additem方法分别添加被查字符串的值:“w.hao123.com”、“ww.hao123.com”、“www.hao123.com”。
(2)当单击“CmbStr”组合框时,就触发CmbStr的Click事件。
(3)在CmbStr_ Click()事件中,使用Select Case语句,根据CmbStr的ListIndex属性的值,分别运用InStrRev函数执行在被选择的字符串中查找字符串“w”的操作。并且由文本框分别显示被查找的字符串,要查找的字符串以及要查找的字符串的位置。
7.6 String重复指定字符串中的字符
在上一节中介绍了在一个字符串中查找另一个字符串函数InStrRev,这个函数在求子串时非常有用。本节接着介绍一种字符串处理函数——String的应用实例,即按照设定的数字输出对应的字符。
技术要点
本实例中使用的主要技术是String函数,该函数主要是按照设定的数字,输出重复的指定字符的字符串。具体语法为:
String (Number,Character)
其中各参数的含义如下:
●参数Number用来设置输出字符的个数,即输出字符串的长度,数据类型是长整型,如果Number为空,则输出的字符串为Null。
●参数Character表示要输出的字符串表达式或字符的字符码,如果Character是多于一个字符的字符串,则输出的字符串是重复第一个字符的字符串。如果Character为空,则输出的字符串为Null。
实现代码
Option Explicit Private Sub CmbStr_Click() Dim MyStr As String '定义字符串变量 Select Case CmbStr.ListIndex Case 0 MyStr = String(10,"*") '输出字符* TxtStr.Text = "*" '显示输出的字符 TxtString.Text = MyStr '显示输出的字符串 Case 1 MyStr = String(10,42) '输出字符码为42的字符 TxtStr.Text = "字符码为" & "42" '显示选择的字符 TxtString.Text = MyStr '显示输出的字符串 Case 2 MyStr = String(20,"AB") '输出字符AB TxtStr.Text = "AB" '显示选择的字符 TxtString.Text = MyStr '显示输出的字符串 Case 3 MyStr = String(20,"567") '输出字符567 TxtStr.Text = "567" '显示选择的字符 TxtString.Text = MyStr '显示输出的字符串 End Select End Sub '初始化组合框,分别添加输出的字符 Private Sub Form_Load() CmbStr.AddItem "*" '给组合框添加"*" CmbStr.AddItem "字符码为42" '给组合框添加"字符码为42" CmbStr.AddItem "AB" '给组合框添加"AB" CmbStr.AddItem "567" '给组合框添加"567" End Sub
按Ctrl+S组合键,保存工程,然后按F5键运行工程。当选择组合框中的“*”选项时,程序的运行结果如图7.11所示。当选择组合框中的“字符码为42”选项时,程序的运行结果如图7.12所示。
图7.11 选择输出字符为*的界面图
图7.12 选择输出字符码为42的界面图
源程序解读
(1)在Form_ Load()事件中,初始化“CmbStr”组合框。运用Additem方法分别添加选择输出的字符:“*”、“字符码为42”、“AB”和“567”。
(2)当单击“CmbStr”组合框时,就触发CmbStr的Click事件。在该事件中,使用Select Case语句,根据CmbStr的ListIndex属性的值,分别运用String函数执行按照设定的输出数目输出选择的字符。并且由文本框分别显示选择的字符和输出的字符串。
7.7 运用Split函数进行字符分离
在前面的小节中,分别介绍了去除字符串中空格的函数和在字符串中查找子字符串的函数,这些函数都涉及到对已有字符串的处理。本节同样介绍一种对已有字符串的处理函数——Split的应用实例,即分离输入字符串中的空格。
技术要点
本节使用的主要技术是Split函数,该函数主要用于从已知字符串中分离出指定的子字符串,该子字符串以一维数组的形式输出。具体语法为:
Split (Expression [,delimiter [,count [,compare]]])
其中各参数的含义如下:
●参数Expression表示包含子字符串和分隔符的字符串表达式,如果Expression的长度为0,则函数的返回值是一个空数组。
●参数delimiter用于设置子字符串边界的字符串或字符,如果delimiter省略,则使用空格符作为分隔符。
●参数count表示要返回的子字符串数,如果 count = -1,则表示返回所有的子字符串。
●参数compare用来设定判断子字符串时运用的比较方法,具体的比较方式在前面已经介绍过。
实现代码
Option Explicit Dim TxtStr As String '定义一个字符串变量 '命令按钮CmdSplit的Click事件 Private Sub CmdSplit_Click() Dim MyString '定义可变型变量 Dim i As Integer '定义整型变量 Dim Counter As Integer '定义整型变量 Counter = 0 MyString = Split(TxtStr,,-1,1) '分离空格符 For i = 1 To UBound(MyString,1) TxtSL.Text = TxtSL.Text & vbCrLf & MyString(i) '显示分离后的数组元素 Counter = Counter + 1 '计数器加1 Next i TxtNumber.Text = Counter '显示分离后数组元素个数 End Sub Private Sub Form_Load() TxtStr = "012345610718614819" '初始化要分离的字符串 TxtSplit.Text = TxtStr '显示要分离的字符串 TxtSplitL.Text = Len(TxtStr) '显示要分离的字符串的长度 End Sub
按Ctrl+S组合键,保存工程,然后按F5键运行工程。当单击启动按钮后,程序的运行结果如图7.13 所示。单击“分离字符串中的空格”按钮后,程序的运行结果如图7.14所示。
图7.13 分离字符串前的界面图
图7.14 分离字符串后的界面图
源程序解读
(1)代码首先定义一个字符串变量TxtStr,用来存储进行分离操作的字符串。
(2)在Form_ Load()事件中,首先给字符串变量赋初始值:“012345610718614 819”。然后,由“TxtSplit”文本框显示出来,并由“TxtSplit”文本框显示出字符串的长度。
(3)当单击“CmdSplit”命令按钮时,就触发CmdSplit的Click事件。
(4)在CmdSplit_ Click()事件中,首先定义一个可变型变量MyString用来存储分离后的数组元素。两个整型变量i和Counter分别作为循环变量和计数器,并赋变量Counter的初始值为0。然后,由Split函数分离字符串中的空格,并把分离结果赋值给变量MyString。最后,运用For循环语句逐个的由“TxtSL”文本框显示出来分离后的数组元素。同时增加计数器的值,循环结束后由“TxtNumber”文本框显示计数器的值,即显示分离后数组的元素个数。
7.8 运用StrReverse函数进行反向输出字符串
在上一节介绍了分离字符串的函数Split,这个函数的用法非常巧妙,并与数组结合起来,希望读者能够灵活运用该函数。本节接着介绍另一种对字符串的处理函数——StrReverse的应用实例,即反向输出输入的字符串。
技术要点
在本实例中用到的主要技术是StrReverse函数,该函数主要将一个指定的字符串的字符顺序反向输出。具体语法为:
StrReverse(String)
其中参数String就是字符顺序要被反向的字符串,如果String为空,则函数返回的字符串为Null。
实现代码
Option Explicit Dim Mystr As String '定义字符串变量 '命令按钮CmdReverse的Click事件 Private Sub CmdReverse_Click() Mystr = StrReverse(Mystr) '反向字符串 TxtReverA.Text = Mystr '显示反向后的字符串 End Sub '窗体Form的Load事件 Private Sub Form_Load() Mystr = "Thank You!" '初始化反向的字符串 TxtShow.Text = Mystr '显示反向前的字符串 End Sub
单击工具栏中的保存按钮,保存工程,然后单击工具栏中的启动按钮,运行工程,程序的运行结果如图7.15所示。当单击“反向显示字符串”按钮后,程序的运行结果如图7.16所示。
图7.15 字符串反向前的界面图
图7.16 字符串反向后的界面图
然后单击工具栏中的结束按钮,或者单击运行窗口的关闭按钮,结束程序的运行。
源程序解读
(1)代码首先定义一个字符串变量Mystr,用来存储进行反向操作的字符串。
(2)在Form_ Load()事件中,首先给字符串变量Mystr赋初始值:“Thank You!”。然后由“TxtShow”文本框显示出来。
(3)当单击“CmdReverse”命令按钮时会触发CmdReverse的Click事件。
(4)在CmdReverse_ Click()事件中,首先由StrReverse函数把字符串进行反向输出操作,并重新赋值给变量Mystr,然后由“TxtReverA”文本框显示出来。
7.9 InStr查找第一个空格
在前面小节中介绍了在已知一个字符串中查找指定子字符串的函数InStrRev。本节介绍另外一种在已知字符串只查找子字符串的函数——InStr的应用实例,即查找指定字符串中的第一个空格。
技术要点
在本实例中用到的主要技术是InStr函数,该函数主要用来指定一个字符串在另一个字符串中最先出现的位置,具体语法为:
InStr ([Start,]String1,String2[,compare])
其中各参数的含义如下:
●参数Start设置每次查找的开始位置,如果省略,则从第一个字符的位置开始查找。
●参数String1表示被查找的字符串,即接受查找的字符串。
●参数String2表示需要查找的字符串。
●参数compare用来设定判断子字符串时运用的比较方法,具体的比较方式在前面已经介绍过。
实现代码
Option Explicit Private Sub CmbFind_Click() Dim MyFind As String '定义字符串变量 Dim SpaAddr As Long '定义长整型变量 Select Case CmbFind.ListIndex Case 0 MyFind = CmbFind.Tex '得到被要查找的字符串 SpaAddr = InStr(MyFind," ") '查找第一个空格的位置 TxtShow.Text = MyFind '显示被查找的字符串 TxtSpace.Text = SpaAddr '显示第一个空格的位置 Case 1 MyFind = CmbFind.Text '得到被要查找的字符串 SpaAddr = InStr(MyFind," ") '查找第一个空格的位置 TxtShow.Text = MyFind '显示被查找的字符串 TxtSpace.Text = SpaAddr '显示第一个空格的位置 Case 2 MyFind = CmbFind.Text '得到被要查找的字符串 SpaAddr = InStr(MyFind," ") '查找第一个空格的位置 TxtShow.Text = MyFind '显示被查找的字符串 TxtSpace.Text = SpaAddr '显示第一个空格的位置 Case 3 MyFind = CmbFind.Text '得到被要查找的字符串 SpaAddr = InStr(MyFind," ") '查找第一个空格的位置 TxtShow.Text = MyFind '显示被查找的字符串 TxtSpace.Text = SpaAddr '显示第一个空格的位置 End Select End Sub '初始化,在组合框中添加要查找的字符串 Private Sub Form_Load() CmbFind.AddItem "Thank You!" '给组合框赋值为"Thank You!" CmbFind.AddItem "ThankYou!" '给组合框赋值为"ThankYou!" CmbFind.AddItem " Thank You!" '给组合框赋值为"Thank You!" CmbFind.AddItem " Thank You!" '给组合框赋值为" Thank You!" End Sub
单击工具栏中的保存按钮,保存工程,然后单击工具栏中的启动按钮,运行工程。当选择组合框中的“Thank You!”选项时,程序的运行结果如图7.17所示。当选择组合框中的“ThankYou!”选项时,程序的运行结果如图7.18所示。
图7.17 选择查询字符串为Thank You!的界面图
图7.18 选择查询字符串为ThankYou!的界面图
然后单击工具栏中的结束按钮,或者单击运行窗口的关闭按钮,结束程序的运行。
源程序解读
(1)在Form_ Load()事件中,初始化“CmbFind”组合框。运用Additem方法分别添加被查找的字符:“Thank You!”、“ThankYou!”、“Thank You!”、“ Thank You!”。
(2)当单击“CmbFind”组合框时,就触发CmbFind的Click事件。
(3)在CmbFind_ Click()事件中,首先定义一个字符串变量MyStr用来存储被查找的字符串,一个长整型变量,用来存储查找到第一个空格的位置。然后,使用Select Case语句,根据CmbFind的ListIndex属性的值,分别运用InStr函数查找字符串中第一个空格的位置。并由“TxtShow”文本框和“TxtSpace”文本框分别显示选择的被查找的字符串和查找到的第一个空格的位置。
说明:可以看出InStr函数和InStrRev函数之间的差别是设定查找起始点的参数在语法中的位置不同。
7.10 字符串的字数统计
在前面小节中分别介绍了两个在字符串中进行查找操作的函数:InStrRev函数和InStr函数,并在上节对二者的区别进行了说明。本节再介绍一种在字符串中进行查找操作的函数——Mid的应用实例,即统计输入文档中的字符数。
技术要点
在本实例中用到的主要技术是Mid函数和DoEvents函数,主要功能和用法如下:
● Mid函数,主要用于从一个字符串的指定位置提取出指定数量的字符串。
● DoEvents函数,用于放弃操作,而使操作系统处理其他事情。
Mid函数的具体语法为:
Mid (String,Start[,Length])
其中,参数String表示接受查找的字符串表达式;参数Start用来设置提取子字符串的起始位置;如果Start大于Len(String),则函数返回Null;参数Length用来设置提取子字符串的长度;如果Length大于包括起始位置在内的String的长度,则函数返回的字符串到String的末尾为止。
DoEvents函数的具体语法为:
DoEvents()
实现代码
Option Explicit '打开我的文档事件 Private Sub CmdOpen_Click() With CommonDialog1 .InitDir = App.Path & "\文档" '设置文档路径 .Filter = "RTF文档|*.rtf" '过滤文件类型 .DefaultExt = ".rtf" '设置默认情况下的文件类型 .DialogTitle = "打开RTF文档" '设置打开文档对话框中的题目 .ShowOpen '打开文件 RichTextBox1.FileName = .FileName '将文档载入到Richtextbox控件中 End With End Sub '字数统计事件 Private Sub CmdStatic_Click() Dim i As Integer '定义整型变量 Dim CaStr As String '定义字符串变量 For i = 1 To Len(RichTextBox1.Text) If i Mod 20 Then DoEvents '放弃执行,使操作执行其他事情 CaStr = Mid(RichTextBox1,i,1) '获得分离后的字符 Select Case CaStr Case"a" To "z","A" To "Z" TxtLetter.Text=Val(TxtLetter.Text)+1 '统计文章中字母的个数 Case" " Txtspace.Text=Val(Txtspace.Text)+1 '统计文章中空格的个数 Case 0 To 9 TxtNumber.Text=Val(TxtNumber.Text)+1 '统计文章中数字的个数 Case Else TxtOther.Text = Val(TxtOther.Text)+ 1 '统计文章中其他字符的个数 End Select Next '统计总的个数 TxtSum.Text = Val(TxtLetter.Text)+ Val(Txtspace.Text)+ Val(TxtNumber.Text)+ Val(TxtOther.Text) End Sub '窗体Form的UnLoad事件 Private Sub Form_Unload(Cancel As Integer) Unload Me '卸载窗体 End Sub
单击工具栏中的保存按钮,保存工程,然后单击工具栏中的启动按钮,运行工程。当选择导入RTF文档时,程序的运行结果如图7.19所示。当导入RTF文档后,程序的运行结果如图7.20所示。当单击“字数统计”按钮时,程序的运行结果如图7.21所示。
图7.19 打开文档的界面图
图7.20 打开文档后的界面图
图7.21 统计结果的界面图
然后单击工具栏中的结束按钮,或者单击运行窗口的关闭按钮,结束程序的运行。
源程序解读
(1)当单击“CmdOpen”命令按钮时,就触发CmdOpen的Click事件。在CmdOpen_ Click ()事件中,运用“CommonDialog1”控件进行文档的打开操作。操作过程为:首先设置文档的打开路径。然后,设置打开文件类型。同时设置默认情况下的文件类型和设置打开文档对话框中的题目。最后,打开文件,并将打开的文件载入到Richtextbox控件中。
(2)当单击“CmdStatic”命令按钮时,就触发CmdStatic的Click事件。在该事件中,首先定义一个整型变量i,作为循环变量。一个字符串变量CaStr,用来存储分割后的字符。然后,运用For循环语句对打开文档进行统计操作。
(3)具体过程为:首先判断统计的字数是否是20的倍数。如果是,就放弃继续执行统计操作,改为执行其他事情;否则,由Mid函数得到其中指定的字符,并赋值给CaStr。然后运用Select Case语句,根据CaStr的数值,统计不同类型的字符,并把统计得到的结果由文本框显示出来,最后显示出所有字符的统计数字。
(4)在Form_ UnLoad()事件中,执行窗体的卸载操作。