使用文件可以將應(yīng)用程序所處理的數(shù)據(jù)以文件的形式保存起來ppt課件_第1頁
使用文件可以將應(yīng)用程序所處理的數(shù)據(jù)以文件的形式保存起來ppt課件_第2頁
使用文件可以將應(yīng)用程序所處理的數(shù)據(jù)以文件的形式保存起來ppt課件_第3頁
使用文件可以將應(yīng)用程序所處理的數(shù)據(jù)以文件的形式保存起來ppt課件_第4頁
使用文件可以將應(yīng)用程序所處理的數(shù)據(jù)以文件的形式保存起來ppt課件_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 文件是指存放在外存儲器(如磁盤)上的信息集合 使用文件可以將應(yīng)用程序所處理的數(shù)據(jù)以文件的形式保存起來 程序文件和數(shù)據(jù)文件 本章主要內(nèi)容 數(shù)據(jù)文件概述 順序文件 隨機(jī)文件 文件基本操作 文件系統(tǒng)對象(FSO)簡介第第8 8章章 數(shù)據(jù)文件數(shù)據(jù)文件 8.1.1 數(shù)據(jù)文件的結(jié)構(gòu) 數(shù)據(jù)文件由記錄組成,記錄由字段組成,字段由字符組成 記錄記錄1 數(shù)據(jù)文件數(shù)據(jù)文件記錄記錄2 學(xué)號 姓名 951001 951001 張三張三 學(xué)號 姓名 951002 951002 李四李四 字段字段 8.1 8.1 數(shù)據(jù)文件概念數(shù)據(jù)文件概念 (1)順序文件:文本文件。文件中的記錄按順序一個接一個地排列。無法靈活地隨意存取它

2、。只適用于有規(guī)律的、不經(jīng)常修改的數(shù)據(jù) (2)隨機(jī)文件:隨機(jī)文件的每一個記錄都有固定的長度,每一個記錄都有記錄號,這種文件的特點(diǎn)是允許用戶存取文件中任一個記錄。可以同時進(jìn)行讀或?qū)懖僮鞔嫒牒妥x出速度較快,數(shù)據(jù)容易更新 (3)二進(jìn)制文件:可理解為長度為1的特殊的隨機(jī)文件8.1.2 文件類型文件類型 (1) 翻開(或新建)文件 (2) 進(jìn)行讀、寫操作 系統(tǒng)設(shè)置文件指針,用來記住當(dāng)前讀寫的位置 (3) 關(guān)閉文件 8.1.3 文件處理的一般步驟 1. 打開文件(Open) Open 文件名 For 形式Access 存取類型鎖定 As #文件號Len=記錄長度 說明:(1)文件名; (2) 模式用于指定文

3、件訪問的方式,包括: Append從文件末尾添加 Binary二進(jìn)制文件 Input順序輸入 Output順序輸出 Random隨機(jī)存取方式 (3)文件號(或稱文件緩沖區(qū)) (4)存取類型:訪問文件的類型,為Read(只讀)、Write(只寫)、 Read Write(讀寫) (5)鎖定:限制其他用戶或其他進(jìn)程對文件進(jìn)行讀寫操作 Shared(共享)、Lock Read(禁止讀)、Lock Write(禁止寫)、 Lock Read Write(禁止讀寫) (6)Len:用來指定每個記錄的長度(字節(jié)數(shù)) 例如: Open d:cj1.dat For Output As #18.1.4 文件的打

4、開和關(guān)閉文件的打開和關(guān)閉2. 關(guān)閉文件(Close) 打開的文件使用完后必須關(guān)閉。 關(guān)閉文件的語句格式: Close # 文件號1 ,# 文件號2 例如: Close #1 1. FreeFile函數(shù) 格式:FreeFile 功能:返回一個在程序中沒有使用的文件號 例如: FileNo=FreeFile Open D:MyFile.txt For Output As FileNo 2. Seek語句和Seek函數(shù) Seek函數(shù)的格式:Seek(文件號) 功能:返回文件指針的當(dāng)前位置 對于隨機(jī)文件,Seek函數(shù)返回指針當(dāng)前所指的記錄號。對于順序文件,Seek函數(shù)返回指針?biāo)诘漠?dāng)前字節(jié)位置(從頭算

