版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第八章第八章 文件系統(tǒng)文件系統(tǒng)&8-1 文件的基本概念文件的基本概念文件是存放在外部介質(zhì)文件是存放在外部介質(zhì)(如硬盤、軟盤、如硬盤、軟盤、光盤等等光盤等等)上數(shù)據(jù)的集合,對(duì)存儲(chǔ)在外部上數(shù)據(jù)的集合,對(duì)存儲(chǔ)在外部介質(zhì)上的數(shù)據(jù)的存取都是以文件為對(duì)象進(jìn)介質(zhì)上的數(shù)據(jù)的存取都是以文件為對(duì)象進(jìn)行的。行的。一、文件的分類一、文件的分類VB中把文件分為三類:中把文件分為三類:1、順序文件、順序文件 - 其中的內(nèi)容全部是文本。其中的內(nèi)容全部是文本。 2、隨機(jī)文件、隨機(jī)文件 - 由相同長度的記錄集合組由相同長度的記錄集合組成,記錄中可以有一個(gè)或多成,記錄中可以有一個(gè)或多個(gè)字段。個(gè)字段。3、二進(jìn)制文件、二進(jìn)制
2、文件 - 能訪問任意結(jié)構(gòu)的文件。能訪問任意結(jié)構(gòu)的文件。二、文件的命名二、文件的命名為了標(biāo)識(shí)和區(qū)分每個(gè)文件,就必須對(duì)文件進(jìn)為了標(biāo)識(shí)和區(qū)分每個(gè)文件,就必須對(duì)文件進(jìn)行命名。命名規(guī)則:行命名。命名規(guī)則:DOS操作系統(tǒng)中:八個(gè)字符的文件名操作系統(tǒng)中:八個(gè)字符的文件名加上三個(gè)字符的擴(kuò)展名。加上三個(gè)字符的擴(kuò)展名。例:例:Autoexec.bat文件名,文件名,最長只最長只能用能用8個(gè)個(gè)字符字符點(diǎn)符點(diǎn)符號(hào)號(hào)擴(kuò)展名,擴(kuò)展名,最長只最長只能用能用3個(gè)個(gè)字符字符Windows 98/2000/XP操作系統(tǒng)中:操作系統(tǒng)中:支持長文件名,可以使用最長支持長文件名,可以使用最長255個(gè)字符個(gè)字符來命名文件名。來命名文件名
3、。&8-2 直接操作直接操作DOS文件或文件或win98/2000/xp文件文件在在VB中利用語句能直接對(duì)中利用語句能直接對(duì)DOS文件進(jìn)行文件進(jìn)行操作操作1、ChDrive語句語句 - 改變當(dāng)前的驅(qū)動(dòng)器。改變當(dāng)前的驅(qū)動(dòng)器。語法格式:語法格式:ChDrive drive例:例:ChDrive “d:”2、ChDir 語句語句 - 改變當(dāng)前路徑改變當(dāng)前路徑 (改變目錄或文件夾改變目錄或文件夾)語法格式:語法格式:ChDir path例:例:ChDir “龐一平龐一平”4、RmDir - 刪除一個(gè)存在的空目錄。刪除一個(gè)存在的空目錄。老的路徑和文件名老的路徑和文件名新的路徑和文件名新的路徑和文
4、件名3、MkDir 語句語句 - 創(chuàng)建一個(gè)新的文件夾創(chuàng)建一個(gè)新的文件夾語法格式:語法格式:MkDir path例:例:MkDir “龐一平龐一平”5、Name -重新命名一個(gè)文件、目錄、或文件重新命名一個(gè)文件、目錄、或文件夾。夾。( (對(duì)文件夾或文件名對(duì)文件夾或文件名) )語法格式:語法格式:Name oldpathname As newpathname語法格式:語法格式:RmDir path例:例:RmDir “龐一平龐一平”6、Kill - 從磁盤中刪除文件。從磁盤中刪除文件。語法格式:語法格式:Kill pathname7、FileCopy - 復(fù)制一個(gè)文件。復(fù)制一個(gè)文件。語法格式:語法
5、格式:FileCopy source, destination源文件源文件目的文件目的文件8-3文件操作的一般步驟文件操作的一般步驟文件儲(chǔ)存在硬盤、軟盤或優(yōu)盤中。要讀取文件文件儲(chǔ)存在硬盤、軟盤或優(yōu)盤中。要讀取文件中的數(shù)據(jù)首先必須將文件的內(nèi)容加載中的數(shù)據(jù)首先必須將文件的內(nèi)容加載(傳送傳送)到到內(nèi)存中,這個(gè)存放文件數(shù)據(jù)的內(nèi)存又叫緩沖區(qū)。內(nèi)存中,這個(gè)存放文件數(shù)據(jù)的內(nèi)存又叫緩沖區(qū)。這樣一個(gè)文件的操作被稱作文件的這樣一個(gè)文件的操作被稱作文件的“打開打開”。打開文件使用打開文件使用“Open”語句。語句。用于訪問順序文件用于訪問順序文件一、一、Open語句語句&8-4 順序文件順序文件文件打開后,
6、才能對(duì)文件中的數(shù)據(jù)進(jìn)行讀文件打開后,才能對(duì)文件中的數(shù)據(jù)進(jìn)行讀/寫操作。寫操作。文件使用完畢,應(yīng)該將其文件使用完畢,應(yīng)該將其“關(guān)閉關(guān)閉”,釋放占有的內(nèi)存。,釋放占有的內(nèi)存。因?yàn)橄到y(tǒng)內(nèi)存有限。關(guān)閉文件使用因?yàn)橄到y(tǒng)內(nèi)存有限。關(guān)閉文件使用“Close”語句。語句。順序文件即是普通的文本文件,文件中的每一個(gè)順序文件即是普通的文本文件,文件中的每一個(gè)字符代表一個(gè)文本字符或文件格式符字符代表一個(gè)文本字符或文件格式符(回車、換行回車、換行符符),所有的字符都以,所有的字符都以ASCII代碼存儲(chǔ)。代碼存儲(chǔ)。Open pathname For mode Access 存取類型存取類型 lock As #filen
7、umber Len=reclength其中:其中: Pathname - 代表需要打開的文件名代表需要打開的文件名(需要需要路徑路徑)。Open d:qqq.txt For Append As #1例:例: Mode - 在順序文件時(shí)為在順序文件時(shí)為Input、Output、AppendInput - 表示從文件中讀出字符串。表示從文件中讀出字符串。(如如果文件不存在則出錯(cuò)果文件不存在則出錯(cuò))Output - 表示把字符串寫入文件中,從表示把字符串寫入文件中,從頭寫入。文件中原有的內(nèi)容被覆頭寫入。文件中原有的內(nèi)容被覆蓋。蓋。Append - 表示把字符加到文件尾部。表示把字符加到文件尾部。Re
8、ad Write - 對(duì)打開的文件可讀可寫對(duì)打開的文件可讀可寫 Access 存取類型存取類型 -Read - 對(duì)打開的文件只能進(jìn)行讀操作對(duì)打開的文件只能進(jìn)行讀操作Write - 對(duì)打開的文件只能進(jìn)行寫操作對(duì)打開的文件只能進(jìn)行寫操作Open d:qqq.txt For Append Access Write As #1例:例:注意:注意:Access存取類型存取類型 必須與必須與 Mode 相配合,相配合,不能互相矛盾。不能互相矛盾。例:例:Open d:qqq.txt For input Access Write As #1互相矛盾,系統(tǒng)將提示互相矛盾,系統(tǒng)將提示“文件模式錯(cuò)誤文件模式錯(cuò)誤”
9、Open d:qqq.txt For Output Access Read As #1例:例: Lock - 鎖定,它只用在網(wǎng)絡(luò)或多任務(wù)環(huán)境中,鎖定,它只用在網(wǎng)絡(luò)或多任務(wù)環(huán)境中,以防止其它計(jì)算機(jī)或其它程序?qū)Υ蜷_的以防止其它計(jì)算機(jī)或其它程序?qū)Υ蜷_的文件進(jìn)行讀寫。文件進(jìn)行讀寫。Shared - 共享。允許任何計(jì)算機(jī)的用戶對(duì)該共享。允許任何計(jì)算機(jī)的用戶對(duì)該文件進(jìn)行讀寫操作。文件進(jìn)行讀寫操作。Lock Read - 防止讀出。允許任何計(jì)算機(jī)的用戶防止讀出。允許任何計(jì)算機(jī)的用戶對(duì)該文件進(jìn)行寫操作,但不能讀。對(duì)該文件進(jìn)行寫操作,但不能讀。Lock Write - 防止寫入。允許任何計(jì)算機(jī)的用戶防止寫入。允
10、許任何計(jì)算機(jī)的用戶對(duì)該文件進(jìn)行讀操作,但不能寫入。對(duì)該文件進(jìn)行讀操作,但不能寫入。Lock Read Write - 防止讀出與寫入。禁止任何防止讀出與寫入。禁止任何計(jì)算機(jī)的用戶對(duì)該文件進(jìn)行訪問。計(jì)算機(jī)的用戶對(duì)該文件進(jìn)行訪問。缺省值為:缺省值為: Lock Write Filenumber - 必要。一個(gè)有效的必要。一個(gè)有效的文件號(hào)文件號(hào),范圍在范圍在 #1 到到 #511 之間。之間。 Buffersize - 緩沖字符數(shù),值小于緩沖字符數(shù),值小于32767二、二、Print # 語句語句語法格式:語法格式:Print #filenumber, outputlist將格式化顯示的數(shù)據(jù)寫入順序
11、文件中。將格式化顯示的數(shù)據(jù)寫入順序文件中。順序文件的缺省值為順序文件的缺省值為512注意:注意:1、當(dāng)前使用的文件號(hào)必須是唯一的。不能再、當(dāng)前使用的文件號(hào)必須是唯一的。不能再分配給其它文件使用。分配給其它文件使用。2、當(dāng)以、當(dāng)以O(shè)utput、Append模式打開一個(gè)不存在的模式打開一個(gè)不存在的文件時(shí),文件時(shí),VB會(huì)自動(dòng)創(chuàng)建一個(gè)相應(yīng)的文件。會(huì)自動(dòng)創(chuàng)建一個(gè)相應(yīng)的文件。#filenumber - 打開文件的文件號(hào)打開文件的文件號(hào)Outputlist - 輸出列表。與輸出列表。與Print 方法完全一樣方法完全一樣Spc(n) | Tab(n) expression charpos語法如下:語法如下:
12、與與 Print # 語句或語句或 Print 方法一起使方法一起使用,對(duì)輸出進(jìn)行定位。它用,對(duì)輸出進(jìn)行定位。它用來在輸出項(xiàng)用來在輸出項(xiàng)前插入前插入n個(gè)空格個(gè)空格Spc函數(shù)函數(shù):用來將輸出項(xiàng)定位在絕對(duì)列號(hào)上,這里,用來將輸出項(xiàng)定位在絕對(duì)列號(hào)上,這里,n 為列號(hào)。使用無參數(shù)的為列號(hào)。使用無參數(shù)的 Tab(n) 將插將插入點(diǎn)定位在下一個(gè)打印區(qū)的起始位置。入點(diǎn)定位在下一個(gè)打印區(qū)的起始位置。Tab函數(shù)函數(shù):(a). 標(biāo)準(zhǔn)格式輸出標(biāo)準(zhǔn)格式輸出用逗號(hào)用逗號(hào)“,”作為輸出項(xiàng)之間的分隔符時(shí),作為輸出項(xiàng)之間的分隔符時(shí),輸出的數(shù)據(jù)按標(biāo)準(zhǔn)格式寫到文件中。輸出的數(shù)據(jù)按標(biāo)準(zhǔn)格式寫到文件中。例:例:Spc 函數(shù)、函數(shù)、T
13、ab函數(shù)函數(shù)可以和可以和 PrintPrint、Print # 語句語句一起使用。一起使用。Open TESTFILE For Output As #1 打開輸出文件。打開輸出文件。Print #1, 10 spaces between here; Spc(10); and here.Close #1 關(guān)閉文件。關(guān)閉文件。Print spc(5); “Made in China”Print tab(10); “2002.05.31”三、三、Write # 語句語句語法格式:語法格式:將數(shù)據(jù)寫入順序文件。將數(shù)據(jù)寫入順序文件。(b). 緊湊格式輸出緊湊格式輸出用分號(hào)用分號(hào)“;”作為輸出項(xiàng)之間的分隔
14、符時(shí),作為輸出項(xiàng)之間的分隔符時(shí),輸出的數(shù)據(jù)按輸出的數(shù)據(jù)按緊湊緊湊格式寫到文件中。格式寫到文件中。注意:注意:數(shù)值數(shù)據(jù)前面有個(gè)符號(hào)位,后面有個(gè)數(shù)值數(shù)據(jù)前面有個(gè)符號(hào)位,后面有個(gè)空格空格Write #filenumber, outputlist文件號(hào)文件號(hào)文件列表文件列表Write # 與與 Print # 的區(qū)別:的區(qū)別:1、Write # 語句寫到文件中的數(shù)據(jù)以緊湊格式語句寫到文件中的數(shù)據(jù)以緊湊格式存放。存放。2、Write # 能自動(dòng)地為字符串加上雙引號(hào),數(shù)能自動(dòng)地為字符串加上雙引號(hào),數(shù)值沒有雙引號(hào),并將每個(gè)輸出項(xiàng)用逗號(hào)分開。值沒有雙引號(hào),并將每個(gè)輸出項(xiàng)用逗號(hào)分開。例:例:Private Su
15、b Command1_Click() Dim x, y As Single x = 12.3: y = -3.14 Open c:data.txt For Output As 1 Write #1, x, y, 123 Close #1End Sub結(jié)果:結(jié)果:12.3,-3.14,“123”注意:此處逗號(hào)與分號(hào),結(jié)果一樣解:解:例:例: 將如下內(nèi)容寫入文本文件中將如下內(nèi)容寫入文本文件中, 文件名文件名為為pyp.txt, 文件存放在文件存放在“d:龐一平龐一平” 文件夾文件夾下下今天我在學(xué)校開會(huì)今天我在學(xué)校開會(huì)龐一平龐一平 下午下午2000.5.28Private Sub Command1_
16、Click() Open d:龐一平龐一平pyp.txt For Output As #1 Print #1, 今天我在學(xué)校開會(huì)今天我在學(xué)校開會(huì) Print #1, Tab(10); 龐一平龐一平; Tab(18); 下午下午 Print #1, Tab(10); ”2000.5.28 Close #1 MsgBox (文件已經(jīng)建立文件已經(jīng)建立)End Sub思考:將上例中思考:將上例中Print # 改成改成 Write # ,觀察結(jié)果,觀察結(jié)果四、四、Input # 語句語句語法格式:語法格式:Input #filenumber, varlist從已打開的順序文件中讀出數(shù)據(jù)并將數(shù)據(jù)賦從已打
17、開的順序文件中讀出數(shù)據(jù)并將數(shù)據(jù)賦值給相應(yīng)的變量。值給相應(yīng)的變量。必要。用逗號(hào)分界的變量列表,將文必要。用逗號(hào)分界的變量列表,將文件中讀出的值分配給這些變量。件中讀出的值分配給這些變量。在輸入數(shù)據(jù)項(xiàng)目時(shí),如果變量列表數(shù)大于在輸入數(shù)據(jù)項(xiàng)目時(shí),如果變量列表數(shù)大于一行中數(shù)據(jù)的個(gè)數(shù),則會(huì)產(chǎn)生一個(gè)錯(cuò)誤。一行中數(shù)據(jù)的個(gè)數(shù),則會(huì)產(chǎn)生一個(gè)錯(cuò)誤。Dim MyString, MyNumberOpen TESTFILE For Input As #1 打開輸入文件。打開輸入文件。Do While Not EOF(1) 循環(huán)至文件尾。循環(huán)至文件尾。Input #1, MyString, MyNumber 將數(shù)據(jù)讀入兩個(gè)
18、變量。將數(shù)據(jù)讀入兩個(gè)變量。Print MyString, MyNumber 在窗口中顯示數(shù)據(jù)。在窗口中顯示數(shù)據(jù)。LoopClose #1 關(guān)閉文件。關(guān)閉文件。例:例:若文件中的內(nèi)容是若文件中的內(nèi)容是“Hello”,123,利用下面語句,利用下面語句可將文件內(nèi)容讀出。可將文件內(nèi)容讀出。演示將數(shù)據(jù)寫入文件與數(shù)據(jù)讀出文件演示將數(shù)據(jù)寫入文件與數(shù)據(jù)讀出文件Open d:TESTFILE.txt For Append As #2 Write #2, made in china, 12345Close #2五、五、Line Input # 語句語句語法格式:語法格式:Line Input #filenumb
19、er, varname從已打開的順序文件中讀出一行并將它分配從已打開的順序文件中讀出一行并將它分配給給 String變量。變量。 Dim TextLine Open TESTFILE For Input As #1 打開文件。打開文件。 Do While Not EOF(1) 循環(huán)至文件尾。循環(huán)至文件尾。 Line Input #1, TextLine 讀入一行數(shù)據(jù)并將其賦予某變量。讀入一行數(shù)據(jù)并將其賦予某變量。 Debug.Print TextLine 在調(diào)試窗口中顯示數(shù)據(jù)。在調(diào)試窗口中顯示數(shù)據(jù)。 Loop Close #1 關(guān)閉文件關(guān)閉文件寫入文件與讀出文件的配合:寫入文件與讀出文件的配合
20、:Write # 寫入寫入 - 用用 Input # 讀出讀出Print # 寫入寫入 - 用用 Line Input # 讀出讀出 Dim TextLine Open d:TESTFILE.txt For Output As #2 打開文件。打開文件。 Print #2, Wuxi, Jiangsu 輸入一行數(shù)據(jù)輸入一行數(shù)據(jù) Print #2, 中國中國 Close #2 關(guān)閉文件關(guān)閉文件 Open d:TESTFILE.txt For Input As #1 打開文件。打開文件。 Do While Not EOF(1) 循環(huán)至文件尾。循環(huán)至文件尾。 Line Input #1, TextL
21、ine 讀入一行數(shù)據(jù)并將其賦予某變量。讀入一行數(shù)據(jù)并將其賦予某變量。 Print TextLine 在窗口中顯示數(shù)據(jù)。在窗口中顯示數(shù)據(jù)。 Loop Close #1 關(guān)閉文件關(guān)閉文件例:例:六、六、Input 函數(shù)函數(shù)語法格式:語法格式:Input(n, #文件號(hào)文件號(hào))此函數(shù)表示一次從文件中讀出此函數(shù)表示一次從文件中讀出n個(gè)字符。它包個(gè)字符。它包括前導(dǎo)空格、逗號(hào)、雙引號(hào)以及回車換行符。括前導(dǎo)空格、逗號(hào)、雙引號(hào)以及回車換行符。Dim MyCharOpen d:TESTFILE.txt For Input As #1 打開文件。打開文件。Do While Not EOF(1) 循環(huán)至文件尾。循環(huán)
22、至文件尾。 MyChar = Input(1, #1) 讀入一個(gè)字符。讀入一個(gè)字符。 Debug.Print MyChar 顯示到調(diào)試窗口。顯示到調(diào)試窗口。LoopClose #1 關(guān)閉文件。關(guān)閉文件。例:例:Private Sub Command1_Click() Dim N, s As String Open d:zjs3.asm For Input As #10 打開文件打開文件zjs3.asm Open d:zjs3.bak For Append As #20 打開文件打開文件zjs3.bak Do While Not EOF(10) 循環(huán)至文件尾。循環(huán)至文件尾。 N = Input(
23、1, #10) 讀出一個(gè)字符。讀出一個(gè)字符。 Print #20, N; 寫入文件寫入文件zjs3.bak中中 Loop Close #20 關(guān)閉文件關(guān)閉文件zjs3.asm 。 Close #10 關(guān)閉文件關(guān)閉文件zjs3.bak 。End Sub例:將一個(gè)文件從一個(gè)地方復(fù)制到另一個(gè)地方例:將一個(gè)文件從一個(gè)地方復(fù)制到另一個(gè)地方例:用順序文件創(chuàng)建數(shù)據(jù)庫,并把原始數(shù)據(jù)寫例:用順序文件創(chuàng)建數(shù)據(jù)庫,并把原始數(shù)據(jù)寫入庫中。入庫中。Option ExplicitOption Base 1Private Sub CmdWrite_Click() Dim n, i As Integer Dim Sname(
24、) As String Dim Age() As String Dim Add() As String n = InputBox(請(qǐng)輸入學(xué)生人數(shù)請(qǐng)輸入學(xué)生人數(shù), 詢問人數(shù)詢問人數(shù), 1) Open d:龐一平龐一平檔案檔案.txt For Append As #1 ReDim Sname(n) As String ReDim Age(n) As String ReDim Add(n) As String For i = 1 To n Sname(i) = InputBox(輸入姓名輸入姓名, 第第 + Str(i) + 人人) Age(i) = InputBox(輸入年齡輸入年齡, 第第 +
25、Str(i) + 人人) Add(i) = InputBox(輸入家庭地址輸入家庭地址, 第第 + Str(i) + 人人) Write #1, Sname(i), Age(i), Add(i) Next i Close #1End SubPrivate Sub CmdRead_Click() Dim x, y, z As String Open d:龐一平龐一平檔案檔案.txt For Input As #1 Print 姓名姓名, 年齡年齡, 地址地址 Do While Not EOF(1) Input #1, x, y, z Print x, y, z Loop Close #1End
26、Sub&8-5 隨機(jī)文件隨機(jī)文件一、隨機(jī)文件的特點(diǎn)一、隨機(jī)文件的特點(diǎn)1、隨機(jī)文件由、隨機(jī)文件由記錄記錄組成,所有的記錄長度相同,通組成,所有的記錄長度相同,通過記錄號(hào)能找到所要找的記錄。過記錄號(hào)能找到所要找的記錄。2、每個(gè)記錄劃分為若干個(gè)字段。、每個(gè)記錄劃分為若干個(gè)字段。3、打開隨機(jī)文件后,對(duì)任一記錄即可讀、又可寫。、打開隨機(jī)文件后,對(duì)任一記錄即可讀、又可寫。記記錄錄號(hào)號(hào)123.nn+1n+2字段字段1字段字段2 字段字段3字段字段n 字段字段n+1.4、記錄中的每個(gè)字段可存放不同的內(nèi)容、記錄中的每個(gè)字段可存放不同的內(nèi)容(比如:比如:姓名、學(xué)號(hào)、年齡、性別、通訊地址、郵編姓名、學(xué)號(hào)、年
27、齡、性別、通訊地址、郵編等等等等)。這些字段內(nèi)容可能具有不同的數(shù)據(jù)類。這些字段內(nèi)容可能具有不同的數(shù)據(jù)類型。以后打開隨機(jī)文件后必須用變量來存放型。以后打開隨機(jī)文件后必須用變量來存放這些不同數(shù)據(jù)類型的數(shù)據(jù)。這些不同數(shù)據(jù)類型的數(shù)據(jù)。在應(yīng)用程序打開以隨機(jī)型訪問的文件以前,應(yīng)在應(yīng)用程序打開以隨機(jī)型訪問的文件以前,應(yīng)先聲明所有用來處理該先聲明所有用來處理該隨機(jī)隨機(jī)文件數(shù)據(jù)所需的變文件數(shù)據(jù)所需的變量。這些變量應(yīng)包括在一種新的數(shù)據(jù)類型中。量。這些變量應(yīng)包括在一種新的數(shù)據(jù)類型中。這個(gè)數(shù)據(jù)類型應(yīng)包括不同的變量,變量的數(shù)據(jù)這個(gè)數(shù)據(jù)類型應(yīng)包括不同的變量,變量的數(shù)據(jù)類型可以是以前學(xué)過的任何數(shù)據(jù)類型。類型可以是以前學(xué)過的
28、任何數(shù)據(jù)類型。思考:思考: 能否用數(shù)組來處理隨機(jī)文件中字段的內(nèi)容?能否用數(shù)組來處理隨機(jī)文件中字段的內(nèi)容?用戶定義新的數(shù)據(jù)類型,其中的變量應(yīng)對(duì)應(yīng)記錄用戶定義新的數(shù)據(jù)類型,其中的變量應(yīng)對(duì)應(yīng)記錄文件中的記錄字段,這些變量以后就能保存或處文件中的記錄字段,這些變量以后就能保存或處理記錄文件中的字段內(nèi)容。理記錄文件中的字段內(nèi)容。二、定義記錄類型二、定義記錄類型語法格式:語法格式:以前我們講過許多基本數(shù)據(jù)類型,以前我們講過許多基本數(shù)據(jù)類型,(如:如:String, Integer, Single, Boolean 等等等等)?,F(xiàn)在我們可以將這?,F(xiàn)在我們可以將這些不同的類型組合起來,來創(chuàng)建自己的些不同的類型
29、組合起來,來創(chuàng)建自己的“用戶自用戶自定義數(shù)據(jù)類型定義數(shù)據(jù)類型”。Private | Public Type varnameelementname (subscripts) As typeelementname (subscripts) As typeEnd Type其中:其中:Private 用在窗體??熘杏迷诖绑w模快中Public 用在標(biāo)準(zhǔn)模塊中用在標(biāo)準(zhǔn)模塊中Varname -必須。必須。用戶自定義類型的名稱;用戶自定義類型的名稱;遵循標(biāo)準(zhǔn)的變量命名約定遵循標(biāo)準(zhǔn)的變量命名約定Elementname - 必需的。用戶自定義類型的必需的。用戶自定義類型的元素名稱。元素名稱。subscripts
30、- 可選的。數(shù)組元素的維數(shù)??蛇x的。數(shù)組元素的維數(shù)。Type StateData CityCode As Integer County As String * 30End TypeDim Washington As StateData例:例:它只能用在模塊級(jí)別中。它只能用在模塊級(jí)別中。例:創(chuàng)建自己的通訊錄例:創(chuàng)建自己的通訊錄(TXL)數(shù)據(jù)類型,包括:數(shù)據(jù)類型,包括:學(xué)號(hào)學(xué)號(hào)(Id)、姓名、姓名(Name)、地址、地址(Add)。解:在窗體模塊中,書寫如下代碼。解:在窗體模塊中,書寫如下代碼。Option ExplicitPrivate Type TXL Id As Integer Name A
31、s String Add As StringEnd TypePrivate Sub Command1_Click() Dim myinfo As TXL myinfo.Id = 10 myinfo.Name = 張三張三 myinfo.Add = 中山路中山路150號(hào)號(hào) Print 學(xué)號(hào)學(xué)號(hào), 姓名姓名, 姓名姓名 Print Print myinfo.Id, myinfo.Name, myinfo.AddEnd Sub語法格式:語法格式:Open pathname For Random As filenumber Len = reclength路徑文件名路徑文件名文件號(hào)文件號(hào)記錄長度記錄長度
32、三、打開隨機(jī)文件的語句三、打開隨機(jī)文件的語句注意:注意:Len=reclength (記錄長度記錄長度) 如果語句中的此如果語句中的此長度小于實(shí)際的記錄長度,則會(huì)出現(xiàn)錯(cuò)誤。長度小于實(shí)際的記錄長度,則會(huì)出現(xiàn)錯(cuò)誤。如果語句中的此長度大于實(shí)際的記錄長度,如果語句中的此長度大于實(shí)際的記錄長度,則不會(huì)出錯(cuò),但浪費(fèi)一些磁盤存儲(chǔ)空間。則不會(huì)出錯(cuò),但浪費(fèi)一些磁盤存儲(chǔ)空間。1、PUT 語句語句將一個(gè)將一個(gè)變量變量的數(shù)據(jù)寫入磁盤文件中。的數(shù)據(jù)寫入磁盤文件中。語法格式:語法格式:Put #filenumber, recnumber, varname文件號(hào)文件號(hào)記錄號(hào)或記錄號(hào)或字節(jié)數(shù)字節(jié)數(shù)變量名,將此變量中變量名,將
33、此變量中的數(shù)據(jù)寫入文件中的數(shù)據(jù)寫入文件中文件中的第一個(gè)記錄或字節(jié)位于位置文件中的第一個(gè)記錄或字節(jié)位于位置 1 1,第二個(gè),第二個(gè)記錄或字節(jié)位于位置記錄或字節(jié)位于位置 2 2,依此類推。如果省略,依此類推。如果省略 recnumber,則將上一個(gè),則將上一個(gè) Get或或 Put 語句之后語句之后的(或上一個(gè)的(或上一個(gè) Seek Seek 函數(shù)指出的)下一個(gè)記錄或函數(shù)指出的)下一個(gè)記錄或字節(jié)寫入。所有用于分界的逗號(hào)都必須羅列出來,字節(jié)寫入。所有用于分界的逗號(hào)都必須羅列出來,例如:例如:Put #4,FileBuffer語法格式:語法格式:FreeFile(rangenumber)2、FreeFi
34、le 函數(shù)函數(shù)返回一個(gè)返回一個(gè) Integer,代表下一個(gè)可供,代表下一個(gè)可供 Open 語句使用的文件號(hào)。語句使用的文件號(hào)。指定指定 0(缺省值)則返回一個(gè)介于(缺省值)則返回一個(gè)介于 1-255 之之間的文件號(hào)。指定間的文件號(hào)。指定 1 則返回一個(gè)介于則返回一個(gè)介于 256-511 之間的文件號(hào)。之間的文件號(hào)。為為0 或或 13、Reset 語句語句關(guān)閉所有用關(guān)閉所有用 Open 語句打開的磁盤文件。并語句打開的磁盤文件。并將文件緩沖區(qū)的所有內(nèi)容寫入磁盤。將文件緩沖區(qū)的所有內(nèi)容寫入磁盤。4、EOF 函數(shù)函數(shù)返回一個(gè)返回一個(gè) Integer,表明已經(jīng)到達(dá)為,表明已經(jīng)到達(dá)為 Random 或順
35、序或順序 Input 打開的文件的結(jié)尾。打開的文件的結(jié)尾。語法格式:語法格式:EOF(filenumber)文件號(hào)文件號(hào)5、LOF 函數(shù)函數(shù)返回一個(gè)返回一個(gè) Long,表示用,表示用 Open 語句打開的文語句打開的文件的大小,該大小以字節(jié)為單位。件的大小,該大小以字節(jié)為單位。語法格式:語法格式:LOF(filenumber)文件號(hào)文件號(hào)6、FileLen 函數(shù)函數(shù)返回一個(gè)返回一個(gè) Long,代表一個(gè)文件的長度,單位,代表一個(gè)文件的長度,單位是字節(jié)。它用在文件未打開時(shí)。是字節(jié)。它用在文件未打開時(shí)。語法格式:語法格式:FileLen(Pathname)路徑文件名路徑文件名7、關(guān)于記錄長度問題:、
36、關(guān)于記錄長度問題:在隨機(jī)文件中用在隨機(jī)文件中用Open語句時(shí),語句時(shí),記錄長度應(yīng)盡記錄長度應(yīng)盡量與實(shí)際記錄長度一致。若不一樣時(shí),只能大量與實(shí)際記錄長度一致。若不一樣時(shí),只能大不能小。不能小。例:用隨機(jī)文件建立通訊錄。通訊錄包括姓名、例:用隨機(jī)文件建立通訊錄。通訊錄包括姓名、電話號(hào)碼和郵政編碼。電話號(hào)碼和郵政編碼。在標(biāo)準(zhǔn)模塊中先定義數(shù)據(jù)類型:在標(biāo)準(zhǔn)模塊中先定義數(shù)據(jù)類型:Option ExplicitPublic Type Txl Name As String * 4 Tel_Number As String * 8 Post_Code As String * 6End Type窗體模塊中的代碼:
37、窗體模塊中的代碼:Option ExplicitDim Person As TxlDim Recnum As Long, RecL As LongPrivate Sub CmdExit_Click() reset EndEnd SubPrivate Sub CmdPut_Click() RecL = Len(Person) Open d:address For Random As #1 Len = RecL Recnum = LOF(1) RecL + 1 TxtRec = Str(Recnum) If TxtName And TxtTel And TxtPost Then Person.Na
38、me = TxtName Person.Tel_Number = TxtTel Person.Post_Code = TxtPost Put #1, Recnum, Person TxtName = TxtTel = TxtPost = Recnum = Recnum + 1 TxtRec = Str(Recnum) TxtName.SetFocus Else MsgBox (“數(shù)據(jù)輸入不能有空,請(qǐng)重新輸入數(shù)據(jù)輸入不能有空,請(qǐng)重新輸入) End If Close #1End Sub8、GET 語句語句語法格式:語法格式:文件號(hào)文件號(hào)記錄號(hào)記錄號(hào)或字節(jié)或字節(jié)數(shù)數(shù)變量名,將讀變量名,將讀出的數(shù)據(jù)放
39、入出的數(shù)據(jù)放入其中其中將一個(gè)已打開的磁盤文件讀入一個(gè)將一個(gè)已打開的磁盤文件讀入一個(gè)變量變量之中之中. .Get #filenumber, recnumber, varname在在 Open 語句打開的文件中,設(shè)置下一個(gè)準(zhǔn)備語句打開的文件中,設(shè)置下一個(gè)準(zhǔn)備讀讀/ /寫操作的位置。寫操作的位置。9、Seek 語句語句語法格式:語法格式:Seek #filenumber, position文件號(hào)文件號(hào)指出下一個(gè)讀寫操作指出下一個(gè)讀寫操作將要發(fā)生的位置將要發(fā)生的位置如果試圖對(duì)一個(gè)位置為負(fù)數(shù)或零的文件如果試圖對(duì)一個(gè)位置為負(fù)數(shù)或零的文件進(jìn)行進(jìn)行 Seek Seek 操作,則會(huì)導(dǎo)致錯(cuò)誤發(fā)生。操作,則會(huì)導(dǎo)致錯(cuò)
40、誤發(fā)生。注意注意:接上面的例子進(jìn)行讀操作接上面的例子進(jìn)行讀操作Private Sub CmdRead_Click() RecL = Len(Person) Open d:address For Random As #2 Len = RecL Recnum = InputBox(輸入記錄號(hào)輸入記錄號(hào)) If Recnum LOF(2) RecL Or Recnum = 0 Then MsgBox 此記錄不存在,請(qǐng)重新輸入此記錄不存在,請(qǐng)重新輸入: Close #2: Exit Sub Else Seek #2, Recnum Get #2, Recnum, Person TxtName.Text
41、 = Person.Name TxtTel.Text = Person.Tel_Number TxtPost.Text = Person.Post_Code End If Close #2End Sub例:用隨機(jī)文件例:用隨機(jī)文件建立一個(gè)通訊錄建立一個(gè)通訊錄檔案,通訊錄包檔案,通訊錄包括姓名、單位、括姓名、單位、性別、電話性別、電話.解:創(chuàng)建兩解:創(chuàng)建兩 個(gè)窗體對(duì)象個(gè)窗體對(duì)象Option ExplicitPrivate Type TXL Name As String * 4 Unit As String * 20 Sex As String * 2 Tel As String * 12End
42、Type在窗體模塊級(jí)中聲明自定義類型在窗體模塊級(jí)中聲明自定義類型Private Sub CmdWrite_Click() Dim Myinfo As TXL Dim i, As Integer If Text1 = Then MsgBox (請(qǐng)輸入姓名請(qǐng)輸入姓名): Text1.SetFocus: Exit Sub Myinfo.Name = Text1 If Text2 = Then MsgBox (請(qǐng)輸入單位請(qǐng)輸入單位): Text2.SetFocus: Exit Sub Myinfo.Unit = Text2 If Text3 = Then MsgBox (請(qǐng)輸入性別請(qǐng)輸入性別): Te
43、xt3.SetFocus: Exit Sub Myinfo.Sex = Text3 If Text4 = Then MsgBox (請(qǐng)輸入電話請(qǐng)輸入電話): Text4.SetFocus: Exit Sub Myinfo.Tel = Text4 Open e:qqq For Random As #1 Len = Len(Myinfo) i = LOF(1) / Len(Myinfo) Put #1, i + 1, Myinfo Close #1 Text1.SetFocus Text1 = Text2 = Text3 = Text4 = End SubPrivate Sub CmdQuery_
44、Click() Dim n, i As Integer Dim Myinfo As TXL Form2.Show Form2.Cls Open e:qqq For Random As #2 Len = Len(Myinfo) i = LOF(2) / Len(Myinfo) Form2.Print 姓名姓名, 單位單位, , 性別性別, 電話電話 Form2.Print - For n = 1 To i Get #2, n, Myinfo Form2.Print Myinfo.Name, Myinfo.Unit, Myinfo.Sex, Myinfo.Tel Next n Close #2En
45、d SubPrivate Sub CmdExit_Click() EndEnd SubPrivate Sub CmdBack_Click() Form2.Hide Form1.ShowEnd Sub&8-6 二進(jìn)制文件二進(jìn)制文件特點(diǎn):特點(diǎn):任何類型的文件任何類型的文件(順序文件或隨機(jī)文件順序文件或隨機(jī)文件)都可以以二進(jìn)制訪問模式打開。都可以以二進(jìn)制訪問模式打開。一、一、Open 語句語句Open pathname For Binary Access 存取類型存取類型 lock As filenumber 路徑文件名路徑文件名文件號(hào)文件號(hào)ReadWriteRead WriteSharedLock ReadLock WriteLock Read WriteOpen TESTFILE For Binary Access Write As #1例:例:以只允許寫操作的二進(jìn)制方式打開文件以只允許寫操作的二進(jìn)制方式打開文件。Open TESTFILE For Binary Access Read Lock Read
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全職合同范本(2篇)
- 廣告業(yè)務(wù)員銷售工作參考計(jì)劃范文2
- 光船租賃合同范本
- 汽車庫租賃合同
- 2025年石油鉆探、開采專用設(shè)備項(xiàng)目發(fā)展計(jì)劃
- 2025年金屬切削機(jī)床項(xiàng)目合作計(jì)劃書
- 2024擔(dān)保協(xié)議標(biāo)準(zhǔn)格式匯編版B版
- 2024年股權(quán)轉(zhuǎn)讓:資金監(jiān)管協(xié)議模板3篇
- 2024幼兒園環(huán)境創(chuàng)設(shè)與設(shè)施采購合同范本3篇
- 第4課 洋務(wù)運(yùn)動(dòng)(分層作業(yè))(原卷版)
- 口腔正畸科普課件
- 2024年廣東省普通高中學(xué)業(yè)水平合格性地理試卷(1月份)
- 住宅樓安全性檢測(cè)鑒定方案
- 配送管理招聘面試題與參考回答2024年
- 江蘇省語文小學(xué)三年級(jí)上學(xué)期期末試題及解答參考(2024年)
- 黑龍江哈爾濱市省實(shí)驗(yàn)中學(xué)2025屆數(shù)學(xué)高一上期末監(jiān)測(cè)試題含解析
- 小學(xué)一年級(jí)數(shù)學(xué)思維訓(xùn)練100題(附答案)
- 安全生產(chǎn)治本攻堅(jiān)三年行動(dòng)方案(一般工貿(mào)) 2024
- 2024年廣東省廣州市黃埔區(qū)中考一模語文試題及答案
- 飯?zhí)脪炜繀f(xié)議合同范本
- 2023-2024學(xué)年遼寧省重點(diǎn)高中沈陽市郊聯(lián)體高二上學(xué)期期末考試生物試題(解析版)
評(píng)論
0/150
提交評(píng)論