版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第1313章章 數(shù)據(jù)文件數(shù)據(jù)文件1.掌握VB中文件的概念、種類及其結(jié)構(gòu);2.掌握順序文件的操作:打開、讀/寫、關(guān)閉;3.掌握隨機文件的操作:打開、讀/寫、關(guān)閉;4.了解二進制文件的操作。5.了解與文件操作有關(guān)的一些語句本章內(nèi)容及要求:二、文件分類二、文件分類根據(jù)訪問文件的方式將文件分成3類: 順序文件 隨機文件 二進制文件。 2隨機文件隨機文件 隨機文件(Random Access File)是可以按任意次序讀寫的文件,其中每個記錄的長度必須相同。在這種文件結(jié)構(gòu)中,每個記錄都有其唯一的一個記錄號,所以在讀取數(shù)據(jù)時,只要知道記錄號,便可以直接讀取記錄。 隨機文件的文件結(jié)構(gòu)打開文件讀出或?qū)懭腙P(guān)閉
2、文件在程序中對文件的操作,通常按3個步驟進行: 一、順序文件的打開與關(guān)閉1. 打開文件Open “文件名” For 模式 As #文件號 Len=記錄長度(1) 模式OUTPUT:寫操作INPUT:讀操作APPEND:追加到文件未尾 OPEN C:VBSCORE.txt FOR OUTPUT AS #1v打開文件的真正含意打開文件的真正含意: (1)并不是把文件內(nèi)容顯示出來,而是讀文件或顯示文并不是把文件內(nèi)容顯示出來,而是讀文件或顯示文件內(nèi)容的必經(jīng)步驟;件內(nèi)容的必經(jīng)步驟; (2)打開文件并不一定只是為了讀文件內(nèi)容而打開,其打開文件并不一定只是為了讀文件內(nèi)容而打開,其實寫文件或新建文件之前都要把
3、對應(yīng)的文件打開。實寫文件或新建文件之前都要把對應(yīng)的文件打開。v如何打開由用戶任意指定的文件:如何打開由用戶任意指定的文件: (1)用打開用打開/另存為對話框;另存為對話框; (2)用文件列表框用文件列表框/目錄列表框目錄列表框/驅(qū)動器列表框驅(qū)動器列表框 要注意要注意OPEN語句與它們分工上的不同語句與它們分工上的不同1. 順序文件讀操作 從現(xiàn)存文件中讀入數(shù)據(jù),應(yīng)以順序Input方式打開該文件。然后使用 Input# 語句、Line Input# 語句和Input( )函數(shù)讀入到程序變量中。 使用格式如下:格式一:格式一:Input # 語句語句 INPUT #文件號文件號,變量列表變量列表把讀
4、出的每個數(shù)據(jù)項分別存放到所對應(yīng)的變量,從文件中讀出數(shù)據(jù)時,凡是遇到文件中的逗號、空格或回車符便認為是一個數(shù)據(jù)項的結(jié)束。v例例1:假設(shè)有一個名為:假設(shè)有一個名為datain.txt的文本文件,其的文本文件,其內(nèi)容如下:內(nèi)容如下:32 43 76 58 28 12 98 57 31 42 53 64 75 86 97 13 24 35 46 57 68 79 80 59 37,共共25個數(shù),要求程序運行后,單擊窗體,將該文個數(shù),要求程序運行后,單擊窗體,將該文件中的數(shù)據(jù)讀入到二維數(shù)組件中的數(shù)據(jù)讀入到二維數(shù)組mat中。在窗體上按中。在窗體上按5行行5列的矩陣形式顯示出來。列的矩陣形式顯示出來。Dim
5、 mat(5, 5)Dim I , jOpen App.Path & & datain.txt For Input As #1For i = 1 To 5 For j = 1 To 5 Input #1 , mat(i, j)Next j , iClose #1PrintPrint 初始矩陣為:初始矩陣為:PrintFor i = 1 To 5 For j = 1 To 5 Print Tab(5 * j) ; mat(i, j); Next j PrintNext iFor k=1 to 25 I= k / 5+1 : J=k mod 5 Input #1 , mat(I,J
6、)Next k問題:如果把數(shù)據(jù)文件中的數(shù)據(jù)刪掉一個或者把程序中的5改為4,會是什么結(jié)果呢?也可改為單循環(huán):Eof 函數(shù)函數(shù) Eof 函數(shù)將返回一個表示文件指針是否到達文件函數(shù)將返回一個表示文件指針是否到達文件末尾的標志。如果到了文件末尾,末尾的標志。如果到了文件末尾,Eof 函數(shù)返回函數(shù)返回TRUE(-1),否則返回,否則返回FALSE(0)。 從文件中讀數(shù)據(jù)的常見循環(huán)方式:從文件中讀數(shù)據(jù)的常見循環(huán)方式: Do While Not Eof(文件號文件號) 讀文件及其它語句讀文件及其它語句 Loopv例例2:把文件文件:把文件文件datain.txt的內(nèi)容全部讀出并顯示在的內(nèi)容全部讀出并顯示在窗
7、體中:窗體中:Open App.Path & & datain.txt For Input As #1Do While Not Eof(1) Input #1 , a Print aLoop格式二:格式二:Line Input # 語句語句 LINE INPUT #文件號文件號 , 字符串變量字符串變量功能:從順序文件中讀取一整行字符到后面指定的字符串變量中。例:把程序文件夾下面的文本文件myfile.txt的內(nèi)容顯示在一個多行文本框中:Open App.Path & & myfile.txt For Input As #1Do While Not EOF(1)
8、 Line Input #1 , s Text1.Text = Text1.Text + s + vbCrLfLoopClose #1格式三:格式三:Input函數(shù):函數(shù): INPUT$(N, #文件號文件號) 從指定的文件中讀取N個字符的字符串,作為函數(shù)的返回值例:把程序文件夾下面的文本文件myfile.txt的內(nèi)容一次性讀出并顯示在多行文本框中:Open App.Path & & myfile.txt For Input As #1Text1.Text = Input( LOF(1) , 1)Close #1函數(shù)功能:求文件的長度例:把程序文件夾下面的文本文件myfile.
9、txt的內(nèi)容逐個字符讀出并顯示在多行文本框中。Dim c As String * 1Open App.Path & & myfile.txt“ For Input As #1Do While Not EOF(1) c= Input(1, #1) Text1.Text = Text1.Text & cLoopClose #12、順序文件的寫操作、順序文件的寫操作 向文件寫入內(nèi)容使用向文件寫入內(nèi)容使用 Print # 語句或語句或Write#語句,在程序中是語句,在程序中是數(shù)據(jù)輸出。數(shù)據(jù)輸出。(1)Print語句語句語法格式:說明:說明:文件號為以寫方式打開文件的文件號;
10、輸出列表為用分號或逗號分隔的變量、常量、空格和定位函數(shù)序列。 (2)Write命令命令語法格式:Write #,Write語句采用緊湊格式。數(shù)據(jù)項之間插入“,”,并給字符數(shù)據(jù)加上雙引號。例:例: Print與與Write語句輸出數(shù)據(jù)結(jié)果比較。語句輸出數(shù)據(jù)結(jié)果比較。Private Sub Form_Click()Dim Str As String , Anum As Integer Open D:Myfile.dat For Append As 1Str = ABCDEFGAnum = 12345Print #1 , Str , AnumWrite #1 , Str , AnumClose #1
11、End Sub例:例:編程把一個文本框中的內(nèi)容,以文件形式存入磁盤。編程把一個文本框中的內(nèi)容,以文件形式存入磁盤。假定文本框的名稱為假定文本框的名稱為Mytxt,文件名為,文件名為Myfile.dat。方法方法1:把整個文本框的內(nèi)容一次性地寫入文件。把整個文本框的內(nèi)容一次性地寫入文件。Open Myfile.dat“ For Output As #1Print #1, Mytxt.TextClose #1方法方法2:把整個文本框的內(nèi)容一個字符一個字符地寫入文件。把整個文本框的內(nèi)容一個字符一個字符地寫入文件。Open Myfile.dat For Output As #1For i=1 To l
12、en(Mytxt.Text) Print #1 , Mid(Mytxt.Text,i,1);Next iClose #1三、關(guān)閉文件三、關(guān)閉文件Close 語句使用格式如下: 其中:文件號列表為可選項,如:#1, #2, #3,如果省略,則將關(guān)閉Open語句打開的所有活動文件。例如: Close #1,#2,#3 Close 四與讀文件操作有關(guān)的幾個函數(shù)四與讀文件操作有關(guān)的幾個函數(shù)(1)Lof 函數(shù)函數(shù) LOF函數(shù)將返回某文件的字節(jié)數(shù)。例如,函數(shù)將返回某文件的字節(jié)數(shù)。例如,LOF(1)返回返回#1文件的長度,如果文件的長度,如果返回返回0值,則表示該文件是一個空文件。值,則表示該文件是一個空文
13、件。(2)Loc 函數(shù)函數(shù) Loc函數(shù)將返回在一個打開文件中讀寫的記錄號;對于二進制文件,它將返函數(shù)將返回在一個打開文件中讀寫的記錄號;對于二進制文件,它將返回最近讀寫的一個字節(jié)的位置。回最近讀寫的一個字節(jié)的位置。(3)Eof 函數(shù)函數(shù) Eof 函數(shù)將返回一個表示文件指針是否到達文件末尾的標志。如果到了文件函數(shù)將返回一個表示文件指針是否到達文件末尾的標志。如果到了文件末尾,末尾,Eof 函數(shù)返回函數(shù)返回TRUE(-1),否則返回,否則返回FALSE(0)。 語法結(jié)構(gòu):語法結(jié)構(gòu): Do While Not Eof(文件號文件號) 語句語句 Loopv例例1:磁盤上有:磁盤上有f1.txt和和f2
14、.txt兩個文本文件,要求兩個文本文件,要求將兩個文件中的數(shù)據(jù)讀出,并保存到一個新的文將兩個文件中的數(shù)據(jù)讀出,并保存到一個新的文件件f3.txt中。中。v例例2:將一個文件:將一個文件f1.txt中的內(nèi)容全部奇數(shù)行和偶中的內(nèi)容全部奇數(shù)行和偶數(shù)行互換后保存到文件數(shù)行互換后保存到文件f4.txt中。中。順序文件應(yīng)用舉例例:順序文件的應(yīng)用舉例. 本程序演示順序文件的讀寫操作,程序運行示意如圖所示。該程序可以打開一個順序文件,將其內(nèi)容讀入文本框中進行修改,并可以保存修改。改成可以將文本框的內(nèi)容在磁盤上建立一個順序文件。順序文件應(yīng)用舉例14.2 順序文件設(shè)置控件事件代碼如下:Private Sub Co
15、mmand1_Click() 本過程完成文件的讀取功能 Dim File1 Dim nextline As String CommonDialog1.Filter= Text Files(.txt)|.txt 指定默認文件類型 CommonDialog1.ShowOpen 調(diào)用以CommonDialog1控件打開的對話框,以輸入要打開的文件名 File1=CommonDialog1.filename 將打開對話框提供的文件名賦予變量File1 順序文件應(yīng)用舉例Open File1 For Input As #1 按讀方式打開下面循環(huán)可以用語句“Text1.text=Input(LOF(1),1
16、)”替代 Do Until EOF(1) 將打開文本文件的內(nèi)容賦予文本框 Line Input #1 ,nextline Text1.Text=Text1.Text+nextline+Chr(13)+Chr(10) Loop Close 1 關(guān)閉打開的文件End SubPrivate Sub Command2_Click() 本過程完成將文本框的內(nèi)容寫入文件中 Dim contents ,F(xiàn)ile1 CommonDialog1.showSave 調(diào)用CommandDialog1控件的保存對話框,以提供建立文件的文件名 File1=CommonDialog1.filename Open File
17、1 For Output As #1 以寫方式打文件 Contents=Text1.Text Text1.Text= 清除文本框中的內(nèi)容 Print #1 ,Contents 往文件中寫入內(nèi)容 Close 1 End Sub1.對于上面的某個程序界面對于上面的某個程序界面,如果需要把窗體上用戶輸入的信息如果需要把窗體上用戶輸入的信息存儲在文件中存儲在文件中,一種辦法是用順序文件的方法一種辦法是用順序文件的方法,把每個文本框內(nèi)把每個文本框內(nèi)容作為寫文件語句的一個輸出項容作為寫文件語句的一個輸出項,即即:Print #1, Text1.Text; Text2.Text; Text3.Text; T
18、ext4.Text; Text5.Text; Text6.Text思考思考:用這種方法寫這類程序有什么不便用這種方法寫這類程序有什么不便?2.如果要從存儲有該信息的文件中查找第如果要從存儲有該信息的文件中查找第5個人的信息個人的信息,如果用順如果用順序文件的方法去訪問文件序文件的方法去訪問文件,需要依次讀出前四個人的信息需要依次讀出前四個人的信息(即使即使不關(guān)心前四個人的信息也得讀它不關(guān)心前四個人的信息也得讀它,讀后可立即丟棄讀后可立即丟棄),然后使用以然后使用以下語句讀出并顯示下語句讀出并顯示:Input #1, Text1.Text, Text2.Text, Text3.Text, Tex
19、t4.Text, Text5.Text, Text6.Text思考思考:用這種方法寫這類程序有什么不便用這種方法寫這類程序有什么不便?v能否用一種簡單的方法來讀寫該類信息文件呢能否用一種簡單的方法來讀寫該類信息文件呢,比比如如: Print #1, x (先讓先讓x中存儲有某個人的信息中存儲有某個人的信息) Input #1, 5, a (即想用這種簡單形式的語句讀出文件即想用這種簡單形式的語句讀出文件中第中第5個人的信息存儲在個人的信息存儲在a中中) 注注:上面的兩條語句不是正確的上面的兩條語句不是正確的VB語言的語法語言的語法,在此使在此使用這種形式只是為了表達一種編程目的用這種形式只是為
20、了表達一種編程目的v要想使用這種簡單直觀的編程方式要想使用這種簡單直觀的編程方式,需要使用隨機需要使用隨機文件讀寫的編程技術(shù)文件讀寫的編程技術(shù).14.3 隨機文件 在文件中以順序文件方式進行存取數(shù)據(jù)很方便也很常用,但是當需要大量查找或修改文件中的數(shù)據(jù)時會很困難,而這時采用隨機文件方式存取數(shù)據(jù)就顯得比較方便。 隨機文件的每一個數(shù)據(jù)項都有相同的長度,它的數(shù)據(jù)項通常稱做記錄。隨機文件是以記錄為單位的,每條記錄都被賦予了記錄號以便查找。應(yīng)用程序可以根據(jù)記錄號直接讀取隨機文件中的任意記錄,而無須由前至后逐個讀取記錄。 對隨機文件的存取是以記錄為單位進行的,每個記錄包括一個或多個字段。具有一個字段的記錄對
21、應(yīng)于任一標準類型,比如整數(shù)或定長字符串。具有多個字段的記錄對應(yīng)于用戶自定義類型。 1、 聲明記錄類型變量(教材P44-45) 在打開一個文件進行隨機訪問之前,應(yīng)定義一個類型,該類型對應(yīng)于該文件包含或?qū)挠涗洝?語法格式為: Private|Public Type 自定義類型名自定義類型名 元素名元素名 As type 元素名元素名 As type End Type 例如,聲明一個學生自定義類型。 Type Student Number As String 2 學號,寬度為2字節(jié) Name As String 8 姓名,寬度為8字節(jié) Score As Integer 成績,寬度為2字節(jié) En
22、d Type 在定義與記錄對應(yīng)的類型以后,應(yīng)接著聲明程序需要的任何其他變量,用來處理作為隨機訪問而打開的文件。如: Public student1 As student,student2 As student 定義記錄變量13.3 隨機文件2 隨機文件的操作 一、打開格式: Open “文件名” For Random Access 存取類型 As #文件號 Len=記錄長度二、讀操作1.格式: Get #文件號 , 記錄號 ,變量名2.功能: 將一個已打開的磁盤文件的一條記錄的內(nèi)容讀入一個變量之中。 忽略記錄號,則讀出當前記錄后的那一條記錄。三、寫操作1.格式:Put #文件號文件號 ,記錄號
23、記錄號 ,變量名,變量名2.功能:將一個變量的數(shù)據(jù)寫入磁盤文件中,將一個記錄變量的內(nèi)容寫到指定的記錄位置處。忽略記錄號,則表示在當前記錄后的位置插入一條記錄。v添加記錄的方法添加記錄的方法: 首先計算出文件中的記錄數(shù)首先計算出文件中的記錄數(shù):k=LOF(文件號文件號)/Len(記錄型變量記錄型變量) 然后然后:Put #1, k, x (x為要添加的記錄變量為要添加的記錄變量)v刪除記錄的方法刪除記錄的方法: 把除需刪除記錄之外的所有其它記錄寫到另一個文件把除需刪除記錄之外的所有其它記錄寫到另一個文件中中v例:創(chuàng)建一個簡單的學生成績管理信息系統(tǒng):例:創(chuàng)建一個簡單的學生成績管理信息系統(tǒng):(1)學
24、生信息包括姓名和學號等,分班級存放在不同)學生信息包括姓名和學號等,分班級存放在不同的文件中,每班對應(yīng)一個文件;程序中包括學生信的文件中,每班對應(yīng)一個文件;程序中包括學生信息管理模塊,可以進行簡單的修改。息管理模塊,可以進行簡單的修改。(2)成績信息包括學號、姓名、成績,每門課每個班)成績信息包括學號、姓名、成績,每門課每個班對應(yīng)一個文件輸入成績時,學生的姓名和學號采用對應(yīng)一個文件輸入成績時,學生的姓名和學號采用列表方式選擇輸入。列表方式選擇輸入。(3)成績分析模塊包括求平均成績、按成績檔次統(tǒng)計)成績分析模塊包括求平均成績、按成績檔次統(tǒng)計人數(shù)等,統(tǒng)計結(jié)果存放到文件中。人數(shù)等,統(tǒng)計結(jié)果存放到文件
25、中。例題:創(chuàng)建一個隨機文件,然后讀出其中內(nèi)容,顯示在文本框中:例題:創(chuàng)建一個隨機文件,然后讀出其中內(nèi)容,顯示在文本框中:在窗體中創(chuàng)建一個文本框在窗體中創(chuàng)建一個文本框text1,兩個命令按鈕,兩個命令按鈕command1和和command2,點擊,點擊command1(寫入文件)時創(chuàng)建文件,點擊(寫入文件)時創(chuàng)建文件,點擊command2(讀出文件)時把文件中(讀出文件)時把文件中的數(shù)據(jù)讀出來,顯示在文本框中。下面是程序代碼:的數(shù)據(jù)讀出來,顯示在文本框中。下面是程序代碼:自定義數(shù)據(jù)類型(記錄類型,在窗體的通用代碼段中聲明)自定義數(shù)據(jù)類型(記錄類型,在窗體的通用代碼段中聲明)Private Typ
26、e Record ID As Integer Name As String * 20 End Type創(chuàng)建文件的代碼,創(chuàng)建文件的代碼,Command1的單擊事件的單擊事件Private Sub Command1_Click() 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 & recordnumber Put #1, recordnu
27、mber, MyRecord Next recordnumberClose #1End Sub讀出文件的代碼(讀出文件的代碼(Command2的單擊事件)的單擊事件)Private Sub Command2_Click()Dim MyRecord As RecordOpen TESTFILE For Random As #1 Len = Len(MyRecord)While Not EOF(1) Get #1, , MyRecord Text1.Text=Text1.Text & Chr(10) & Chr(13) & Chr(10) & Chr(13) &am
28、p; MyRecord.ID & & MyRecord.NameWendClose #1End Sub 二進制文件是一個字節(jié)流,文件系統(tǒng)并不解釋各字節(jié)的意義,解釋工作由具體的應(yīng)用程序完成。 以二進制方式訪問文件有下述特點: 可以直接訪問文件中的所有數(shù)據(jù)。 由應(yīng)用程序根據(jù)需要解釋數(shù)據(jù)的意義。 訪問文件的語句不更改原始數(shù)據(jù)的所有內(nèi)容。 二進制文件每一次讀寫是以字節(jié)為單位對數(shù)據(jù)進行訪問操作的,它允許用戶讀寫或修改文件中的任何字節(jié)信息。當把二進制數(shù)據(jù)寫入文件中時,使用Byte數(shù)據(jù)類型的數(shù)組,而不是String變量。String被認為包含的是字符,而二進制型數(shù)據(jù)可能無法正確地存儲在String變量中。 當要保持文件的尺寸盡量小時,應(yīng)使用二進制文件。13.4 二進制文件一、二進制文件的打開Open 文件名 For Binary As #文件號二、二進制文件的寫操作Put #文件號,位置,變量名寫入長度等于變量長度的數(shù)據(jù)。三、二進制文件的讀操作GET #文件號,位置,變量名 從指定位置開始讀出長度等于變量長度的數(shù)據(jù)存入變量中,數(shù)據(jù)讀出后移動變量長度位置,如
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 招生協(xié)會活動策劃方案(3篇)
- 外貿(mào)開店活動方案策劃(3篇)
- 童書展活動策劃方案(3篇)
- 吉林省松原市前郭爾羅斯蒙古族自治縣2026屆九年級上學期期末考試英語試卷(含筆試答案無聽力音頻及原文)
- 醫(yī)療資源短缺預警與彈性配置機制
- 醫(yī)療設(shè)備采購質(zhì)量管理體系系統(tǒng)方法
- 醫(yī)療設(shè)備維護與醫(yī)院管理創(chuàng)新案例
- 2026年中共漯河市委宣傳部所屬事業(yè)單位人才引進備考題庫完整參考答案詳解
- 婦產(chǎn)科臨床技能:新生兒臀部護理課件
- 2026年北京市懷柔區(qū)政務(wù)服務(wù)和數(shù)據(jù)管理局公開招聘行政輔助人員備考題庫及答案詳解參考
- 2025年河南農(nóng)業(yè)大學馬克思主義基本原理概論期末考試真題匯編
- 2025年國企副總經(jīng)理年終述職報告
- 昆山鈔票紙業(yè)有限公司2026年度招聘備考題庫及一套答案詳解
- 施工消防安全評估措施
- 高考語文復習古代詩歌形象鑒賞課件
- 2025中國醫(yī)學科學院北京協(xié)和醫(yī)學院勞務(wù)派遣制工作人員招聘3人筆試備考重點試題及答案解析
- 兒科健康評估與護理
- 四診合參在護理評估中的綜合應(yīng)用
- 2026年青海省交通控股集團有限公司招聘(45人)筆試考試參考題庫及答案解析
- 《PCBA樣品承認書》模版
- GA/T 1073-2013生物樣品血液、尿液中乙醇、甲醇、正丙醇、乙醛、丙酮、異丙醇和正丁醇的頂空-氣相色譜檢驗方法
評論
0/150
提交評論