(轉(zhuǎn)帖)VB open語句用法小節(jié)
(一)打開和關(guān)閉文件
1、順序文件
打開順序文件,我們可以使用Open語句。它的格式如下:
Open pathname For [Input |Output |Append] As [#]filenumber [Len = buffersize]
說明: ?。?)參數(shù)pathname 表示要打開的文件名,文件名可以包含有驅(qū)動器和目錄 ?。?)Input Output 和Append用于設(shè)置順序文件的打開方式。其中,Input表示從打開的文件中讀取數(shù)據(jù)。以這種方式打開文件時,文件必須存在,否則會產(chǎn)生錯誤。Output表示向打開的文件中寫入數(shù)據(jù)。以這種方式打開文件時,文件中原有的數(shù)據(jù)將被覆蓋,新的數(shù)據(jù)將從文件開始寫入。如果文件不存在,則創(chuàng)建一個新文件。Append表示向打開的文件中添加數(shù)據(jù)。以這種方式打開時,文件中原有的數(shù)據(jù)將被保留,新的數(shù)據(jù)將從文件為開始添加。如果文件不存在,則創(chuàng)建一個新文件。 (3)As[#]filenumber 子句用于為打開的文件指定文件號.對文件進(jìn)行讀寫操作時,要用文件號表示該文件.文件號是介于1~511之間的整數(shù),既可以是數(shù)字,又可以是變量.也可以省略不用. (4)當(dāng)在文件與程序之間拷貝數(shù)據(jù)時,Len=buffersize子句指定緩沖區(qū)的字符數(shù). 例如:
Open App.Path + "\test.dat" For Output As 1
上下兩句代碼在當(dāng)前應(yīng)用程序所在目錄下創(chuàng)建了一個名為test.dat的文本文件,分配文件號為1.
Open App.Path + "\test.dat" For Input As [#]filenumber
這條語句是從文本文件中讀取數(shù)據(jù).
Open App.Path + "\test.dat" For Append As [#]filenumber
這條語句則是像文本文件中添加數(shù)據(jù) 2、隨機文件 操作隨機文件之前,首先必須定義用于保存數(shù)據(jù)項的記錄類型.該記錄是用戶自定義數(shù)據(jù)類型,他們是隨機文件中存儲數(shù)據(jù)的基本結(jié)構(gòu).例如:
Type Student No As Integer Name As String * 20 age As Integer End Type Dim Stud As Student ‘定義一個可以存放學(xué)生材料的變量
隨機文件中,所有的數(shù)據(jù)都將保存到若干個結(jié)構(gòu)為Student類型的記錄中, 而從隨機文件中讀出的數(shù)據(jù)則可以存放到變量Stud中. 之后我們就可以打開并讀寫文件了.下面是打開隨機文件的語法格式:
Open filename For Random as [#]filenumber Len = Reclength
說明: (1)參數(shù)filename 和filenumber 分別表示文件名或文件號. (2)關(guān)鍵字Random 表示打開的是隨機文件 (3)Len子句用于設(shè)置記錄長度,長度由參數(shù)Reclength指定.Reclength的值必須大于0,而且必須與定義的記錄結(jié)構(gòu)的長度一致.計算記錄長度的方法是將記錄結(jié)構(gòu)中每個元素的長度相加.例如前面聲明的Student的長度應(yīng)該是2+20+2=24字節(jié). 打開一個記錄類型為Student 的隨機文件的方法是:
Open "c:\Student.txt " For Random As #1 Len = 25
3、二進(jìn)制文件 打開二進(jìn)制文件的語法格式如下:
Open pathname For Binary As [#]filenumber
說明: (1) 參數(shù)filename 和filenumber 分別表示文件名或文件號. (2)關(guān)鍵字Binary 表示打開的是二進(jìn)制文件 (3)對于二進(jìn)制文件,不能指定字節(jié)長度.每個打開的二進(jìn)制文件都有一個自己的指針,文件指針是一個數(shù)字值,指向下一次讀寫操作的文件中的位置.二進(jìn)制文件中的每個”位置”對應(yīng)一個數(shù)據(jù)字節(jié),因此,有n個字節(jié)的文件,就有1到n個位置. 我們可以用Seek()函數(shù)返回當(dāng)前的文件指針位置(即下一個要讀寫的字節(jié) );用Loc()函數(shù)返回上一次讀寫的字節(jié)位置,除非用Seek語句移動了指針,Loc()返回值總比Seek()的小1.我們來看下面的例子:
Open “student.txt” for Binary as #1
該語句用二進(jìn)制的方式打開了student.txt文件.
?。ǘ┳x文件
1、順序文件
順序文件的讀取有三種方式:
?。?)Line Input # 語句
該語句從打開的順序文件中讀取一行數(shù)據(jù)。這里的一行指的是從當(dāng)前指針位置開始到回車符或回車換行符之間的所有數(shù)據(jù)。Line Input # 語句的語法格式如下:
(三)寫文件
1、 順序文件
寫順序文件我們可以用Write # 和Print #語句向一個已經(jīng)打開的文件中寫入數(shù)據(jù).
下面是他們的格式和說明:
Print # 的語法格式:
Print # 文件號,變量列表
例如,將文本框中的文本寫到文件中,代碼如下:
Open "file.txt" For Output As #filenum Input #filenum, text1.text
Write # 語句的語法格式:
Write # 文件號,變量列表
說明:用Write # 語句寫入的信息便于以后用Input #語句來讀取數(shù)據(jù),因為Write #語句自動將寫入到文件中的信息用逗號分開,并為字符串?dāng)?shù)據(jù)加上雙引號.例如:
Open "student.txt" For Output As #filenum Write #filenum, "張三", "初一年級", 14 Write #filenum, "李四", "職業(yè)高中", 18
2、 隨機文件
向隨機文件中寫入數(shù)據(jù),使用Put #語句.語法格式如下:
Put [#] FileNum ,[RecNum],UserType
說明: (1) FileNum 是要打開的文件號;RecNum是要寫入的記錄號,若省略,則再上一次用Get 和Put語句所讀寫過的記錄的后一條記錄中寫入,如果沒有執(zhí)行過Get 和Put語句,就從第一條記錄開始 (2)UserType 是包含要寫入數(shù)據(jù)的用戶自定義的數(shù)據(jù)類型變量.例如:我們向前面的student.txt文件中的第5個記錄寫入數(shù)據(jù),可用這些語句:
stud.No = 0301 stud.Name = “王武” stud.Age =20 Put #1 ,5,stud
如果要插入的數(shù)據(jù)不只一兩條的話,首先要確定文件和每條記錄的長度,這樣就可以計算出文件中究竟有多少條記錄.我們可以用Lof()函數(shù)返回文件的長度,Len()函數(shù)返回每個記錄的長度,計算文件中的記錄個數(shù)可以用文件的長度除以給個記錄的長度.示例如下:
Nextrec= (Lof(1)\Len(UserType))+1 Put #1,Nextrec,UserType
3、二進(jìn)制文件
下面是以二進(jìn)制方式寫入文件的語句格式及其說明:
格式:
Put [#]fileNumber ,[Pos], Var
功能: 用二進(jìn)制方式,從文件的中指定的位置開始寫入,所給變量長度的數(shù)據(jù) 說明: (1)FileNumber是以二進(jìn)制方式打開的文件號. (2)Pos用來指定寫操作發(fā)生時的字節(jié)位置,若省略,則使用當(dāng)前文件指針位置. (3)Var是用來存放寫入的數(shù)據(jù)的變量.該語句會自動根據(jù)var變量包含的字節(jié)長度寫入文件,如果Var是一個可變長度的字符串變量,則傳送的字節(jié)數(shù)等于Var中目前的字節(jié)數(shù)
Line Input # 文件號,變量號
說明:“文件號”是打開文件時所用的文件號;“變量號”使用來存放讀出數(shù)據(jù)的一個或多個變量,如果有多個變量,中間用空格分割開。Input# 語句為參數(shù)列表中的每一個變量讀取文件的一個域,并將讀出的域存入變量中。該語句只能順序的從第一個域開始,直到讀取想要的域。 請看下面代碼:
Dim strLine As String Open "c:\vb\test.txt" For Input As #1 Do Until EOF(1) Line Input #1, strLine text1.Text = text1.Text + strLine + Chr(13) + Chr(10) Loop Close #1
此段代碼逐行讀取一個文件到文本框中。 ?。?)Input函數(shù) 此函數(shù)可以從順序文件中一次讀取指定長度的字符串。具體地說,就是從文件的當(dāng)前位置開始,讀取指定個數(shù)的字符,然后將他們返回。Input函數(shù)可以讀取包括換行符,回車符,空格符等在內(nèi)的各種字符。下面是它的語法格式: 變量 = Input(串長度,文件號) 例如,要從一個打開文件中讀取12個字符并復(fù)制到變量file中,我們可以這樣寫:
file = Input(12,filenum)
如果要將整個文件復(fù)制到變量,請使用InputB函數(shù)將字節(jié)從文件復(fù)制到變量。由于InputB函數(shù)返回一個ASCII字符串,因此,必須用StrCopy函數(shù)將ASCII字符串轉(zhuǎn)換為Unicode字符串。代碼如下:
file = StrCopy (Input (LOF(filenanum),filenum),vbUnicode)
?。?)Input # 語句 Input #語句可以從文件中同時向多個變量內(nèi)讀入數(shù)據(jù),而且讀入的數(shù)據(jù)可以是不同類型的?! ∠旅媸顾恼Z法格式:
Input # 文件號,變量列表
例如,我們要在文件student.txt中寫入數(shù)據(jù),下面是代碼:
Open "student.txt" For Output As #filenum Write #filenum, "張三", "初一年級", 14 Write #filenum, "李四", "職業(yè)高中", 18 Dim name As String, nianji As String, age As Integer Dim name1 As String, nianji1 As String, age1 As Integer Open "student.txt" For Input As #filenum Input #filenum, name, nianji, age Input #filenum, name1, nianji1, age1 Close #filenum
執(zhí)行結(jié)果:
name=”張三” ,nianji = “初一年級” ,age =14 name=”李四” ,nianji = “職業(yè)高中” ,age =18
2、隨機文件 讀取隨機文件是可以使用Get # 語句,數(shù)據(jù)從文件的一個指定記錄中讀出后,存入一個用戶自定義的變量中. 語法格式: Get # FileNum ,[RecNum],UserType 說明: (1)FileNum 是要打開的文件號;RecNum是要讀取的記錄號,若省略,則讀取下一個記錄 (2)UserType 是一個用來存放讀出數(shù)據(jù)的用戶自定義的數(shù)據(jù)類型變量. 下面是一個例子:
Get # 1,5,Student
該語句讀取文件號為1的文件中的第5條記錄. 3、二進(jìn)制文件 讀寫二進(jìn)制文件的方法和讀寫隨機文件的方法基本相同,下面是相關(guān)的語句格式及其說明: 格式: Get [#]fileNumber ,[Pos], Var 功能: 用二進(jìn)制方式,從文件的中指定的位置開始讀取,所給變量長度的數(shù)據(jù) 說明: (1)FileNumber是以二進(jìn)制方式打開的文件號. (2)Pos用來指定讀寫操作發(fā)生時的字節(jié)位置,若省略,則使用當(dāng)前文件指針位置. (3)Var是用來存放讀出的數(shù)據(jù)的變量.該語句會自動根據(jù)var變量包含的字節(jié)長度讀取適當(dāng)?shù)奈募?如果Var是一個可變長度的字符串變量,則傳送的字節(jié)數(shù)等于Var中目前的字節(jié)數(shù).對于文件長度的判斷我們可以使用Lof()函數(shù),Eof()函數(shù)檢查文件的結(jié)尾位置. 下面的代碼復(fù)制studert.txt文件到student1.txt文件中
Dim ar As String * 1, i As Integer Open "c:\student.txt" For Binary As #1 Open "c:\student2.txt" For Binary As #2 For i = 1 To LOF(1) Get #1, , ar Put #2, , ar Next i Close #1, #2
聯(lián)系客服