




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第 9 9 章章 數(shù)據(jù)文件數(shù)據(jù)文件本章主要內(nèi)容9.1 文件概述文件概述9.2 順序文件順序文件9.3 隨機文件隨機文件9.4 二進制文件二進制文件9.5 文件的基本操作文件的基本操作9.6 文件系統(tǒng)空間文件系統(tǒng)空間9.1 文件概述 文件可以將程序運行時輸入的數(shù)據(jù)、運行后產(chǎn)生的結(jié)果保存在外存中,供用戶隨時使用。 6.1.16.1.1數(shù)據(jù)文件的基本概念數(shù)據(jù)文件的基本概念 文件是一組相關(guān)信息的集合,是操作系統(tǒng)管理信息的基本單位。 VB提供了3種訪問數(shù)據(jù)文件的方法: 使用VB語句和函數(shù)對文件進行讀取、修改、復(fù)制等訪問及操作。通過Windows的API函數(shù)進行操作。使用VB提供的FSO對文件進行訪問。
2、 姓名性別年齡職稱愛好張三男20助理工程師電影,運動李四男35高級工程師書法,讀書,電影王五男30工程師健身,音樂字段字段記錄記錄 文件的結(jié)構(gòu) 數(shù)據(jù)文件由記錄組成,每條記錄由字段組成,字段則由字符組成。如:順序文件 數(shù)據(jù)是以ASCII碼形式存儲的字符。特點:v記錄只能按照記錄的順序依次讀/寫,不能隨意訪問記錄。v結(jié)構(gòu)簡單。v查找記錄速度慢,必須按順序進行。v讀/寫操作不能同時進行。隨機文件 隨機文件中的每條記錄的長度相同,每條記錄都有惟一的一個記錄號(索引)。特點:v可以同時進行讀/寫操作。v可直接定位到某條記錄,查找記錄較為迅速。v不能直接查看文件中的內(nèi)容。二進制文件 二進制文件是字節(jié)的集合
3、,以字節(jié)為單位進行讀寫操作,它沒有隨機文件那樣嚴格的文件結(jié)構(gòu)。特點:v靈活性大,占空間小。v不能直接查看文件中的內(nèi)容。9.1.2 9.1.2 文件的打開與關(guān)閉文件的打開與關(guān)閉文件操作步驟 v打開或新建文件 如果文件已經(jīng)存在,則打開該文件;如果不存在,則新建一個文件v讀/寫操作v關(guān)閉文件 Open語句 一般格式為: Open 文件名 For 模式 Access 存取類型 鎖定 As #文件號 Len=reclength 功能:按指定的方式打開一個文件,并為該文件指定一個文件號。 說明: (1) 打開文件后,自動產(chǎn)生一個指向文件讀寫位置的文件指針。 (2) 文件名是一個字符串表達式,用于指定文件名
4、,該文件名可以包含路徑。 (3) 模式:指定文件打開的模式,共有5種. v Input:以讀方式打開順序文件,從順序文件中輸入(讀)數(shù)據(jù)到內(nèi)存。文件不存在時會出錯。vOutput:以寫方式打開順序文件,將內(nèi)存中的數(shù)據(jù)輸出(寫)到順序文件中。若文件已存在,則在打開該文件的同時刪除文件中的全部數(shù)據(jù);否則新建一個文件。vAppend:以追加方式打開順序文件,打開文件后,文件指針位于文件的末尾。若文件已存在,則打開該文件并在其尾部追加數(shù)據(jù);若文件不存在,則新建一個文件,相當(dāng)于以O(shè)utput方式打開文件。vRandom:以隨機文件方式打開文件,可省略。vBinary:以二進制文件方式打開文件。(4) A
5、ccess存取類型 用于指定打開的文件可以進行的操作。存取類型包括:vRead:打開只讀文件。vWrite:打開只寫文件。vRead Write:打開讀/寫文件。(5) 文件號 用于指定一個文件號,范圍是1到511之間的整數(shù),讀寫文件時用文件號代替文件名。可使用 FreeFile 函數(shù)得到下一個可用的文件號。 例: Open d:data.txt For Random As #1 表示以隨機方式打開d盤根目錄下的data.txt文件,文件號為1。 Close語句 一般格式為: Close #文件號1,#文件號2 功能: 用來關(guān)閉打開的文件。 說明: 若在Close語句中沒有指定文件號,則關(guān)閉所
6、有已打開的文件。小結(jié)v在進行讀/寫操作之前都必須先打開文件。v若由文件名指定的文件不存在,在使用Append、Binary、Output、或Random模式打開文件時,可新建一個文件。v若模式是Binary方式,則Len子句會被忽略掉。v使用Open語句時,如果在代碼中沒有使用絕對路徑指定文件的存儲位置,則需要將工程文件與數(shù)據(jù)文件保存在同一目錄中,否則讀操作會提示“文件未找到”的錯誤。9.2 順序文件 順序文件的讀操作 vInput語句 一般格式為: Input #文件號,變量列表 功能:用于讀取順序文件中的數(shù)據(jù),并保存在變量列表中?!纠?.1】將磁盤文件in1.txt中的20個整數(shù),讀入到一
7、維數(shù)組Arr中,找到并輸出其中的最大值和最小值。分析:文件in1.txt應(yīng)與工程文件存放在同一目錄下,或者在Open語句的文件名中指定絕對路徑。下面的代碼只列出文件操作部分!例9.1Dim Arr(1 To 20) As Integer Private Sub Command1_Click() Dim i As Integer Open in1.txt For Input As #1 For i = 1 To 20 Input #1, Arr(i) 從文件中讀取數(shù)據(jù)存入數(shù)組從文件中讀取數(shù)據(jù)存入數(shù)組 Next For i = 1 To 20 Text1.Text = Text1.Text &am
8、p; Arr(i) & Space(1) If i Mod 4 = 0 Then Text1.Text = Text1 & vbCrLf NextEnd SubvLine Input語句 一般格式:Line Input #文件號,字符串型變量 功能:從已打開的順序文件中讀出一行信息并賦給字符串變量?!纠?.2】使用Line Input語句讀取磁盤文件in2.txt中的數(shù)據(jù),并顯示在文本框中。程序代碼如下:例9.2Dim Arr(1 To 20) As Integer Private Sub Command1_Click() Dim i As Integer Open in1.t
9、xt For Input As #1 For i = 1 To 20 Input #1, Arr(i) 從文件中讀取數(shù)據(jù)存入數(shù)組從文件中讀取數(shù)據(jù)存入數(shù)組 Next For i = 1 To 20 Text1.Text = Text1.Text & Arr(i) & Space(1) If i Mod 4 = 0 Then Text1.Text = Text1 & vbCrLf NextEnd Subv Input 函數(shù) 一般格式為:Input(字符數(shù), #文件號) 功能:從指定文件的當(dāng)前位置讀取指定個數(shù)的字符。 說明:返回所讀出的所有字符,包括回車符、空格、換行符等。【
10、例9.3】使用Input函數(shù)讀取例9.2中使用的in2.txt文件,并輸出在窗體上。例9.3Private Sub Form_Activate() Dim x As String Me.FontName = 隸書隸書 Me.FontSize = 14 Open in2.txt For Input As #1 Do While Not EOF(1) x = Input(1, #1) If x Chr(13) Then Print x; 可改為可改為Chr(10) Loop Close #1End Sub順序文件的寫操作 以O(shè)utput或Append模式打開順序文件,并使用Write #語句或Pr
11、int #語句寫入數(shù)據(jù)。vWrite #語句 一般格式為:Write #文件號,輸出列表 功能:將輸出列表中的數(shù)據(jù)寫入指定的順序文件。 說明: (1) 輸出列表可以是常量、變量和表達式,各輸出項之間用逗號隔開;若省略,則輸出一個空行。 (2) 寫入文件中的數(shù)據(jù)之間自動加逗號,并在字符串兩邊加雙引號。 (3) 所有數(shù)據(jù)寫完后,在最后加一個回車換行符?!纠?.4】使用Write #語句將10-99以內(nèi)的所有素數(shù)輸出到Out.txt文件中。程序代碼如下:例9.4Private Sub Form_Load() Dim flag As Boolean 標志變量,為True時表示當(dāng)前數(shù)為素數(shù) Open o
12、ut.txt For Output As #1 For i = 11 To 99 flag = True For j = 2 To Sqr(i) If i Mod j = 0 Then flag = False:Exit For End If Next If flag Then Write #1, i 當(dāng)前數(shù)為素數(shù),輸出到Out.txt中 Next Close #1 MsgBox 已經(jīng)將數(shù)據(jù)寫入文件,請查閱。, vbInformation + _ vbOKOnly, 提示 EndEnd Sub【例9.5】在例9.4所生成的Out.txt文件中追加寫入1-20之間的偶數(shù)。分析:追加數(shù)據(jù)使用App
13、end模式。程序代碼如下:Private Sub Form_Load() Dim i As Integer Open out.txt For Append As #1 追加寫入數(shù)據(jù) For i = 1 To 10 Write #1, 2 * i 將偶數(shù)追加寫入到Out.txt中 Next Close #1 MsgBox 已經(jīng)將偶數(shù)追加寫入文件中,請查閱。, _ vbInformation + vbOKOnly, 提示 EndEnd Sub例9.5v Print #語句 一般格式為:Print #文件號,輸出列表 功能:將輸出列表中的數(shù)據(jù)寫入指定的順序文件。 說明:可使用“,”或“;”來控制輸出
14、格式?!纠?.6】比較Print #語句和Write #語句在順序文件中的輸出結(jié)果。Private Sub Form_Load() Open out1.txt For Output As #1 Print #1, 張三張三, 男男, 20 Print #1, 張三張三; 男男; 20 Write #1, 張三張三, 男男, 20 Close #1 MsgBox 數(shù)據(jù)已經(jīng)寫入文件!數(shù)據(jù)已經(jīng)寫入文件! EndEnd Sub例9.6與讀/寫操作有關(guān)的函數(shù) v EOF函數(shù) 一般格式為:EOF(文件號) 功能:測試是否到達文件尾。 說明:若已經(jīng)到達文件尾,則返回True,否則返回False。v LOF函
15、數(shù) 一般格式為:LOF(文件號) 功能:返回文件的長度,以字節(jié)為單位。 說明:若返回值為0,表示空文件。vFreeFile函數(shù) 一般格式為:FreeFile(文件號范圍) 功能:返回下一個可供Open語句使用的文件號。 說明:該函數(shù)的返回值是1-511之間的整數(shù)。v Seek函數(shù) 一般格式為:Seek(文件號) 功能:返回由文件號指定的文件中待讀/寫的位置。 說明:該函數(shù)主要用于隨機文件,返回已讀/寫記錄的下一條記錄的記錄號。9.3 9.3 隨機文件隨機文件 隨機文件中每條記錄的長度都相同,各記錄中對應(yīng)字段的類型也必須相同。每條記錄都有一個記錄號,根據(jù)記錄號就可以任意地讀/寫數(shù)據(jù)。 為了準確地
16、讀/寫記錄中的數(shù)據(jù),通常在對文件操作之前,先定義一種用戶自定義類型,稱為記錄類型。隨機文件操作的一般步驟如下:(1) 定義記錄類型并聲明該類型的變量。(2) 在Open語句中使用Random模式打開隨機文件。(3) 使用Get #語句從文件中讀取記錄;使用Put #語句將記錄寫入文件。(4) 關(guān)閉隨機文件。定義記錄類型的一般格式為:Public | Private Type 記錄類型名 字段名1 As 類型字段名2 As 類型 字段名n As 類型End Type說明:v記錄類型名的命名規(guī)則與變量相同。若使用記錄類型的變量,用Dim語句聲明記錄類型的變量。v每個字段名是記錄類型的一個成員,可是
17、基本數(shù)據(jù)類型,也可是記錄類型,若是字符串,必須定長。v記錄類型必須定義在通用聲明段,通常定義在標準模塊中,默認為Public。如果定義在窗體模塊中,必須用Private關(guān)鍵字加以限定。隨機文件的讀操作 使用Get #語句,一般格式為: Get #文件號,記錄號,變量 功能:從隨機文件中讀取記錄號所對應(yīng)的記錄到變量中。 說明:記錄號指出讀取的是第幾條記錄,如果省略,表示讀取指針指向的當(dāng)前記錄。隨機文件的寫操作 使用Put #語句,一般格式為: Put #文件號,記錄號,變量 功能:將變量中的數(shù)據(jù)寫入隨機文件由記錄號對應(yīng)的記錄中。 說明:記錄號指出寫入到第幾條記錄,如果缺省,表示寫入到指針指向的當(dāng)
18、前記錄。 注意:在Get #和Put #語句中,記錄號省略時,其后的分隔符逗號不能省略。例如:Get #1,5,x 將隨機文件(文件號為1)中第5條記錄讀入到變量x中Put #2, 7, y 將變量y中的數(shù)據(jù)寫入到隨機文件(文件號為2)中的第7條記錄中Put #2, , y 將變量y中的數(shù)據(jù)寫入到隨機文件(文件號為2)中的第8條記錄中【例9.7】建立一個隨機文件,其中包含3名學(xué)生的3門課程的成績,下表所示。使用Put #語句寫入3名學(xué)生的成績,然后用Get #語句按輸入的相反順序讀出3名學(xué)生的成績并輸出。分析:定義一個記錄類型:Stu_Sco,它包含3個成員:Chi、Mat和Eng,分別表示3
19、門課程的成績;聲明一個Stu_Sco類型的變量ss,用于存放記錄數(shù)據(jù)。記錄號語文數(shù)學(xué)英語1988765288928931006576例9.7Dim ss As Stu_ScoPrivate Sub Form_Activate() Caption = 隨機文件的寫入與讀取 Print 記錄號, 語文, 數(shù)學(xué), 英語 Open Score.dat For Random As #1 Len = Len(ss) For i = 1 To 3 ss.Chi = Val(InputBox(請輸入第 & i & 個學(xué)生的語文成績:, 輸入成績) ss.Mat = Val(InputBox(請
20、輸入第 & i & 個學(xué)生的數(shù)學(xué)成績:, 輸入成績) ss.Eng = Val(InputBox(請輸入第 & i & 個學(xué)生的英語成績:, 輸入成績) Put #1, i, ss 寫入記錄 NextPrivate Type Stu_Sco Chi As Integer Mat As Integer Eng As IntegerEnd Type程序代碼如下:For i = 3 To 1 Step -1 讀出記錄并顯示在窗體上 Get #1, i, ss Print i, ss.Chi, ss.Mat, ss.Eng Next Close #1End Sub9.4
21、 9.4 二進制文件二進制文件 可以將二進制文件看成長度為1的隨機文件。 同樣可以使用Get #和Put #語句對文件進行任意讀/寫。與隨機文件不同的是,二進制文件的讀/寫單位為字節(jié),而隨機文件的讀/寫單位為記錄。對二進制文件進行讀/寫時,需在Open語句中指定Binary模式。二進制文件的讀操作 一般格式為:Get #文件號,位置,變量 功能:將二進制文件中的數(shù)據(jù)讀入到變量中。 說明:位置表示讀取的起始字節(jié)位置,文件中的第1個字節(jié)位于位置1,第2個字節(jié)位于位置2,以此類推。二進制文件的寫操作 一般格式為:Put #文件號,位置,變量 功能:將變量中的數(shù)據(jù)寫入二進制文件。 說明:位置表示寫入數(shù)
22、據(jù)的字節(jié)位置,將變量中長度為Len(變量)個字節(jié)的數(shù)據(jù)寫入到二進制文件中指定的位置。如果省略,表示寫入到指針指向的當(dāng)前位置?!纠?.8】 將兩個字符串“你好,”“北京?!狈謩e在位置10和40處用Put #語句寫入數(shù)據(jù)文件“file1.dat”,用Get #語句讀出數(shù)據(jù)并顯示在窗體上。程序代碼如下:例9.8Private Sub Form_Activate() Dim str1 As String * 8, str2 As String * 8 Dim s1 As String * 8, s2 As String * 8 str1 = 你好, str2 = 北京。 Open file1.dat
23、For Binary As #1 Put #1, 10, str1 Put #1, 40, str2 MsgBox 數(shù)據(jù)已經(jīng)寫入指定文件! Get #1, 10, s1 Get #1, 40, s2 Print s1; s2 Close #1End Sub9.5 9.5 文件的基本操作文件的基本操作常用的文件、文件夾操作語句如下。CurDir語句 一般格式為:CurDir 驅(qū)動器 功能:返回一個字符串,表示某驅(qū)動器的當(dāng)前路徑。 說明:驅(qū)動器是一個字符串表達式,若省略該參數(shù),則返回當(dāng)前驅(qū)動器的路徑。默認情況下,Visual Basic的安裝路徑就是當(dāng)前工程所在的路徑。Private Sub Fo
24、rm_Activate() Print CurDir Print CurDir(d)End SubChDrive語句 一般格式為:ChDrive 驅(qū)動器 功能:改變當(dāng)前驅(qū)動器。 說明:驅(qū)動器是一個字符串表達式,它指定一個存在的驅(qū)動器;如果使用空串 (),則當(dāng)前的驅(qū)動器將不會改變;如果驅(qū)動器參數(shù)中有多個字母,則ChDrive只會使用首字母。例如:ChDrive D 改變當(dāng)前驅(qū)動器為D盤ChDrive ED 改變當(dāng)前驅(qū)動器為E盤MkDir語句 一般格式為:MkDir 路徑名 功能:創(chuàng)建一個新的目錄(文件夾) 說明:路徑名是一個字符串,可以包含驅(qū)動器符,如果不包含驅(qū)動器符,則在當(dāng)前驅(qū)動器下建立一個新
25、的目錄。 注意:在指定路徑下建立的目錄必須是惟一的,否則會提示“路徑/文件訪問錯誤”。例如: MkDir D:ProjectChDir語句 一般格式為:ChDir 路徑名 功能:更改當(dāng)前目錄 說明:路徑名是一個字符串表達式,它把指定的目錄設(shè)置為默認目錄。例如: ChDir mypath RmDir語句 一般格式為:RmDir 路徑名 功能:刪除一個已經(jīng)存在的目錄 說明:路徑名是一個字符串表達式,用來指定要刪除的目錄,路徑名可以包含驅(qū)動器,如果沒有指定驅(qū)動器,則RmDir刪除當(dāng)前驅(qū)動器上指定的目錄。例如:RmDir C:mypath FileCopy語句 一般格式為:FileCopy 源文件名,
26、 目標文件名 功能:將源文件復(fù)制到目標文件 說明:其中源文件名、目標文件名均為一個字符串表達式,均可包含路徑,分別表示復(fù)制操作的源文件和目標文件。 注意:使用FileCopy語句時源文件不能打開,否則會產(chǎn)生錯誤。例如:FileCopy D:Projectin.txt, C:Projectout.txtKill語句 一般格式為:Kill 文件名 功能:從磁盤中刪除指定的文件 說明:文件名是字符串表達式,可以包含路徑,其中可以使用通配符“*”和“?”。例如:Kill *.doc 注意:因為該語句可以刪除文件,所以一定要慎用,以免帶來不必要的損失。Name語句 一般格式為:Name 原路徑名 As
27、新路徑名 功能:重命名一個文件或目錄 說明:原路徑名是一個字符串表達式,表示已存在的文件名或目錄名;新路徑名是一個字符串表達式,表示新的文件名或目錄名?!纠?.9】在D盤根目錄下創(chuàng)建一個文件夾Project,然后將C:WindowsSystem32目錄下的calc.exe文件復(fù)制到新建的Project文件夾中,并改名為“計算器.exe”。程序代碼如下:Private Sub Form_Load() MkDir D:Project FileCopy C:Windowssystem32calc.exe, _ D:Project計算器計算器.exe MsgBox 文件操作結(jié)束文件操作結(jié)束, vbInformation, 提示提示 EndEnd Sub例9.99.6 9.6 文件系統(tǒng)控件文件系統(tǒng)控件 在VB中,用戶可以使用3個文件系統(tǒng)控件,分別是DriveListBox、D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 供銷保價合同范本
- 農(nóng)村臨時建房承包合同范本
- 書畫采購合同范本
- 出版合同范本填寫
- 書贈與合同范本
- 農(nóng)莊裝修合同范本
- 出資借款合同范本
- 分體機空調(diào)保養(yǎng)合同范本
- 企業(yè)合作運營合同范本
- 產(chǎn)品收款合同范本
- 拆遷征收代理服務(wù)投標方案
- 變壓器拆除申請
- 說課的技巧和方法專題講座
- 園林景觀工程報價表
- 【語文大單元教學(xué)研究國內(nèi)外文獻綜述6400字】
- 23S519 小型排水構(gòu)筑物(帶書簽)
- 2023年黑龍江省哈爾濱市單招數(shù)學(xué)摸底卷(含答案)
- 涉詐風(fēng)險賬戶審查表
- 浙江臺州仙居富民村鎮(zhèn)銀行2023年招聘人員筆試歷年高頻考點試題答案帶詳解
- 教科版六下科學(xué)全冊課時練(含答案)
- 機械制造技術(shù)基礎(chǔ)PPT(中職)全套教學(xué)課件
評論
0/150
提交評論