版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、YCF正版可修改PPT(中職)可視化編程應(yīng)用Visual Basic模塊7 文件的管理電子課件模塊7 文件的管理任務(wù)1 文件的結(jié)構(gòu)及訪問類型任務(wù)2 文件的處理任務(wù)3 文件處理常用命令、函數(shù)及語句任務(wù)4 文件管理控件任務(wù)1 文件的結(jié)構(gòu)及訪問類型 在計算機(jī)科學(xué)技術(shù)中,常用“文件”一同來表示輸入輸出操作的對象。所謂“文件”,是指記錄在外部介質(zhì)上的數(shù)據(jù)集合。例如,用Word或Excel編輯制作的文檔或表格就是一個文件,把它存儲到磁盤上就是一個磁盤文件,輸出到打印機(jī)上就是一個打印機(jī)文件。廣義地說,任何輸入輸出設(shè)備都是文件。計算機(jī)以這些設(shè)備為對象進(jìn)行輸入輸出,對這些設(shè)備統(tǒng)一按“文件”進(jìn)行處理。 在程序設(shè)計
2、中,文件是有用而且不可缺少的。這是因?yàn)? 文件是使一個程序可以對不同的輸入輸出進(jìn)行加工處理、產(chǎn)生相應(yīng)的輸出結(jié)果的常用手段 使用文件可以方便用戶,提高上機(jī)效率; 使用文件可以不受內(nèi)存大小的控制。因此,文件是重要的,在某些情況下,不使用文件將很難解決所遇到的實(shí)際問題。下一頁返回任務(wù)1 文件的結(jié)構(gòu)及訪問類型7.1.1文件結(jié)構(gòu) 文件有效地存儲數(shù)據(jù),數(shù)據(jù)必須以某種特定的方式存放,這種特定的方式稱為文件結(jié)構(gòu)。VB 6. 0的文件由記錄組成,記錄由字段組成,字段由字符組成。 (1)字符(Character):是構(gòu)成文件的最重要的單位。字符可以是數(shù)字、字母、特殊符號或單一字符。這里所說的“字符”一般稱為西文字
3、符,一個西文字符用一個字節(jié)存放。如果為漢字字符,包括漢字和“全角”字符,則通常用兩個字節(jié)來存放。也就是說一個漢字字符相當(dāng)于兩個西文字符。一般把用一個字節(jié)存放的西文字符稱為“半角”字符,而把漢字和兩個字節(jié)存放的字符稱為“全角”字符。注意,VB 6. 0支持雙字節(jié)字符,當(dāng)計算字符串長度時,一個西文字符和一個漢字都作為一個字符計算,但它們所占的空間是不一樣的。例如,字符串“VB 6. 0程序設(shè)計”的長度為6,而所占的字節(jié)數(shù)為l0。上一頁下一頁返回任務(wù)1 文件的結(jié)構(gòu)及訪問類型 (2)字段(Field):也稱域。字段由若干字符組成,用來表示一項數(shù)據(jù)。例如,郵政編碼“100084”就是一個字段,它由6個字
4、符組成;而姓名“李遠(yuǎn)哲”也是一個字段,它由3個漢字組成。 (3)記錄(Record:由一組相關(guān)的字段組成。例如,在通訊錄中,每個人的姓名、單位、地址、電話號碼、郵政編碼等構(gòu)成一個記錄,如表7-1所示。在VB 6. 0中,以記錄為單位處理數(shù)據(jù)。 (4)文件(File):文件由記錄組成,一個文件含有一個以上的記錄。例如,在通訊錄文件中有100個人的信息,每個人的信息是一個記錄,這100個記錄構(gòu)成一個文件。上一頁下一頁返回任務(wù)1 文件的結(jié)構(gòu)及訪問類型7. 1. 2文件介類 根據(jù)不同的分類標(biāo)準(zhǔn),文件可分為不同的類型。 (1)根據(jù)數(shù)據(jù)性質(zhì),文件可分為程序文件和數(shù)據(jù)文件。 程序文件(Program Fil
5、e):這種文件存放的是可以由計算機(jī)執(zhí)行的程序,包括源文件和可執(zhí)行文件。在VB 6. 0中,擴(kuò)展名為.exe、. frm,. Vbg、. Vbp、. Bas、. cls等文件都是程序文件。 數(shù)據(jù)文件(Dale File):數(shù)據(jù)文件用來存放普通的數(shù)據(jù),如學(xué)生考試成績、職工工資、商品庫存等。這類數(shù)據(jù)必須通過程序來存放和管理。上一頁下一頁返回任務(wù)1 文件的結(jié)構(gòu)及訪問類型 (2)根據(jù)數(shù)據(jù)的存放方式和結(jié)構(gòu),文件可分為順序文件和隨機(jī)文件。 順序文件(Sequential File):順序文件的結(jié)構(gòu)比較簡單,文件的記錄一個接一個的存放。在這種文件中,只知道第一個記錄的存放位置,其他記錄的位置無從知道。當(dāng)要查找
6、某個數(shù)據(jù)時,只能從文件頭開始,一個記錄一個記錄地按順序讀取,直至找到要查找的記錄為止。 順序文件的組織比較簡單,只要把數(shù)據(jù)記錄一個接一個的寫入文件中即可。但維護(hù)困難,為了修改文件中的某個記錄,必須把整個文件讀入內(nèi)存,修改后再重新寫入磁盤。順序文件不能靈活地存取和增減數(shù)據(jù),因而適用于有一定規(guī)律且不經(jīng)常修改的數(shù)據(jù)。其主要優(yōu)點(diǎn)是占空間少,容易使用。 上一頁下一頁返回任務(wù)1 文件的結(jié)構(gòu)及訪問類型 隨機(jī)存取文件(Random Access File):又稱直接存取文件,簡稱隨機(jī)文件或直接文件,與順序文件不同,在訪問隨機(jī)文件中的數(shù)據(jù)時,不必考慮各個記錄的排列順序或位置,可以根據(jù)需要訪問文件中的任何一個記錄
7、。對順序文件來說,文件中的各個記錄只能按實(shí)際排列的順序,一個一個地依次訪問。也就是說,在訪問第i個記錄之后,只能訪問第i+1個記錄,既不能訪問第i+2或第i+3個記錄,也不能訪問第i-1或第i-2個記錄。而對于隨機(jī)文件來說,所要訪問的記錄不受其位置的約束,可以根據(jù)需要直接訪問文件中的每個記錄。 上一頁下一頁返回 在隨機(jī)文件中,每個記錄的長度是固定的,記錄中每個字段的長度也是 固定的,此外,隨機(jī)文件的每個記錄都有一個記錄號,在寫入數(shù)據(jù)時,只要指定記錄號,就可以把數(shù)據(jù)直接存入指定的位置,而在讀取數(shù)據(jù)時,只要給出記錄號,就能直接讀取該記錄。在隨機(jī)文件中,可以同時進(jìn)行讀、寫操作,因而能快速地查找和修改
8、每個記錄,而不必為修改某個記錄而對整個文件進(jìn)行讀、寫操作。 隨機(jī)文件的優(yōu)點(diǎn)是數(shù)據(jù)的存取較為靈活、方便、速度較快、容易修改,主要缺點(diǎn)是占用空間較大,數(shù)據(jù)組織比較復(fù)雜。任務(wù)1 文件的結(jié)構(gòu)及訪問類型 (3)根據(jù)數(shù)據(jù)進(jìn)行編碼的方式,文件可分為ASCII文件和二進(jìn)制文件。 ASCII文件:又稱為文本文件,它以ASCII方式保存文件,這種文件可以用文字處理軟件(如記事本、Word)建立和修改(必須按純文本方式保存)。 二進(jìn)制文件(Binary File):以二進(jìn)制方式保存的文件,二進(jìn)制文件不能用普通的字處理軟件編輯,占空間小。上一頁返回任務(wù)1 文件的結(jié)構(gòu)及訪問類型任務(wù)2 文件的處理7. 2. 1順序文件的
9、處理 在順序文件中,記錄的邏輯順序與存儲順序相一致,對文件的讀寫操作只能一個記錄一個記錄順序進(jìn)行。 順序文件的讀寫操作與標(biāo)準(zhǔn)輸入輸出十分類似。其中,讀操作是把文件中的數(shù)據(jù)讀到內(nèi)存;標(biāo)準(zhǔn)輸入是從鍵盤上輸入數(shù)據(jù),而鍵盤設(shè)備也可以看作是一個文件;寫操作是把內(nèi)存中的數(shù)據(jù)文件輸出到屏幕上,而屏幕設(shè)備也可以看作是一個文件。 1.順序文件的寫操作 前面講過,數(shù)據(jù)文件的寫操作分為3步,即打開文件、寫入文件和關(guān)閉文件。其中打開文件和關(guān)閉文件分別由Open和Close語句來實(shí)現(xiàn),寫入文件由Print或Write語句來完成。下一頁返回任務(wù)2 文件的處理 1)Print語句 格式:Print 文件號,spc(n)|t
10、ab(n)表達(dá)式;|, Print語句的功能是把數(shù)據(jù)文件寫入文件中。以前曾多次用到Print方法,Print語句與Print方法類似。Print方法所“寫”的對象是窗體、打印機(jī)或控件,而Print語句所“寫”的對象是文件。 在上面的格式中,“文件號”的含義同前,數(shù)據(jù)寫入此文件號所代表的文件中。其他參數(shù),包括Spc函數(shù)、Tab函數(shù)、“表達(dá)式表”及尾部的分號、逗號等,其含義與Print方法中相同。 例如: 上一頁下一頁返回任務(wù)2 文件的處理 Print#1 A,B,C 把變量A、B、C的值寫到文件號為1的文件中。而Print A,B,C 則把變量A,B,C的值“寫”到窗體上。 說明: (1)格式中
11、的“表達(dá)式表”可以省略,在這種情況下將向文件寫入一個空行。例如,Print 1。 (2)和Print方法一樣,Print語句中的各數(shù)據(jù)項之間可以用分號隔開,也可以用逗號隔開,分別對應(yīng)緊湊格式和標(biāo)準(zhǔn)格式。數(shù)值數(shù)據(jù)由于前面有符號位,后面有空格,因此使用分號不會給以后讀取文件造成麻煩。但是,對于字符串?dāng)?shù)據(jù),特別是變長字符串?dāng)?shù)據(jù),用分號分隔就有可能引起麻煩,因?yàn)檩敵龅淖址g沒有空格。上一頁下一頁返回任務(wù)2 文件的處理 (3)實(shí)際上,Print語句的任務(wù)只是將數(shù)據(jù)送到緩沖區(qū),數(shù)據(jù)由緩沖區(qū)寫到磁盤文件的操作是由文件系統(tǒng)來完成的。對于用戶來說,可以理解為由Print語句直接將數(shù)據(jù)寫入磁盤文件。但是,執(zhí)行
12、Print語句后,并不是立即把緩沖數(shù)據(jù)區(qū)中的內(nèi)容寫入磁盤,只有在滿足下列條件之一時才寫盤。 關(guān)閉文件(Close) 緩沖區(qū)已滿 緩沖區(qū)末滿,但執(zhí)行下一個Print語句。上一頁下一頁返回任務(wù)2 文件的處理 【例7-1】編寫程序,用Print語句向文件中寫入數(shù)據(jù)運(yùn)行如圖7-1的運(yùn)行結(jié)果。 Private Sub Form Load() Open e:temptel. dat For Output As 1 Tpname $ =Text1 .Text tpte1 $ = Text2 .Text lpassr$= Text3 .Text Print 1,Tpname$,tptel$,tpassr$ C
13、lose 1 End Sub 上述過程首先在e盤的temp目錄下建立一個名為“tel. dat”的輸出文件,文件號為1。然后在3個輸入對活框中分別輸入姓名、電活號碼、地址,程序用Print語句把輸入的數(shù)據(jù)寫入文件“tel. dat”中。最后用Close語句關(guān)閉文件。上一頁下一頁返回任務(wù)2 文件的處理 2)Write 語句 格式:Write文件號,表達(dá)式表 和Print語句一樣,用Write語句可以把數(shù)據(jù)寫入順序文件中。例如: Write 1,A,B,C 將把變量A、B 、C的值寫入文件號為1的文件中。 說明: (1)“文件號”和“表達(dá)式表”的含義同前。當(dāng)使用Write語句時,文件必須以outp
14、ut或Append方式打開。“表達(dá)式表”中的各項以逗號分開。 (2) Write語句和Print語句的功能基本相同,其主要區(qū)別有以下兩點(diǎn)。 當(dāng)用Write語句向文件寫數(shù)據(jù)時,數(shù)據(jù)在磁盤上以緊湊格式存放,能自動地在數(shù)據(jù)項之間插入逗號,并給字符串加上雙引號,一旦最后一項被寫入,就插入新的一行。 用Write語句寫入的正數(shù)前沒有空格。上一頁下一頁返回任務(wù)2 文件的處理例7 -2在磁盤上建立一個電活號碼文件,存放單位名稱和該單位的電活 號碼。Private Sub Form-Click()Open e:temptel. dal For Output As#1unti$=InputBox$( enter
15、 unit: )While UCase( unit$)DONETel $ = InputBox$( telephone number: )Write#1,unit$,tel $unit$=InputBox( enter unit: )WendClose#1End Sub上一頁下一頁返回任務(wù)2 文件的處理 上述程序反復(fù)地從鍵盤上輸入單位名稱和電話號碼,并寫到磁盤文件“tel. dal”中,直到輸入“DONE”為止。讀者可以把該程序建立的文件與上例建立的文件進(jìn)行比較,看它們有了什么區(qū)別(用“記事本”查看)。 如果需要向電話號碼文件中追加到新的電話號碼,則須把操作方式由Output改為Append,
16、即把語句改為: Open“e:tel. dal” for append As#1。實(shí)際上,由于Append方式兼有建立文件的功能,因此最好在開始建立文件時就使用Append方式。 由Open語句建立的順序文件是ASCII文件,可以用字處理程序來查看或修改。順序文件由記錄組成,每一個記錄是一個單一的文本行,它以回車換行序列結(jié)束。每個記錄又被分割以具有不同的長度,不同記錄中的字段的長度也可以不一樣。 當(dāng)把一個字段存入變量時,存儲字段的變量的類型決定了該字段的開頭和結(jié)尾。當(dāng)把字段存入字符串變量時,下列符號標(biāo)識出字符串的結(jié)尾。 上一頁下一頁返回任務(wù)2 文件的處理 雙引號(”):當(dāng)字符串以雙引號開頭時。
17、 逗號(,):當(dāng)字符串不以雙引號開頭時。 回車一換行:當(dāng)字段位于記錄的結(jié)束處時。 如果把字段寫入一個數(shù)值變量,則下列符號標(biāo)識出字段的結(jié)尾。 逗號。 一個或多個空格。 回車一換行。上一頁下一頁返回任務(wù)2 文件的處理 【例7一3】從鍵盤上輸入4個學(xué)生的數(shù)據(jù),然后把它們存放到磁盤文件中。學(xué)生的數(shù)據(jù)包括姓名、學(xué)號、年齡和住址,用一個記錄類型來定義。 操作步驟如下。 (1)選擇“工程”菜單中的“添加模塊”命令,建立標(biāo)準(zhǔn)模塊,定義如下記錄類型。 Type stu Stuname as string*10 Num as integer Age as integer Addr as string*20 End
18、 type 將該模塊以文件名“例10. 4Module. bas”存盤。上一頁下一頁返回任務(wù)2 文件的處理 (2)在窗體層輸入如下代碼。 Option base 1 (3)編寫如下的窗體事件過程。 Private Sub Form-Click() Static stud() As stu Open e:tempstu_lis1 For Output As#1 n=InputBox( enter number of student: ) ReDim stud(n)As stu For i=1 To n stud(i).stuname=InputBox$( enter name: ) stud(i
19、).num=InputBox$( enter number: ) stud(i).age=InputBox$( enter age: ) stud(i).adds=InputBox$( enter address: ) Write#1,stud(i).stuname,stud(i).num,stud(i).age,stud(i).adds Next Close#1 End End Sub上一頁下一頁返回任務(wù)2 文件的處理 該過程首先定義一個記錄數(shù)組(大小未定),打開一個輸出文件“stu list(在P盤temp目錄下)。接著詢問要輸入的學(xué)生人數(shù),輸入后重新定義數(shù)組。然后用For循環(huán)從鍵盤上輸入
20、每個學(xué)生的姓名、學(xué)號、年齡和住址,并用Write語句寫入磁盤文件中。最后關(guān)閉文件,退出程序。程序運(yùn)行結(jié)束后,屏幕上并沒有信息輸出,只要把從鍵盤上輸入的數(shù)據(jù)寫到磁盤文件中??梢栽谧痔幚碥浖胁榭丛撐募膬?nèi)容: “李遠(yuǎn)哲”,2001,20,晉城” “馬遠(yuǎn)明”,2002,17,“上海” “陳圓”,1999,22,“北京” “陳石”,1997,23,“天津”上一頁下一頁返回任務(wù)2 文件的處理 2.順序文件的讀操作 順序文件的讀操作分3步進(jìn)行,即打開文件、讀數(shù)據(jù)文件和關(guān)閉文件。其中打開文件和關(guān)閉文件的操作如前所述,讀數(shù)據(jù)的操作由 Input#語句和Line Input#語句來實(shí)現(xiàn)。 1)lnput 語句
21、 格式:Input#文件號,變量表 Input#語句從一個順序文件中讀出數(shù)據(jù)項,并把這些數(shù)據(jù)項賦給程序變量。例如: Input#1,A,B,C 從文件中讀出三個數(shù)據(jù)項,分別把它們賦值給A,B,C三個變量。上一頁下一頁返回任務(wù)2 文件的處理 說明: (1)“文件號”的含義同前。“變量表”由一個或多個變量組成,這些變量既可以是數(shù)值變量,也可以是字符串變量或數(shù)組元素,從數(shù)據(jù)文件中讀出的數(shù)據(jù)賦給這些變量。文件中數(shù)據(jù)項的類型應(yīng)與Input#語句中變量的類型匹配。 (2)在用Input#語句把讀出的數(shù)據(jù)項賦給數(shù)值變量時,將忽略前導(dǎo)空格、回車或換行符,把遇到的第一個非空格、非回車或換行符作為數(shù)值的開始,遇到
22、空格、回車或換行符則認(rèn)為數(shù)值結(jié)束。對字符串?dāng)?shù)據(jù),同樣忽略開頭的空格、回車或換行符,需要把開頭帶有空格的字符串賦給變量,則必須把字符串放在雙引號中。 (3) Input#與Inputbox函數(shù)類似,但I(xiàn)nputbox函數(shù)要求從鍵盤上輸入數(shù)據(jù),而Input#語句要求從文件中輸入數(shù)據(jù),而且執(zhí)行Input#語句時不顯示對話框。 (4) Input#語句也可以用于隨機(jī)文件。上一頁下一頁返回任務(wù)2 文件的處理 【例7 -4】把前面建立的學(xué)生數(shù)據(jù)表(stu-list)讀到內(nèi)存,并在屏幕上顯示出來。該程序的標(biāo)準(zhǔn)模塊仍使用例10. 4中的“例10. 4Module. bas,窗體層代碼也與例10. 4相同,窗體
23、事件過程如下: Private Sub Form-Click() Static stud() As stu Open e:temp stu-list For Input As#1 n=InputBox( enter number of student: ) ReDim stud(n As stu FontSize=12 Print 姓名;Tab(20); 性別;Tab(30); 年齡;Tab(40); 住址 Print For i=1 To n Input#1,stud(i).stuname,stud(i).num,stud(i),age,stud(i),adds Print stud(i),
24、stuname; Tab(20);stud(i).num;Tab(30);stud(i).age;Tab(40);stud(1). Next i Close#1 End Sub上一頁下一頁返回任務(wù)2 文件的處理 該過程首先以輸入方式打開文件stu-list,數(shù)組定義方式與前面的程序相同。在for循環(huán)中,用Input語句讀入4個學(xué)生的數(shù)據(jù),并在窗體上顯示出來。程序運(yùn)行后,單擊窗體,在輸入對話框中輸入4,然后單擊“確定”按鈕,執(zhí)行結(jié)果如圖7-2所示。 但是當(dāng)需要輸入幾十個、上百個甚至更多的數(shù)據(jù)時,如果用InputBox函數(shù)一個一個地輸入,效率太低。這個問題可以通過Input語句從文件中讀取數(shù)據(jù)來解
25、決。請看下面的例子。上一頁下一頁返回任務(wù)2 文件的處理 2)Line lnput語句 格式:Line Input文件號,字符串變量 Line Input語句從順序文件中讀取一個完整的行,并把它賦值給一個字符串變量?!拔募枴钡暮x同前?!白址兞俊笔且粋€字符串簡單變量名,也可以是一個字符串?dāng)?shù)組元素名,用來接受從順序文件中讀出的字符行。在文件操作中,Line Input語句與Input語句功能類似。只是Input語句讀取的是文件的數(shù)據(jù)項,而Line Input語句讀取的是文件中的一行。Line Input語句也可以用于隨機(jī)文件。Line Input語句常用來復(fù)制文件。上一頁下一頁返回任務(wù)2 文
26、件的處理【例7 -5】編寫程序,在文件中查找指定字符串。程序代碼如下:Private Sub Form-Click()q $ = InputBox ( 請輸入要查找的字符串)Open e:tel. dal For Input As#1x$=Input$ (LOF (1),1)Closey=InStr (1,x$,q$)If v0 ThenPrint 找到字符串;asElsePrint 未找到字符串;asEnd IfEnd sub上一頁下一頁返回任務(wù)2 文件的處理7.2.2隨機(jī)文件 隨機(jī)文件有以下特點(diǎn)。 (1)隨機(jī)文件的記錄是定長記錄,只有給出記錄號n,才能通過“(n-1)*記錄長度”公式計算出
27、該記錄與文件首記錄的相對地址。因此,在用Open語句打開文件時必須指定記錄的長度。 (2)每個記錄劃分為若干個字段,每個字段的長度等于相應(yīng)的變量的長度。 (3)各個變量(數(shù)據(jù)項)要按一定的格式輸入相應(yīng)的字段。 (4)打開隨機(jī)文件,既可讀也可寫。 隨機(jī)文件以記錄為單位進(jìn)行操作。上一頁下一頁返回任務(wù)2 文件的處理 1.隨機(jī)文件的打開與讀寫操作 隨機(jī)文件與順序文件的讀寫操作類似,但通常把需要讀寫的記錄中的各個字段放在一個記錄類型中,同時指定每個記錄的長度。 1)隨機(jī)文件的寫操作 隨機(jī)文件的寫操作分為4步。 (1)定義數(shù)據(jù)類型。隨機(jī)文件由固定長度的記錄組成,每個記錄含有若干字段。記錄中各個字段可以放在
28、一個記錄中,記錄類型用Typeend Type語句定義。Typeend Type語句通常在標(biāo)準(zhǔn)模塊中使用,如果放在窗體模塊中,則應(yīng)加上Private (2)打開隨機(jī)文件。與順序文件不同,打開一個隨機(jī)文件后,既可以用于寫操作,也可以用于讀操作。 格式:Open文件名稱For Random A*文件號Len =記錄長度 “記錄長度”等于各個字段長度之和,以字符(字節(jié))為單位。如果省略(Len =記錄長度),則記錄的默認(rèn)長度為128個字節(jié)。 (3)將內(nèi)存中的數(shù)據(jù)寫入磁盤。隨機(jī)文件的寫操作通過Put語句來實(shí)現(xiàn)。 格式:Put 文件號,記錄號,變量上一頁下一頁返回任務(wù)2 文件的處理 (4)因?yàn)橐鎯懭?/p>
29、的變量的類型信息,所以由Len子句所指定的記錄長度應(yīng)大于或等于所要寫的數(shù)據(jù)的長度。如果寫入的變量是一個變長字符串,則Len子句所指定的記錄長度至少應(yīng)比字符串的實(shí)際長度多兩個字節(jié);如為變體類型,則應(yīng)多4個字節(jié)。 2)隨機(jī)文件的讀操作 從隨機(jī)文件中讀取數(shù)據(jù)的操作與寫文件操作步驟類似,只是把第3步中的Put語句用Get語句來代替。 格式:Get 文件號,記錄號,變量 Get語句把由“文件號”指定的磁盤文件中的數(shù)據(jù)讀到“變量”中。“記錄號”的含義同前。上一頁下一頁返回任務(wù)2 文件的處理 2.隨機(jī)文件記錄的增加與刪除 1)增加記錄 在隨機(jī)文件中增加記錄,實(shí)際上是在文件的末尾添加記錄。前面的File_ w
30、rite過程具有建立和增加記錄兩種功能,因?yàn)榇蜷_一個已經(jīng)存在的文件,則寫入的新記錄將添加到該文件后面。運(yùn)行前面的程序,在對活框中輸入1,單擊“確定”按鈕,然后輸入記錄。 輸入結(jié)束后,回到選擇對活框,輸入2,單擊“確定”按鈕,將顯示文件中所有記錄,新增記錄已附在原記錄的后面。 2)刪除記錄 在隨機(jī)文件中刪除一個記錄,并不是真正刪除記錄,而是把下一個記錄重新寫到要刪除的記錄位置上,其后所有的記錄依次前移。上一頁下一頁返回任務(wù)2 文件的處理7. 2. 3二進(jìn)制文件 二進(jìn)制文件是所有打開方式中最自由的,它只把文件中的數(shù)據(jù)看作是一堆0與1的集合,對這些數(shù)據(jù)如何解釋,完全只看用(el語句讀取它們時,所使用
31、的變量類型。當(dāng)所要處理的文件格式既不是文本文件,又沒有統(tǒng)一的數(shù)據(jù)格式時,通常就會以二進(jìn)制方式處理。 二進(jìn)制的使用和隨機(jī)文件極為相似,同樣是利用Put與Get來讀寫數(shù)據(jù),它們之間的區(qū)別有以下幾點(diǎn)。 (1)不需要指定Len,因?yàn)槎M(jìn)制讀、寫比隨機(jī)文件自由。 (2)對于不定長度字符串,在保存文件時將不會保存它的長度信息。 (3)由于不記錄字符串的長度,所以在Get中使用不定長字符串時,讀取的字符數(shù)將等于該字符串原先的長度。上一頁下一頁返回任務(wù)2 文件的處理 例7一6二進(jìn)制文件的讀寫。 在這個例子中,把文件的內(nèi)容先用“0123456789二”填充,接著由文件的第一個位置讀取一個不定長度字符串Q,此字符
32、串Q的初始長度為5,所以在運(yùn)行完成以后,Q的內(nèi)容將是“01234 程序代碼如下: Private Sub Command1-Click() f=Free File Dim x As Integer Open e:text. txt For Binary As#1 Len=Len(x) For x=0 To 99 Put#f , ,CStr(x) Next q= AAAAA Get#f, l,q Print q Close End Sub上一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句7. 3 .1 文件的建立與打開 如前所述,在對文件進(jìn)行操作之前,必須先打開或建立文件,VB 6. 0用Open語
33、句打開或建立一個文件。 格式:Open文件說明For方式 Access存取類型鎖定As 文件號Len=記錄長度 Open語句的功能:為文件的輸入輸出分配緩沖區(qū),并確定緩沖區(qū)所使用的是要打開或建立的文件名,包含文件所在路徑。其他參數(shù)的含義如下。 (1)方式。指定文件的輸入輸出方式,可以是下述方式之一。 Output:指定順序輸出方式。 Input:指定順序輸入方式。 Append:指定順序輸出方式。與Output不同的是,當(dāng)用Append方式打開文件時,文件被定位在文件末尾,如果對文件執(zhí)行寫操作,則寫入的數(shù)據(jù)附加到原來文件的后面。 下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 Random:指
34、定隨機(jī)文件存取方式,也是默認(rèn)方式,在Random方式中,如果沒有Access子句,則在執(zhí)行0 pen語句時,VB 6. 0試圖按如下順序打開文件:()讀/寫;()只讀;()只寫。 Binary:指定二進(jìn)制方式文件。在這種方式下,可以用Get和Put語句對文件中任何字節(jié)位置的信息進(jìn)行讀寫,在Binary方式中,如果沒有Access子句,則打開文件類型與Random方式相同。“方式”是可選的,如果省略,則為隨機(jī)存取方式,即Random (2)存取類型。放在關(guān)鍵字Access之后,用來指定訪問文件的類型??梢允窍铝蓄愋椭?。 Read:打開只讀文件。 Write:打開只寫文件。 Read Write
35、:打開讀寫文件。這種類型只對隨機(jī)文件、二進(jìn)制文件及用Append方式打開的文件有效。 “存取類型”指出了在打開的文件中所進(jìn)行的操作,如果打開的文件已由其他程序打開,則不允許指定存取的類型,否則Open失敗,并產(chǎn)生錯誤信息。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 (3)鎖定。該子句只在多用戶或多環(huán)境中使用,用來限制其他用戶或進(jìn)程對打開的文件進(jìn)行讀寫操作。鎖定類型包括以如下幾項。 默認(rèn):如果不指定鎖定類型,則本進(jìn)程可以多次打開對該文件進(jìn)行讀寫;在文件打開期間,其他進(jìn)程不能對該文件進(jìn)行讀寫操作。 Lock Shared:任何機(jī)器上的任何進(jìn)程都可以多次對該進(jìn)程進(jìn)行讀寫操作。 Lock R
36、ead:不允許其他進(jìn)程讀該文件,只有在沒有其他Read存取類型的進(jìn)程訪問該文件時,才允許這種鎖定。 Lock Write:不允許其他進(jìn)程寫這個文件。只有在沒有其他Write存取類型的進(jìn)程訪問該文件時,才允許使用這種鎖定。 Lock Read Write:不允許其他進(jìn)程讀寫這個文件。 如果不使用Lock子句,則默認(rèn)為Lock Read Write。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 (4)文件號。是一個整型的表達(dá)式。其值在1 511范圍內(nèi),執(zhí)行Open語句時,打開文件的文件號與一個具體的文件相關(guān)聯(lián),其他輸入輸出語句或函數(shù)通過文件號與文件發(fā)生聯(lián)系。 (5)記錄長度。是一個整型表達(dá)
37、式。當(dāng)選擇該參數(shù)時,為隨機(jī)存取文件設(shè)置記錄的長度。對于用隨機(jī)訪問方式打開的文件,該值是記錄長度;對于順序文件,該值是緩沖字符數(shù)?!坝涗涢L度”的值不能超過32 767字節(jié),對于二進(jìn)制文件,將忽略Len子句。 上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句7. 3. 2文件的關(guān)閉 文件的讀寫操作結(jié)束后,應(yīng)將文件關(guān)閉??梢酝ㄟ^Close語句來實(shí)現(xiàn)。 格式:close 文件號 , 文件號 Close語句用來結(jié)束文件的輸入輸出操作。例如,假定用下面的語句打開文件: Open Price. dat For Output as 1 則可以用下面的語句關(guān)閉該文件: Close 說明: (1) Close
38、語句用來關(guān)閉文件,是在打開文件之后進(jìn)行的操作。格式中的“文件號”是Open語句中使用的文件號。關(guān)閉一個數(shù)據(jù)文件具有兩方面的作用:第一,把文件緩沖區(qū)中的所有數(shù)據(jù)寫到文件中;第二,釋放與文件相聯(lián)系的文件號,以供其他Open語句使用。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 (2)Close語句中的“文件號”是可選的,如果指定了文件號,則把指定的文件關(guān)閉;如果不指定文件號,則把所有打開的文件全部關(guān)閉。 (3)除了用Close語句關(guān)閉文件外,在程序結(jié)束時還將自動關(guān)閉所有打開的數(shù)據(jù)文件。 (4) Close語句使VB 6. 0結(jié)束對文件的使用,它的操作十分簡單,但絕不是可有可無的,這是因?yàn)榇?/p>
39、盤文件同內(nèi)存之間的信息交換是通過緩沖區(qū)進(jìn)行的。如果關(guān)閉的是為順序輸入輸出而打開的文件,則緩沖區(qū)中最后的內(nèi)容將被寫入文件中,當(dāng)打開的文件或設(shè)備正在輸出時,執(zhí)行Close語句后,不會使輸出信息的操作中斷。如果不使用Close語句關(guān)閉文件,則可能使某些需要寫入的數(shù)據(jù)不能從內(nèi)存(緩沖區(qū))送入文件中。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句7.3.3文件指針 文件被打開后,自動生成一個文件指針(隱含的),文件的讀或?qū)懢褪菑倪@個指針?biāo)肝恢瞄_始的。用Append方式打開一個文件后,文件指針指向文件的末尾。而如果用其他幾種方式打開文件,則文件指針指向文件的開頭。依次完成讀寫操作后文件指針自動移到
40、下一個讀寫操作的起始位置,移動量的大小由Open語句中的參數(shù)共同決定。對于隨機(jī)文件,其文件指針的最小移動單位是一個記錄長度;而順序文件中文件指針移動的長度與它所讀寫的字符串的長度相同。在VB 6. 0中,與文件指針有關(guān)的語句和函數(shù)是Seek。 文件指針的定位通過Seek語句來實(shí)現(xiàn)。 格式: Seek 文件號,位置 Seek語句用來設(shè)置文件中下一個讀寫的位置?!拔募枴钡暮x同前;“位置”是一個數(shù)值表達(dá)式,用來指定下一個要讀寫的位置,其值在1(231-1)范圍內(nèi)。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 說明: (1)對于用Input,0utput或Append方式打開的文件,“位置
41、”是從文件開頭到“位置”為止的字節(jié)數(shù),即執(zhí)行下一個操作的地址,文件的第一個字節(jié)的位置是1。對于用Random方式打開的文件,“位置”是一個記錄號。 (2)在Get或Put語句中的記錄號優(yōu)先于由Seek語句確定的位置。此外,當(dāng)“位置”為。或負(fù)數(shù)時,將產(chǎn)生錯誤信息“錯誤的記錄號”。當(dāng)Seek語句中的“位置”在文件尾時,對文件的寫操作將擴(kuò)展該文件。 Seek函數(shù)是與Seek語句配合使用的。 格式: Seek(文件號) 對于用Input,0utput或Append方式打開的文件, Seek函數(shù)返回文件中的字節(jié)位置(產(chǎn)生一個操作的位置)。對于用Random方式打開的文件, Seek函數(shù)返回下一個要讀或?qū)?/p>
42、的記錄號。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句7. 3. 4常用的文件操作函數(shù) 1. FreeFile函數(shù) 用FreeFile函數(shù)可以得到一個沒有使用過的文件號。當(dāng)程序中打開的文件較多時,這個函數(shù)很有用。利用這個函數(shù)可以把未使用的文件號賦給一個變量,用這個變量作文件號,不必知道具體的文件號是多少。 【例7一7】用FreeFile Private Sub Command1 函數(shù)獲取一個文件號。 Click( ) FileName$=Text1. Text filenum=FreeFile Open FileName For Output As filenum Print File
43、Name; is upend as file ;FileName Close filenum End Sub上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 該過程把打開的文件的文件名賦給變量FileName $(從鍵盤上輸入),而把可以使用的文件號賦給變量Filenum,它們都出現(xiàn)在Open語句中。程序運(yùn)行后,在輸入對活框中輸入“DF1. dat”,單擊按鈕,程序運(yùn)行結(jié)果如圖7-3所示。 2. Loc函數(shù) 格式:Loc(文件號) Loc函數(shù)返回由“文件號”指定的文件的當(dāng)前讀寫位置,是一個長整 數(shù)。格式中的“文件號”是在Open語句中使用的文件號。 對于隨機(jī)文件,Loc函數(shù)返回一個記錄號,
44、它是對隨機(jī)文件或讀寫最后一個記錄的記錄號,即當(dāng)前讀寫位置的上一個記錄;對于順序文件,Loc函數(shù)返回自該文件被打開以來讀或?qū)懙挠涗泜€數(shù),一個記錄是一個模塊。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 3. Lof函數(shù) 格式: Lof(文件號) Lof函數(shù)返回給文件分配的字?jǐn)?shù)(即文件的長度),在VB 6. 0中,文件的基本單位是記錄,每個記錄的默認(rèn)長度為128個字節(jié)。因此,對于由VB 6. 0建立的數(shù)據(jù)文件, Lof函數(shù)返回的將是128的倍數(shù),不一定是實(shí)際的字節(jié)數(shù)。例如,假定某個文件的實(shí)際長度是257(128 *2 +1)個字節(jié),則用Lof函數(shù)返回的是384 (128 * 3)個字節(jié)。對
45、于用其他編輯軟件或字處理軟件建立的文件, Lof函數(shù)返回的將是實(shí)際分配的字節(jié)數(shù),即文件的長度。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 4. EOF函數(shù) 格式:EOF(文件號) EOF函數(shù)用來測試文件的結(jié)束狀態(tài),返回一個Boolean值(True或False)。利用EOF函數(shù),可以避免在文件輸入時出現(xiàn)“輸入超出文件尾”錯誤。因此,它是一個很有用的函數(shù)。在文件輸入期間,可以用EOF函數(shù)測試是否到達(dá)文件尾。對于順序文件來說,如果已經(jīng)到文件尾,則EOF函數(shù)返回True,否則返回False。對于隨機(jī)文件,如果最后執(zhí)行的Get語句未能讀到一個完整的記錄,則返回True,這通常發(fā)生在試圖讀文件
46、結(jié)尾以后的部分時。 EOF函數(shù)常用來在循環(huán)中測試是否已到文件尾。 格式: Do while Not EOF( ) 文件讀語句 Loop上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句7. 3. 5文件基本操作語句 文件的基本操作語句指的是文件的刪除、復(fù)制、移動、重命名等。在VB6. 0中可以通過相應(yīng)的語句執(zhí)行這些基本操作。 1. Kill語句 格式:Kill文件名 功能:從磁盤中刪除指定的文件,文件名可以含有路徑,可以使用通配符(*或?)。 因?yàn)樵谑褂肒ill語句刪除文件時不會出現(xiàn)任何提示,所以最好加上適當(dāng)?shù)拇a,使得在刪除前提示用戶確認(rèn)刪除操作。 例如: Private Sub Comm
47、and1-Click( ) h = MsgBox(確認(rèn)要刪除該文件嗎?, vbYesNo, 提示信息) If h=vbYes Then Kill e: lemp te1.dal End Sub上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 2. FileCopy語句 格式:FileCopy源文件名,目標(biāo)文件名 功能:復(fù)制一個文件,文件名可以含有路徑,但不能使用通配符(*或?)。 該語句不能復(fù)制一個已打開的文件,否則將產(chǎn)生錯誤信息。 例如: FileCopy e:tempstu list,d: stu_list VB 6. 0沒有提供移動文件的語句。實(shí)際上把Kill語句和FileCopy語
48、句結(jié)合使用,先用FileCopy語句復(fù)制文件,然后用Kill語句刪除源文件,即可實(shí)現(xiàn)文件移動。此外,用Name語句也可以移動文件。上一頁下一頁返回任務(wù)3 文件處理常用命令、函數(shù)及語句 3. Name語句 格式:Name原文件名 As 新文件名 功能:重新命名一個文件、目錄或文件夾,文件名是一個字符串表達(dá)式,可以含有路徑,但不能使用通配符。 在一般情況下,“原文件名”和“新文件名”必須在同一驅(qū)動器上。如果“新文件名”指定的路徑存在且與“原文件名”指定路徑不通,則Name語句將把文件移到新的目錄下,并更改文件名。如果“新文件名”與“原文件名”指定的路徑不同但文件名相同,則Name語句將把文件移到新
49、的目錄下。 當(dāng)“原文件名”不存在,或“新文件名”已存在時,都會發(fā)生錯誤。 不能對已打開的文件重新命名,在重新命名之前必須先關(guān)閉該文件。 Name語句不能跨驅(qū)動器移動文件。上一頁返回任務(wù)4 文件管理控件 為了管理計算機(jī)中的文件,VB6. 0提供了文件系統(tǒng)控件,即驅(qū)動器列表框(DriveListBox)、目錄列表框(Directory ListBox)和文件列表框(File ListBox)。用這3個控件,可以編寫文件管理程序的應(yīng)用界面,如圖7-4所示。Drive ListBox控件用來在運(yùn)行時顯示用戶系統(tǒng)中所有有效磁盤驅(qū)動器列表。目錄列表框Directory ListBox用來在運(yùn)行時顯示當(dāng)前驅(qū)動器下的目錄和路徑,該控件可以顯示分層的目錄列表。File Listbox控件用來在運(yùn)行時將Path屬性指定的目錄文件定位并列舉出來。該控件用來顯示所選擇文件類型的文件列表。根據(jù)需要可編寫代碼,使得Drive
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度知識產(chǎn)權(quán)保護(hù)合同咨詢及代理服務(wù)協(xié)議3篇
- 二零二五版古董家具修復(fù)、安裝與展覽服務(wù)合同3篇
- 二零二五年服裝店轉(zhuǎn)讓合同書附帶品牌形象重塑及宣傳推廣服務(wù)3篇
- 二零二五版噪聲污染檢測與控制合同3篇
- 二零二五年度智能家居代理出租房租賃合同2篇
- 二零二五年杭州二手房買賣合同貸款與還款指導(dǎo)合同3篇
- 二零二五年金融科技公司股份代持與金融信息服務(wù)合同3篇
- 二零二五版房地產(chǎn)開發(fā)項目施工許可證報建代理合同3篇
- 二零二五版餐飲企業(yè)食品安全責(zé)任承包合同范本3篇
- 二零二五版古建筑保護(hù)監(jiān)理服務(wù)增補(bǔ)合同2篇
- 危險性較大分部分項工程及施工現(xiàn)場易發(fā)生重大事故的部位、環(huán)節(jié)的預(yù)防監(jiān)控措施
- 繼電保護(hù)試題庫(含參考答案)
- 《榜樣9》觀后感心得體會四
- 2023事業(yè)單位筆試《公共基礎(chǔ)知識》備考題庫(含答案)
- 《水下拋石基床振動夯實(shí)及整平施工規(guī)程》
- 化學(xué)-廣東省廣州市2024-2025學(xué)年高一上學(xué)期期末檢測卷(一)試題和答案
- 2025年云南大理州工業(yè)投資(集團(tuán))限公司招聘31人管理單位筆試遴選500模擬題附帶答案詳解
- 風(fēng)電危險源辨識及控制措施
- 《教師職業(yè)道德與政策法規(guī)》課程教學(xué)大綱
- 營銷策劃 -麗亭酒店品牌年度傳播規(guī)劃方案
- 兒童傳染病預(yù)防課件
評論
0/150
提交評論