5、起的字節(jié)數(shù)) Seek語句的格式:Seek #文件號,位置 功能:將指定文件的文件指針設(shè)置在指定位置,以便進(jìn)行下一次讀或?qū)懖僮?對于隨機(jī)文件,“位置是一個記錄號;對于順序文件,“位置表示字節(jié)位置 8.1.5 8.1.5 相關(guān)的語句和函數(shù)相關(guān)的語句和函數(shù) 3. Eof函數(shù) 格式:Eof(文件號) 功能:測試與文件號相關(guān)的文件是否已達(dá)到文件的結(jié)束位置。如果是,函數(shù)值為真值,否則為假值。 使用Eof是為了避免在文件結(jié)束處讀取數(shù)據(jù)而發(fā)生錯誤 4. Lof函數(shù) 格式:Lof(文件名) 功能:返回與文件號相關(guān)的文件的總字節(jié)數(shù) 5Loc函數(shù) 格式:Loc(文件號) 功能:返回與文件號相關(guān)的文件的當(dāng)前讀寫位置

6、 8.2.1 順序文件的寫入操作 以O(shè)utput或Append方式打開文件,然后使用Write#語句或Print#語句將數(shù)據(jù)寫入文件中 1. Write語句 格式:Write #文件號 ,表達(dá)式表 功能:將表達(dá)式的值寫到與文件號相關(guān)的順序文件中 每個Write語句向順序文件寫入一個記錄(不定長),它會自動地用逗號分開每個表達(dá)式的值。給字符串加上雙引號 在最后一個字符寫入后,插入一個回車換行符(Chr(13) + Chr(10),以此作為記錄結(jié)束的標(biāo)記。 例如:Write #1, Good Afternoon, 20198.2 8.2 順序文件順序文件 把150的50個整數(shù),以及這些數(shù)中能被7整

7、除的數(shù)分別存入兩個文件中,文件名為num1和num2,文件存放在VB缺省文件夾下 Private Sub Form_Load() Open num1.txt For Output As #1 Open num2.txt For Output As #2 For i = 1 To 50 Write #1, i If i Mod 7 = 0 Then Write #2, i Next i Close #1, #2 Unload Me End Sub 說明:num1.txt文件中一共寫入50個記錄,而num2.txt文件只寫入其中能被7整除的若干個記錄例例8.1 把把150各數(shù)及能被各數(shù)及能被7整除

8、的數(shù)分別存入兩個文件中整除的數(shù)分別存入兩個文件中 在例8.1所生成的num2.txt文件中,存放了若干個能被7整除的數(shù),現(xiàn)要求再加入51200范圍內(nèi)能被7整除的數(shù) 程序代碼如下: Private Sub Form_Load() Open num2.txt For Append As #1 For i = 51 To 200 If i Mod 7 = 0 Then Write #1, i Next i Close #1 Unload Me End Sub例例8.2 在在num2.txt文件中加入文件中加入51200范圍內(nèi)能范圍內(nèi)能 被被7整除的數(shù)整除的數(shù) 輸入某小組5名學(xué)生的成績(表8.1),存

9、放在“我的文檔”(C:My Documents)文件夾下的新建順序文件Cj2.txt 設(shè)計步驟如下: (1)創(chuàng)建應(yīng)用程序的用戶界面和設(shè)置對象屬性例例8.3 建立學(xué)生成績順序文件建立學(xué)生成績順序文件Cj2.txt (2) 設(shè)置事件過程 Form_Load():新建文件 Command1_Click():接收錄入信息,并以一個記錄存入文件中 Command2_Click():關(guān)閉文件和結(jié)束程序運(yùn)行 Private Sub Form_Load() Open “C:my documentsCj2.txt“ For Output As #1 End Sub Private Sub Command1_Cl

