1、Open 語句
語法:Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
其中access、lock、reclength為可選參數(shù),一般不用。
mode 指定打開文件的方式。有5種:
Input:以輸入方式打開,即讀取方式。
Output:以輸出方式打開,即寫入方式。
Append:以追加方式打開,即添加內(nèi)容到文件末尾。
Binary:以二進(jìn)制方式打開。
Random:以隨機(jī)方式打開,如果未指定方式,則以 Random 方式打開文件。
filenumber
說明:如果 pathname 指定的文件不存在,那么,在用 Append、Binary、Output、或 Random 方式打開文件時,可以建立這一文件。
示例:
Open "F:\TEST.txt" For Input As #1
Open "F:\TEST.xls" For Binary As #1
2、Close 語句
語法:Close [filenumberlist]
說明:打開文件后,必須在使用完后關(guān)閉文件。
示例:
Dim I, FileName
For I = 1 To 3
Next I
Close
3、Reset 語句
語法:Reset
功能:關(guān)閉所有用 Open 語句打開的磁盤文件。
說明:Reset 語句關(guān)閉 Open 語句打開的所有活動文件,并將文件緩沖區(qū)的所有內(nèi)容寫入磁盤。
示例:
Dim FileNumber
For FileNumber = 1 To 5
Next FileNumber
Reset
4、FreeFile 函數(shù)
語法:FreeFile[(rangenumber)]
功能:提供一個尚未使用的文件號。
示例:
Dim fnum As Integer
fnum = FreeFile
Open "F:\TEST.txt" For Input As #fnum
Close #fnum
5、EOF 函數(shù)
語法:EOF(filenumber)
功能:返回一個 Integer,它包含 Boolean 值 True,表明已經(jīng)到達(dá)為 Random 或順序 Input 打開的文件的結(jié)尾。
6、LOF 函數(shù)
語法:LOF(filenumber)
功能:返回一個 Long,表示用 Open 語句打開的文件的大小,該大小以字節(jié)為單位。
7、Loc 函數(shù)
語法:LOc(filenumber)
功能:返回一個 Long,在已打開的文件中指定當(dāng)前讀/寫位置。
8、Input # 語句
語法:Input #filenumber, varlist
功能:從已打開的順序文件中讀出數(shù)據(jù)并將數(shù)據(jù)指定給變量。
說明:通常用 Write # 將 Input # 語句讀出的數(shù)據(jù)寫入文件。為了能夠用 Input # 語句將文件的數(shù)據(jù)正確讀入到變量中,在將數(shù)據(jù)寫入文件時,要使用 Write # 語句而不使用 Print # 語句。使用 Write # 語句可以確保將各個單獨(dú)的數(shù)據(jù)域正確分隔開。
示例:
本示例使用 Input # 語句將文件內(nèi)的數(shù)據(jù)讀入兩個變量中。本示例假設(shè) TESTFILE文件內(nèi)含數(shù)行以 Write # 語句寫入的數(shù)據(jù);也就是說,每一行數(shù)據(jù)中的字符串部分都是用雙引號括起來,而與數(shù)字用逗號隔開,例如,("Hello", 234)。
Dim MyString, MyNumber
Open "TESTFILE" For Input As #1
Do While Not EOF(1)
Loop
Close #1
9、Write # 語句
語法:Write #filenumber, [outputlist]
功能:將數(shù)據(jù)寫入順序文件。
說明:通常用 Input # 從文件讀出 Write # 寫入的數(shù)據(jù)。
如果省略 outputlist,并在 filenumber 之后加上一個逗號,則會將一個空白行打印到文件中。多個表達(dá)式之間可用空白、分號或逗號隔開??瞻缀头痔柕刃?。
用 Write # 將數(shù)據(jù)寫入文件時將遵循幾個通用的約定,使得無論什么區(qū)域都可用 Input # 讀出并正確解釋數(shù)據(jù):
·在寫入數(shù)值數(shù)據(jù)時總使用句號作為十進(jìn)制分隔符。
·對于 Boolean 類型的數(shù)據(jù),或者打印 #TRUE# 或者打印 #FALSE#。無論在什么地區(qū),都不將 True 和 False 這兩個關(guān)鍵字翻譯出來。
·使用通用的日期格式將 Date 類型的數(shù)據(jù)寫入文件中。當(dāng)日期或時間的部件丟失或?yàn)榱銜r,只將現(xiàn)有部分寫入文件中。
·如果 outputlist 的數(shù)據(jù)為 Empty,則不將任何數(shù)據(jù)寫入文件。但對 Null 數(shù)據(jù),則要寫入 #NULL#。
·如果 outputlist 數(shù)據(jù)為 Null 數(shù)據(jù),則將 #NULL# 寫入文件中。
·對于 Error 類型的數(shù)據(jù),輸出看起來與 #ERROR errorcode# 一樣。無論在什么地區(qū),都不將關(guān)鍵字 Error 翻譯出來。
與 Print # 語句不同,當(dāng)要將數(shù)據(jù)寫入文件時,Write # 語句會在項目和用來標(biāo)記字符串的引號之間插入逗號。沒有必要在列表中鍵入明確的分界符。Write # 語句在將 outputlist 中的最后一個字符寫入文件后會插入一個新行字符,即回車換行符,(Chr(13) + Chr(10))。
示例:
Open "F:\test.txt" For Output As #1
Write #1, "Hello World", 1234
Write #1,
Dim MyBool, MyDate, MyNull, MyError
' 賦值 Boolean、Date、Null 及 Error 等。
MyBool = False : MyDate = #February 12, 1969# : MyNull = Null
MyError = CVErr(32767)
' Boolean 數(shù)據(jù)以 #TRUE# 或 #FALSE# 的格式寫入。
' 日期以通用日期格式寫入,例如:#1994-07-13# 代表
' 1994 年 1 月 13 日。Null 數(shù)據(jù)以 #NULL# 格式寫入。
' Error 數(shù)據(jù)以 #ERROR 錯誤代號# 的格式寫入。
Write #1, MyBool; " is a Boolean value"
Write #1, MyDate; " is a date"
Write #1, MyNull; " is a null value"
Write #1, MyError; " is an error value"
Close #1
我們可以看到寫入的內(nèi)容為:
"Hello World",1234
#FALSE#," is a Boolean value"
#1969-02-12#," is a date"
#NULL#," is a null value"
#ERROR 32767#," is an error value"
10、Line Input # 語句
語法:Line Input #filenumber, varname
功能:從已打開的順序文件中讀出一行并將它分配給 String 變量。
說明:通常用 Print # 與 Line Input # 語句配合使用。
Line Input # 語句一次只從文件中讀出一個字符,直到遇到回車符 (Chr(13)) 或回車–換行符 (Chr(13) + Chr(10)) 為止?;剀?#8211;換行符將被跳過,而不會被附加到字符串上。
示例:
Dim TextLine
Open "TESTFILE" For Input As #1
Do While Not EOF(1)
Loop
Close #1
11、Input 函數(shù)
語法:Input(number, [#]filenumber)
其中number 指定要返回的字符個數(shù)。
功能:返回 String,它包含以 Input 或 Binary 方式打開的文件中的字符。
說明:通常用 Print # 或 Put 將 Input 函數(shù)讀出的數(shù)據(jù)寫入文件。Input 函數(shù)只用于以 Input 或 Binary 方式打開的文件。
與 Input # 語句不同,Input 函數(shù)返回它所讀出的所有字符,包括逗號、回車符、空白列、換行符、引號和前導(dǎo)空格等。
示例:
Dim MyChar
Open "f:\test.txt" For Input As #1
Do While Not EOF(1)
Loop
Close #1
下面這個函數(shù)可以將文本文件的數(shù)據(jù)一次讀入到一個字符串(但是若包含中文時會出錯,因?yàn)橐粋€中文字占2個字節(jié))。
Public Function ReadText(FileName As String)
Dim fnum%, isopen As Boolean
On Error GoTo erro
fnum = FreeFile()
Open FileName For Input As #fnum
isopen = True
ReadText = Input(LOF(fnum), fnum)
erro:
End Function
12、Print # 語句
語法:Print #filenumber, [outputlist]
outputlist 參數(shù)的設(shè)置如下:
[{Spc(n) | Tab[(n)]}] [expression_r] [charpos]
Spc(n) 用來在輸出數(shù)據(jù)中插入空白字符,而 n 指的是要插入的空白字符數(shù)。
Tab(n) 用來將插入點(diǎn)定位在某一絕對列號上,這里,n 是列號。使用無參數(shù)的 Tab 將插入點(diǎn)定位在下一個打印區(qū)的起始位置。
expression_r 要打印的數(shù)值表達(dá)式或字符串表達(dá)式。
charpos 指定下一個字符的插入點(diǎn)。使用分號將插入點(diǎn)定位在上一個顯示字符之后。用 Tab(n) 將插入點(diǎn)定位在某一絕對的列號上,用無參數(shù)的 Tab 將插入點(diǎn)定位在下一個打印區(qū)的起始處。如果省略 charpos,則在下一行打印下一個字符。
功能:將格式化顯示的數(shù)據(jù)寫入順序文件中。
說明:通常用 Line Input # 或 Input 讀出 Print # 在文件中寫入的數(shù)據(jù)。
示例:
Open "F:\test.txt" For Output As #1
Print #1, "This is a test"
Print #1,
Print #1, "Zone 1"; Tab; "Zone 2"
Print #1, "Hello"; " "; "World"
Print #1, Spc(5); "5 leading spaces "
Print #1, Tab(10); "Hello"
' 賦值 Boolean、Date、Null 及 Error 等。
Dim MyBool, MyDate, MyNull, MyError
MyBool = False: MyDate = #2/12/1969#: MyNull = Null
MyError = CVErr(32767)
' True、False、Null 及 Error 會根據(jù)系統(tǒng)的地區(qū)設(shè)置自動轉(zhuǎn)換格式。
' 日期將以標(biāo)準(zhǔn)的短式日期的格式顯示。
Print #1, MyBool; " is a Boolean value"
Print #1, MyDate; " is a date"
Print #1, MyNull; " is a null value"
Print #1, MyError; " is an error value"
Close #1
以上代碼寫入的內(nèi)容如下:
This is a test
Zone 1
Hello World
False is a Boolean value
1969-2-12
Null is a null value
Error 32767 is an error value
13、Width # 語句
語法:Width #filenumber, width
width 必要。范圍在 0–255 之間的數(shù)值表達(dá)式,在新的一行開始之前,指出在該行上可出現(xiàn)多少字符。如果 width 等于 0,則行的長度不受限制。width 的缺省值為 0。
功能:將一個輸出行的寬度指定給用 Open 語句打開的文件。
示例:
Dim I
Open "f:\TESTFILE.txt" For Output As #1
Width #1, 5
For I = 0 To 9
Next I
Close #1
以上代碼寫入的內(nèi)容如下:
01234
56789
(四)處理二進(jìn)制文件
打開二進(jìn)制文件可以使用Open語句的Random和Binary方式打開。二進(jìn)制文件讀寫使用Get和Put語句。
1、Put 語句
語法:Put [#]filenumber, [recnumber], varname
recnumber 可選。Variant (Long)。記錄號(Random 方式的文件)或字節(jié)數(shù)(Binary 方式的文件),指明在此處開始寫入。
說明:通常用 Get 將 Put 寫入的文件數(shù)據(jù)讀出來。
示例:
Dim num As Long, text As String
num = 12345
text = "a string"
Open "f:\data.bin" For Binary As #1
Put #1, , num
Put #1, , text
Close #1
2、Get 語句
語法:Get [#]filenumber, [recnumber], varname
recnumber 可選。Variant (Long)。記錄號(Random 方式的文件)或字節(jié)數(shù)(Binary 方式的文件),以表示在此處開始讀出數(shù)據(jù)。
功能:將一個已打開的磁盤文件讀入一個變量之中。
說明:通常用 Put 將 Get 讀出的數(shù)據(jù)寫入一個文件。
示例:讀取以上代碼寫入的內(nèi)容
Dim num As Long, text As String
Open "f:\data.bin" For Binary As #1
Get #1, , num
text = Space$(8)
Get #1, , text
Debug.Print num, text
Close #1
在立即窗口可以看到如下內(nèi)容:
3、Seek 語句
語法:Seek [#]filenumber, position
其中position 為介于 1~ 2,147,483,647(相當(dāng)于 2^31 – 1)之間的數(shù)字,指出下一個讀寫操作將要發(fā)生的位置。
功能:在 Open 語句打開的文件中,設(shè)置下一個讀/寫操作的位置。
說明:可以用Seek語句指定Get語句的讀取位置,但在 Get 及 Put 語句中指定的記錄號將覆蓋由 Seek 語句指定的文件位置。
示例:
Dim MaxSize, NextChar, MyChar
Open "TESTFILE" For Input As #1
MaxSize = LOF(1)
' 用循環(huán)讀入所有記錄,但是從最后的記錄開始往前讀。
For NextChar = MaxSize To 1 Step -1
Next NextChar
Close #1
4、Seek 函數(shù)
語法:Seek(filenumber)
功能:返回一個 Long,在 Open 語句打開的文件中指定當(dāng)前的讀/寫位置。
說明:在使用Get語句讀取文件時,必須用LOF函數(shù)來判斷是否到達(dá)文件末尾,而不是用EOF函數(shù)??梢允褂肧eek函數(shù)判斷當(dāng)前位置,然后與LOF的值比較。
示例:
Do While Seek(1) < LOF(1)
Loop
(五)總結(jié)