阅读(2424) (0)

VBA从顺序文件中读取字符

2016-12-04 17:38:16 更新

假设你的程序需要检查文件Autoexec.bat里出现了多少个冒号,你可以使用函数Input来返回特定的字符数,而不必读取整行。接下来,If语句用来比较获取的字符和你寻找的字符。在写过程之前,我们来看看函数Input的语法:

Input(number, [#]filenumber)

Input函数的两个参数都是必须的,number明确你要读取的字符数,而filenumber是Open语句用来打开文件的同一个数字。Input函数返回所有读取的字符,包括逗号,回车,文件结束字符,引号和前导空格。


1. 在SeqFile模块里输入下述过程Colons:

Sub Colons()
Dim counter As Integer
Dim char As String
counter = 0
Open "C:\Autoexec.bat" For Input As #1
Do While Not EOF(1)
char = Input(1, #1)
If char = ":" Then
counter = counter + 1
End If
Loop
If counter <> 0 Then
MsgBox "Characters found: " & counter
Else
MsgBox "The specified character has not been found."
End If
Close #1
End Sub

2. 逐句执行该过程


3. 将冒号换成其它你想寻找的字符并且重新执行该程序。Input函数允许你返回顺序文件的任何字符。如果你使用VB函数LOF作为Input函数的第一个参数时,你将能够快速地读取顺序文件里的内容,而不需要在整个文件上循环。LOF函数返回一个文件上的字节数。每个字节对应了文本文件里的一个字符。过程ReadAll将文件System.ini的内容读取到立即窗口里:


除了将文件内容打印到立即窗口之外,你还可以将其读取到一个文本框并且放置到工作表中去(见图8-2):

Sub WriteToTextBox()
Dim mysheet As Worksheet
Set mysheet = ActiveWorkbook.Worksheets(1)
On Error GoTo CloseFile
Open "C:\WINNT\System.ini" For Input As #1
mysheet.Shapes(1).Select
Selection.Characters.Text = Input(LOF(1), #1)
CloseFile:
Close #1
End Sub



图8-2 文件TDate.ini(原文为System.ini)的内容显示在工作表中的文本框里


在你运行上面的程序之前,你得在工作表里画一个文本框。注意,On Error GoTo CloseFile语句激活错误捕捉,如果错误在程序的执行过程中发生了,就会立即跳到CloseFile标签处,Close #1

语句无论有无错误发生都会被执行。