10、ick() Dim num As String * 6, name As String * 8, score As Integer num = Text1.Text name = Text2.Text score = Val(Text3.Text) Write #1, num, name, score 存入記錄 Text1.Text = 存完1個記錄后清空 Text2.Text = Text3.Text = Text1.SetFocus 設(shè)置焦點(diǎn) End Sub Private Sub Command2_Click() Close #1 End End Sub 程序運(yùn)行完成后,用Windows

11、記事本來打開該順序文件(文本文件),即可看到存入的文件內(nèi)容說明:在顯示的文件內(nèi)容中,字符串(學(xué)號、姓名)兩邊的引號是系統(tǒng)自動加入的。字段之間通過逗號隔開 2. Print語句 格式:Print #文件號,表達(dá)式表 作用與Write一樣。將一個或多個表達(dá)式的值寫到與文件號相關(guān)的順序文件中。其輸出數(shù)據(jù)格式與Print方法在窗體上輸出格式相似。 例如: Print #1, num, name, score 對應(yīng)按區(qū)格式 Print #1, num;name;score 對應(yīng)緊湊格式 先用Input方式打開文件,然后采用Input或Line Input語句從文件中讀出數(shù)據(jù)。通常,Input用來讀出Wr

12、ite寫入的記錄內(nèi)容,而Line Input用來讀出Print寫入的記錄內(nèi)容 1. Input語句 一般格式:Input #文件號,變量名表 功能:從指定文件中讀出一個記錄。變量個數(shù)和類型應(yīng)該與要讀取的記錄所存儲的數(shù)據(jù)一致。 打開文件時,文件指針指向文件中的第1個記錄,以后每讀取一個記錄,指針就向前推進(jìn)一次。如果要重新從文件的開頭讀數(shù)據(jù),則先關(guān)閉文件后打開8.2.2 8.2.2 順序文件的讀出操作順序文件的讀出操作 程序代碼如下: Private Sub Form_Load() Show Open data1.txt For Output As #1 a = 123 : b$ = ABCD W

13、rite #1, a, b$ 存入 Close #1 Open data1.txt For Input As #1 Input #1, c, d$ 讀出 Close #1 Print c, d$ End Sub 程序運(yùn)行后,輸出結(jié)果如下: 123 ABCD例例8.4 一個存取數(shù)據(jù)的示例一個存取數(shù)據(jù)的示例 已知文件“num2.txt中存放一批能被7整除的數(shù)(見例8.1及例8.2),現(xiàn)要求把這些數(shù)顯示出來。每行顯示4個數(shù)。 Private Sub Form_Load() Show k = 0 Open num2.txt For Input As #1 Do While Not EOF(1) 文件未

14、結(jié)束時,循環(huán) Input #1, x Print x, k = k + 1 If k Mod 4 = 0 Then Print 每顯示4個數(shù)后換行 Loop Close #1 End Sub例例8.5 從文件從文件“num2.txt中讀取數(shù)據(jù)中讀取數(shù)據(jù) 從文件Cj2.txt(見例8.3)中讀出5個學(xué)生的資料,顯示在列表框中,并求出平均分 (1) 創(chuàng)建應(yīng)用程序的用戶界面和設(shè)置對象屬性 例例8.6 從文件從文件Cj2.txt中讀出中讀出5個學(xué)生的資料個學(xué)生的資料 (2)編寫程序代碼 功能要求:單擊“查詢按鈕時,則打開文件后讀取文件中所有記錄內(nèi)容,并顯示在列表框List1中,計算得到的平均分顯示在文

15、本框Text1中 Private Sub Command1_Click() Dim n As String, m As String, s As Integer Dim x As String, t As Integer Open C:my documentsCj2.txt For Input As #1 t = 0 For i = 1 To 5 Input #1, n, m, s x = n + Space(2) + m + Str(s) List1.AddItem x :t = t + s Next i Close #1 Text1.Text = t / 5 End Sub 2. Line

