文件:存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。
按名存取
1. 記錄
由若干個(gè)相互關(guān)聯(lián)的數(shù)據(jù)項(xiàng)組成。
例如,由學(xué)生的學(xué)習(xí)成績(jī)信息組成的記錄:
2. 文件及其種類
文件是記錄的集合
(1) 順序文件
按順序依次把記錄寫入文件;
按順序依次把記錄讀出來(lái)。
(2) 隨機(jī)文件
隨機(jī)文件可以直接訪問(wèn)文件中的任意一個(gè)記錄。
記錄長(zhǎng)度相同
根據(jù)記錄號(hào)訪問(wèn)
(1) ASCII碼文件
數(shù)據(jù)是以ASCII碼進(jìn)行編碼儲(chǔ)存的。
(2) 二進(jìn)制文件(Binary File)
數(shù)據(jù)是以二進(jìn)制格式進(jìn)行編碼保存的。
6.2 順序文件
1. 打開文件
Open "文件名" [For 模式] [Access 操作類型] [鎖定] As [#]文件號(hào) [Len=記錄長(zhǎng)度]
(1) 模式
OUTPUT:寫操作
INPUT:讀操作
APPEND:追加到文件未尾
(2) 操作類型
READ:只讀
WRITE:只能寫
READWRITE:讀寫皆可
(3) 鎖定:用于多進(jìn)程環(huán)境,是否允許其他進(jìn)程對(duì)打開的文件進(jìn)行 操作
Shared(缺省):共享
Lock Read:禁止其他進(jìn)程對(duì)該打開的文件進(jìn)行讀操作
Lock Write:禁止其他進(jìn)程對(duì)該打開的文件進(jìn)行寫操作
Lock Read Write:禁止其他進(jìn)程對(duì)該打開的文件進(jìn)行讀寫操作
(4) 文件號(hào)
1~511,可以用FreeFile函數(shù)獲得下一個(gè)可利用的文件號(hào)。
(5) 記錄長(zhǎng)度
小于或等于32767的整數(shù)。
它指定數(shù)據(jù)緩沖區(qū)的大小。
例如,打開C:\VB\SCORE,供寫入數(shù)據(jù),指定文件號(hào)為#1。
命令:OPEN "C:\VB\SCORE" FOR OUTPUT AS #1
2. 寫入命令
Print #文件號(hào),[輸出列表]
輸出列表的意義同Print方法。
保存文本框
假定文本框的名稱為txtTest,文件名為TEST.DAT。
方法1:把整個(gè)文本框的內(nèi)容一次性地寫入文件。
Open "TEST.DAT" For Output As #1
Print #1, txtTest.Text
Close #1
方法2:把整個(gè)文本框的內(nèi)容一個(gè)字符一個(gè)字符地寫入文件。
Open "TEST.DAT" For Output As #1
For i=1 To len(txtTest.Text)
Print #1,Mid(txtTest.Text,i,1);
Next i
Close #1
Write #文件號(hào),[輸出列表]
輸出列表:用“,”分隔的表達(dá)式。
以緊湊格式存放,即在數(shù)據(jù)項(xiàng)之間插入“,”,并給字符串加上雙引號(hào)。
例如,命令:Write #1,"One","Two",123
內(nèi)容:"One","Two",123
3. 關(guān)閉文件
Close [[#]文件號(hào)][, [#]文件號(hào)]...
例如,Close #1, #2, #3
Close 關(guān)閉所有打開的文件
4. 讀順序文件
INPUT #文件號(hào),變量列表
把讀出的每個(gè)數(shù)據(jù)項(xiàng)分別存放到所對(duì)應(yīng)的變量。
以“,”為分界符。
LINE INPUT #文件號(hào),字符串變量
讀一行到變量中,主要用來(lái)讀取文本文件。以回車為分界符。
INPUT$(讀取字符數(shù),#文件號(hào))
隨意讀取字符
5. 函數(shù)
LOF(文件號(hào)):返回文件的長(zhǎng)度(總字節(jié)數(shù))。
LOC(文件號(hào)):返回讀寫位置。
隨機(jī)文件:返回最近讀寫的記錄號(hào);
二進(jìn)制文件:返回最近讀寫的一個(gè)字節(jié)的位置;
EOF(文件號(hào)):
文件結(jié)束:返回TRUE(-1)
否則:FALSE(0)。
讀文本文件到文本框
假定文本框名稱為txtTest,文件名為MYFILE.TXT。
方法1:一行一行讀
txtTest.Text = ""
Open "MYFILE.TXT" For Input As #1
Do While Not EOF(1)
Line Input #1, InputData
txtTest.Text = txtTest.Text + InputData+vbCrLf
Loop
Close #1
方法2:一次性讀
txtTest.Text = ""
Open "MYFILE.TXT" For Input As #1
txtTest.Text = Input( LOF(1),1)
Close #1
方法3:一個(gè)個(gè)字符讀
Dim InputData as String*1
txtTest.Text = ""
Open "MYFILE.TXT" For Input As #1
Do While Not EOF(1)
Input #1, InputData
txtTest.Text = txtTest.Text + InputData
Loop
Close #1
6.3 隨機(jī)文件
1. 打開
Open "文件名" For Random As #文件號(hào) [Len=記錄長(zhǎng)度]
2. 寫操作
Put [#]文件號(hào),[記錄號(hào)],變量名
將一個(gè)記錄變量的內(nèi)容寫到指定的記錄位置處。
忽略記錄號(hào),則表示在當(dāng)前記錄后的位置插入一條記錄。
3. 讀操作
Get [#]文件號(hào),[記錄號(hào)],變量名
忽略記錄號(hào),則讀出當(dāng)前記錄后的那一條記錄。
例6.3 建立隨機(jī)文件。
Type Record
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
For RecordNumber = 1 To 5
MyRecord.ID = RecordNumber
MyRecord.Name = "My Name"
Put #1, RecordNumber, MyRecord
Next RecordNumber
Close #1
例6.4 用Get命令讀出上例建立的隨機(jī)文件中第三條記錄。
Type Record
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record
Open "TESTFILE" For Random As #1 Len =Len(MyRecord)
Position = 3
Get #1, Position, MyRecord
Print Myrecord.Id Name
Close #1
6.4 二進(jìn)制文件
1. 打開
Open "文件名" [For Binary] As #文件號(hào)
2. 寫操作
Put [#]文件號(hào),[位置],變量名
寫入長(zhǎng)度等于變量長(zhǎng)度的數(shù)據(jù)。若忽略位置,表示從文件指針?biāo)傅奈恢脤懭霐?shù)據(jù),指針移動(dòng)變量長(zhǎng)度的位置
3. 讀操作
GET [#]文件號(hào),[位置],變量名
從指定位置開始讀出長(zhǎng)度等于變量長(zhǎng)度的數(shù)據(jù)存入變量中,數(shù)據(jù)讀出后移動(dòng)變量長(zhǎng)度位置,如果忽略位置,則表示從文件指針?biāo)傅奈恢瞄_始讀出數(shù)據(jù),數(shù)據(jù)讀出后移動(dòng)變量長(zhǎng)度位置。 INPUT (字節(jié)數(shù),#文件號(hào))
返回從文件中讀出的字符串。
4. SEEK函數(shù)
SEEK(文件號(hào))
隨機(jī)文件:返回下一個(gè)要寫入或讀出的記錄號(hào);
二進(jìn)制文件或順序文件:返回下一個(gè)寫入或讀出的字節(jié)位置。 5. SEEK命令
Seek [#]文件號(hào), 位置
設(shè)置下一個(gè)要寫入或讀出的位置。
例6.6 建立一個(gè)文件名為STUDENT.DAT二進(jìn)制文件。
Sub Form_Click( )
Dim Name As String * 10
Open "Student.Dat" For Binary As #1
Do
NAME = InputBox("請(qǐng)輸入學(xué)生姓名:")
Put #1, , NAME
YES = InputBox("繼續(xù)輸入嗎?(Y/N)")
Loop While UCase(YES) = "Y"
Close #1
End Sub
例6.7 用INPUT函數(shù)讀出例6.6建立的文件。
Sub Form_Click()
Dim Name As String * 10
Open "Student.Dat" For Binary As #1
Flength = Lof(1)
Char = Input(Flength, #1)
Print Char
Close #1
End Sub
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。