16、 Input語句格式:Line Input #文件號,字符型變量功能:從打開的順序文件中讀出一個記錄,即一行信息 例8.7 Print語句和Line Input語句配合使用的示例 Private Sub Form_Load() Show Open mytxt.txt For Output As #1 a = 123 : b$ = ABCD Print #1, a, b$ 寫入第1個記錄 Print #1, a; b$ 寫入第2個記錄 Close #1 Open mytxt.txt For Input As #1 Line Input #1, x$ 讀出第1個記錄 Print x$ Line I

17、nput #1, x$ 讀出第2個記錄 Print x$ Close #1 End Sub 3. Input函數(shù) 格式:Input(字符數(shù),#文件號) 功能:從文件中讀取指定字符數(shù)的字符 例如:A$ =Input(20, #1) 順序文件的缺點(diǎn)是不能快速地存取所需的數(shù)據(jù),也不容易進(jìn)行數(shù)據(jù)的插入、刪除和修改等工作,因此對于經(jīng)常要修改數(shù)據(jù)或取出文件中個別數(shù)據(jù),均不適合使用,但對于數(shù)據(jù)變化不大,每次使用時又需要從頭往后順序地進(jìn)行讀寫,它還是不失為一種好的文件結(jié)構(gòu) 隨機(jī)文件中每一個記錄定長,并設(shè)置記錄號,記錄號從1開始。 存取記錄時,只要說明所需記錄的編號,系統(tǒng)就以此算出記錄所在位置,然后加以寫入或讀

18、出 8.3.1 初步認(rèn)識 例8.8 建立一個隨機(jī)文件,文件中包含10個記錄,每個記錄由一個數(shù)(1至10)的平方、立方和開方根三個數(shù)值組成,以該數(shù)作為記錄號8.3 8.3 隨機(jī)文件隨機(jī)文件 (1) 通過Type.End Type語句定義記錄類型,程序代碼如下: Private Type Numval Squre As Integer Cube As Long Sqroot As Single End Type (2)利用某一過程(本例采用事件過程Form_Load)來完成該隨機(jī)文件的存取操作,程序代碼如下:Dim nv As numval 定義一個定義一個numval類型類型的變量的變量nv 寫

19、入記錄程序?qū)懭胗涗洺绦蚨味蜳rivate Sub Form_Load() Open Data1.dat For Random As #1 Len = Len(nv) For i = 1 To 10 nv.squre = i * i nv.cube = i * i * i nv.sqroot = Sqr(i) Put #1, i, nv Next i 讀出記錄程序讀出記錄程序段段 Show For i = 2 To 10 Step 4 只讀出只讀出3個記個記錄錄 Get #1, i, nv Print 第第; i; 號記錄號記錄:, nv.squre, nv.cube, nv.sqroot Ne

20、xt i Close #1End Sub 運(yùn)行結(jié)果: 第2號記錄 4 8 1.414214 第6號記錄 36 216 2.44949 第10號記錄 100 1000 3.162278 進(jìn)行隨機(jī)文件存取操作,大致包括以下一些內(nèi)容: (1) 在打開文件進(jìn)行隨機(jī)訪問之前,使用TypeEnd Type語句定義一個記錄類型(如Numval),該類型包括多個數(shù)據(jù)項(xiàng),并與文件中記錄應(yīng)包括的域一致。 當(dāng)通過Dim定義一個變量(如nv)為一個記錄類型Numval時,該變量也就包含該類型的多個數(shù)據(jù)項(xiàng),以后可通過nv.squre、nv.cube、nv.sqroot進(jìn)行引用 (2) 指定Random類型打開文件,記錄

21、定長,打開文件后,就可以存或取任一個記錄 (3)分別通過Get和Put語句,并指定記錄號進(jìn)行讀一個記錄或存一個記錄 一定要建立好記錄與記錄號之間的關(guān)系 1. 讀語句格式:Get #文件號,記錄號,變量功能:從一個隨機(jī)文件中讀出指定記錄到一個變量 2. 寫語句 格式:Put #文件號,記錄號,變量功能:把變量的值寫入隨機(jī)文件的記錄中。 默認(rèn)情況下,記錄號編號為上一次使用的記錄號加18.3.2 存取操作 建立一個有5名職工工資信息的隨機(jī)文件,其中包括職工的職工號(從001開始)、姓名及工資三種數(shù)據(jù)。采用職工號為記錄號。設(shè)計步驟如下: (1) 在標(biāo)準(zhǔn)模塊Module1中用Type語句定義一個職工工資

22、記錄類型 Type Salary Name As String*8 定長字符串類型 Salary As Long End Type 不必把職工號作為記錄的一個數(shù)據(jù)項(xiàng)存入文件 (2)利用事件過程Form_Load來進(jìn)行文件處理例例8.9 8.9 建立職工工資隨機(jī)文件建立職工工資隨機(jī)文件 Private Sub Form_Load() Dim sal As salary Dim no As String * 3, recno As Integer Open Data2.dat For Random As #1 Len = Len(sal) For i = 1 To 5 s$ = 輸入第 + Str

23、(i) + 個職工的 no = InputBox(s$ + 編號) = InputBox(s$ + 姓名) sal.salary = Val(InputBox(s$ + 工資) recno = Val(no) 記錄號 Put #1, recno, sal 存入記錄 Next i Close #1 End End Sub (1)創(chuàng)建應(yīng)用程序的用戶界面 (2)設(shè)置對象屬性例8.10 對職工工資信息進(jìn)行查詢、增、改、除等操作 (3)編寫程序代碼 在標(biāo)準(zhǔn)模塊Module1中定義記錄類型和建立一個通用過程 Type salary name As String * 8 salary As

24、 Long End Type Public sal As salary, recno As Integer recno表示記錄號 檢查編號的通用過程 Function Cheno(no As String) As Boolean recno = Val(no) If recno 999 Then MsgBox 輸入的職工號超出范圍, 0, 檢查編號 Cheno = True Else Cheno = False End If End Function 利用事件過程Form_Load()來打開文件和顯示第一個記錄 Private Sub Form_Load() Open Data1.dat Fo

25、r Random As #1 Len = Len(sal) Get #1, 1, sal Text1.Text = Format(1, 000) Text2.Text = Text3.Text = sal.salary End Sub 編寫“查詢按鈕的Click事件過程 Private Sub Command1_Click() If Cheno(Text1.Text) Then Exit Sub If recno LOF(1) / Len(sal) Then MsgBox 無此記錄 Exit Sub End If Get #1, recno, sal Text2.Text =

26、 Text3.Text = Str(sal.salary) Text1.SetFocus 設(shè)置焦點(diǎn) End Sub 編寫“增加按鈕的Click事件過程 Private Sub Command2_Click() If Cheno(Text1.Text) Then Exit Sub = Text2.Text sal.salary = Val(Text3.Text) Put #1, recno, sal Text1.SetFocus End Sub 編寫“去除按鈕的Click事件過程 Private Sub Command3_Click() If Cheno(Te

27、xt1.Text) Then Exit Sub If recno LOF(1) / Len(sal) Then MsgBox 無此記錄 Exit Sub End If = 記錄內(nèi)容清空 sal.salary = 0 Text2.Text = 文本框清空 Text3.Text = Put #1, recno, sal Text1.SetFocus End Sub 編寫“關(guān)閉按鈕的Click事件過程 Private Sub Command4_Click() Close #1 Unload Me End Sub 可以在應(yīng)用程序中很方便地對文件和文件夾進(jìn)行操作 (1)建立文件夾語句(MrDir):MkDir 途徑文件夾名 例如:MkDir D:VBTemp(2)改變當(dāng)前文件夾語句(ChDir):ChDir 途徑 例如:ChDir D:VBDat (3)刪除文件夾語句(RmDir):RmDir 途徑文件夾名 例如:RmDir D:VBTemp(4)刪除文件語句(Kill):Kill 途徑文件名 例如:Kill D:VBd

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論