




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第十一章 文件文件的概念順序存取文本隨機(jī)文件有關(guān)文件的程序舉例文件的概念“文件”(file)是指存放在外部介質(zhì)上的以文件名為標(biāo)識的數(shù)據(jù)的集合。文件的分類文件的分類: (1)從文件的內(nèi)容來區(qū)分 可以分為程序文件和數(shù)據(jù)文件兩大類。前者存儲的是源程序、目標(biāo)程序等各種程序,后者存儲的是程序運(yùn)行時所用到的輸入或輸出的數(shù)據(jù)。 (2)從存儲信息的形式來區(qū)分 可分為ASCII文件和二進(jìn)制文件。前者是以ASCII代碼形式存放的,后者是以機(jī)內(nèi)存儲數(shù)據(jù)的形式存儲的。 (3)從文件的組織形式來區(qū)分 數(shù)據(jù)文件可以分為順序文件和隨機(jī)文件。 (4)按存儲介質(zhì)來區(qū)分 文件可以分為:磁盤文件、磁帶文件、光盤文件、打印文件等。順
2、序文件的概念n順序存取文件(Sequence Access File)簡稱順序文件,它的特點(diǎn)是:文件中各記錄寫入、存放和讀出三者的順序是一致的。順序文件中記錄的邏輯順序與物理順序是一致的。順序文件有這特點(diǎn):先進(jìn)先出,后進(jìn)后出。 n順序文件是以ASCII代碼方式存放數(shù)據(jù)的。順序文件的打開OPEN語句OPEN語句的格式為:OPEN文件名文件名FOR讀寫方式讀寫方式AS #文件號文件號其中:文件名指欲打開的已存入的文件名其中:文件名指欲打開的已存入的文件名n讀寫方式可選以下三者之一:讀寫方式可選以下三者之一:nOUTPUT:指定向文件寫數(shù)據(jù),即從計算機(jī)向文件輸出數(shù)據(jù)。:指定向文件寫數(shù)據(jù),即從計算機(jī)向
3、文件輸出數(shù)據(jù)。nINPUT:指定向計算機(jī)輸入數(shù)據(jù),即計算機(jī)從文件讀入數(shù)據(jù)。:指定向計算機(jī)輸入數(shù)據(jù),即計算機(jī)從文件讀入數(shù)據(jù)。nAPPEND:為再文件后添加數(shù)據(jù)而打開文件。:為再文件后添加數(shù)據(jù)而打開文件。OPEN語句的說明n如果打開方式是INPUT,而此時要打開的文件不存在,再會出錯;如果是其他兩種方式打開文件,如果文件不存在則自動創(chuàng)建一個指定文件名的文件,若以O(shè)UTPUT方式打開一個文件,不論所指定的文件名在磁盤中是否存在,都意味著建立一個新的數(shù)據(jù)文件;nAS語句后的文件號可以是1255之間的任意一個整數(shù),這個號實際是一個緩沖區(qū)號,所有的數(shù)據(jù)輸入和輸出語句都是用文件號來代替文件名;n對一個文件以
4、某種方式打開,則只能對其作指定的操作,如用OUTPUT打開,就只能把數(shù)據(jù)從頭到尾寫到文件中,而不能進(jìn)行“讀”操作,只有關(guān)閉后重新以INPUT打開才能進(jìn)行讀數(shù)據(jù);n舉例:nOPEN “a:basti01.dat” FOR OUTPUT AS #5nOPEN “c:basfile1.dat” FOR INPUT AS #1nOPEN “A:BASTI01.DAT” FOR APPEND AS #3關(guān)閉文件CLOSE語句用來關(guān)閉一個已用完不再使用的文件,其格式為: CLOSE文件號文件號,#文件文件號號 如不指定文件號,則表示關(guān)閉所有已打開的文件。對順序文件的輸出(寫文件)1).PRINT#語句和語
5、句和PRINT#USING語句語句 PRINT#語句的格式為: PRINT#文件號文件號,輸出項表列輸出項表列 PRINT#USING語句的一般格式為: PRINT#,USING “”; 它的使用與PRINT USING語句相似,只不過前者把數(shù)據(jù)寫入外存,后者把數(shù)據(jù)輸出在屏幕上。2).WRITE#語句語句 格式為: WRITE#文件號文件號,輸出項表列輸出項表列 用它寫文件時能自動地在各數(shù)據(jù)項之間插入逗號,并給字符串加雙引號,且不在正數(shù)前面設(shè)置空格。用WRITE語句把數(shù)據(jù)寫入文件事例主程序:主程序:DECLARE SUB afile (nf AS STRING)DECLARE SUB wfil
6、e (tfn AS STRING)REM main programDIM tfn1 AS STRING, tfn2 AS STRINGtfn1 = c:1101w.dattfn2 = c:1101a.datPRINT (1)*: CALL wfile(tfn1)PRINT (2)*: CALL afile(tfn1)PRINT (3)*: CALL afile(tfn2)DATA WAMG,M,87.5,LI,F,91,BI,M,69.3DATA TIAN,F,99,YANG,m,98END追加和寫入子程序:追加和寫入子程序:SUB afile (nf AS STRING) DIM i AS
7、INTEGER, s AS STRING, b AS STRING OPEN nf FOR APPEND AS #2 READ s, b, a WRITE #2, s, b, a CLOSE #2END SUBSUB wfile (tfn AS STRING) DIM i AS INTEGER, s AS STRING, b AS STRING OPEN tfn FOR OUTPUT AS #1 FOR i = 1 TO 3 READ s, b, a WRITE #1, s, b, a NEXT i CLOSE #1END SUB文件1101w.dat:WAMG,M,87.5LI,F,91BI
8、,M,69.3TIAN,F,99DECLARE SUB pfile (tfn AS STRING)REM main programDIM tfn AS STRINGtfn = c:1102.datCALL pfile(tfn)DATA WAMG,M,87.5,LI,F,91,BI,M,69.3ENDSUB pfile (tfn AS STRING) DIM i AS INTEGER, s AS STRING, b AS STRING OPEN tfn FOR OUTPUT AS #1 FOR i = 1 TO 3 READ s, b, a PRINT #1, s, b, a NEXT i CL
9、OSE #1END SUB用PRINT語句把數(shù)據(jù)寫入文件事例文件文件1102.dat:WAMG M 87.5 LI F 91 BI M 69.3從順序文件輸入(讀文件)1).INPUT#語句 一般格式為: INPUT#文件號,變量,變量其作用是:從一個順序文件讀數(shù)據(jù),并把這些數(shù)據(jù)賦給所指定的變量,每次從文件中讀出一個記錄。2).LINE INPUT#語句 一般格式為: LINE INPUT#文件號,字符串變量 作用是從打開的順序文件中讀取一個記錄,把它作為一個字符串,賦給指定的字符串變量。Input語句讀入數(shù)據(jù)舉例Samp11-3:DIM nf AS STRING, s AS STRING,
10、b AS STRINGnf = “c:1101w.dat“ 用WRITE語句寫數(shù)據(jù)OPEN nf FOR INPUT AS #2WHILE NOT (EOF(2) INPUT #2, s, b, a PRINT s, b, aWENDCLOSEENDSamp11-4:DIM nf AS STRING, s AS STRING, b AS STRINGnf = c:1102.dat“ 用PRINT語句寫數(shù)據(jù)OPEN nf FOR INPUT AS #2WHILE NOT (EOF(2) INPUT #2, s, b, a PRINT s PRINT b PRINT aWENDCLOSEENDLI
11、NE Input語句讀入數(shù)據(jù)舉例Samp11-3-a:DIM nf AS STRING, s AS STRINGnf = “c:1101w.dat“ 用WRITE語句寫數(shù)據(jù)OPEN nf FOR INPUT AS #2WHILE NOT (EOF(2) LINE INPUT #2, s PRINT sWENDCLOSEEND執(zhí)行結(jié)果:執(zhí)行結(jié)果:WAMG,M,87.5LI,F,91BI,M,69.3TIAN,F,99LINE Input語句讀入數(shù)據(jù)舉例Samp11-3-b:DIM nf AS STRING, s AS STRINGnf = “c:1102.dat“ 用PRINT語句寫數(shù)據(jù)OPEN
12、 nf FOR INPUT AS #2WHILE NOT (EOF(2) LINE INPUT #2, s PRINT sWENDCLOSEEND執(zhí)行結(jié)果:執(zhí)行結(jié)果:WAMG M 87.5LI F 91BI M 69.3對順序文件的修改如果已有一個順序文件,想對其中某一記錄中的數(shù)據(jù)進(jìn)行修改,不能直接讀出該記錄,然后在程序中對之修改,再寫回去取代原記錄。這是因為以下兩點(diǎn)原因: 打開一個文件時必須在INPUT,OUTPUT或APPEND三種方式中指定一種工作方式。要讀文件就應(yīng)指定為INPUT方式,要向文件寫數(shù)據(jù)就應(yīng)指定OUTPUT或APPEND方式。QBASIC不允許在一個OPEN語句中對一個順序
13、文件既是INPUT方式又是OUTPUT方式,不能既讀又寫; 對順序文件的讀寫必須從第一個記錄開始,一個記錄一個記錄地讀寫。例如不能直接讀第10個記錄,必須先讀前面9個記錄,才能讀第10個記錄。順序文件修改步驟用INPUT方式打開需要修改的老文件,準(zhǔn)備從中逐個讀出數(shù)據(jù)。用OUTPUT方式另設(shè)一個臨時的中間文件,用來存放修改后的各記錄。讀入一個老文件的記錄,用戶決定是否要對它進(jìn)行修改,如不修改,就把此記錄原封不動地寫到中間文件中去。如果要修改,在修改后再寫到中間文件中去。對每一記錄都如此處理。最后,中間文件中已是經(jīng)過修改的文件,將原來文件撤消,把中間文件改名為原來的文件名即可。順序文件應(yīng)用舉例SA
14、MP11-6:建立學(xué)生檔案。6名學(xué)生的學(xué)號和三年中每一年的平均成績放在DATA語句中,建立文件AF.DAT,存放6名學(xué)生的學(xué)號和3年的平均成績。SAMP11-7:如果某一個學(xué)生的成績輸入錯誤,對此學(xué)生的學(xué)生成績進(jìn)行修改,修改后的數(shù)據(jù)仍存入AF.DAT文件中。SAMP11-8:對每一個學(xué)生添加第四年度的平均分,計算四個年度的平均分,把數(shù)據(jù)全部添加到ST.DAT中。SAMP11-6:DIM num AS STRING, a AS STRINGOPEN c:af.dat FOR OUTPUT AS #1READ num, s1, s2, s3WHILE num WRITE #1, num, s1,
15、s2, s3 READ num, s1, s2, s3WENDCLOSEPRINT STRING$(20, ); AF.DATOPEN c:af.dat FOR INPUT AS #1WHILE NOT (EOF(1) LINE INPUT #1, a PRINT aWENDCLOSEDATA A1,87,76,68.5,A2,69.5,66,89,A3,77,84,79DATA A4,92,89.4,78,A5,98,87,76,A6,67.5,81,71,0,0,0執(zhí)行結(jié)果:AF.DATA1,87,76,68.5A2,69.5,66,89A3,77,84,79A4,92,89.4,78A5
16、,98,87,76A6,67.5,81,71SAMP11-7:DIM snum AS STRING, num AS STRING, a AS STRINGOPEN c:af.dat FOR INPUT AS #1OPEN c:tt.dat FOR OUTPUT AS #2INPUT Please input data to update:, snum$, ss1, ss2, ss3WHILE NOT (EOF(1) INPUT #1, num$, s1, s2, s3 IF (num = snum) THEN num = snum: s1 = ss1: s2 = ss2: s3 = ss3 E
17、ND IF WRITE #2, num, s1, s2, s3WENDCLOSEOPEN c:af.dat FOR OUTPUT AS #1OPEN c:tt.dat FOR INPUT AS #2WHILE NOT (EOF(2) INPUT #2, a, c1, c2, c3 WRITE #1, a, c1, c2, c3WENDCLOSESamp11-8:DIM num AS STRING, a AS STRINGOPEN c:af.dat FOR INPUT AS #1OPEN c:St.dat FOR OUTPUT AS #2WHILE NOT (EOF(1) READ s4 INP
18、UT #1, num, s1, s2, s3 t = s1 + s2 + s3 + s4 WRITE #2, num, s1, s2, s3, s4, tWENDCLOSEPRINT STRING$(20, ); st.datOPEN c:st.dat FOR INPUT AS #1WHILE NOT (EOF(1) LINE INPUT #1, a PRINT aWENDCLOSEDATA 70,80,90,60,70,80END執(zhí)行結(jié)果:st.datA1,87,76,68.5,70,301.5A2,69.5,66,89,80,304.5A3,77,84,79,90,330A4,92,89.
19、4,78,60,319.4A5,98,87,76,70,331A6,87,90,70,80,327文件有關(guān)的函數(shù)和語句1).EOF函數(shù) 格式:EOF()作用:判斷文件位置指針是否到達(dá)文件末尾。2).LOF函數(shù) 格式:LOF()作用:此函數(shù)給出指定的文件中總字節(jié)的長度,因此對于隨機(jī)文件,以下表達(dá)式得到隨機(jī)文件的記錄數(shù)。3).SEEK函數(shù) 格式:SEEK ()作用:對于順序文件或以BINARY方式打開的文件得到的是文件指針在第幾個字節(jié),對于以RANDOM方式打開的隨機(jī)文件指向當(dāng)前的記錄號。4).SEEK語句 格式:SEEK#文件號文件號,表示位置的長整型,表示位置的長整型作用:用來將文件的指針移到
20、指定的位置處,對于順序文件或以BINARY方式打開的文件以字節(jié)為單位。對于以RANDOM方式打開的隨機(jī)文件指向的是記錄位置。5).LOC函數(shù) 格式:LOC ()作用:對于用BINARY方式打開的文件,函數(shù)返回最后讀寫過的文件中第幾個字節(jié),對于用RANDOM方式打開的文件,則返回最后讀寫過的記錄號。它的值是SEEK函數(shù)的函數(shù)值減1。隨機(jī)文件的概念隨機(jī)存取文件(Random Access File)簡稱隨機(jī)文件。隨機(jī)存取文件又稱“直接存取文件”。隨機(jī)文件一旦打開,在同一程序中既可以讀,也可以寫。隨機(jī)文件是以二進(jìn)制形式存儲在外部介質(zhì)上的。隨機(jī)文件的存取無論從空間還是時間的角度都比順序文件有較高的效率
21、。文件與記錄數(shù)據(jù)文件中的數(shù)據(jù)是用“記錄”(record)組織起來的。一個文件是由若干個記錄組成的。在一個記錄中包含若干個數(shù)據(jù)項?;蛘哒f,一組數(shù)據(jù)組成一個記錄,若干個記錄構(gòu)成一個文件,因此,文件也可認(rèn)為是記錄的集合,記錄是數(shù)據(jù)項的集合。數(shù)據(jù)數(shù)據(jù)1數(shù)據(jù)數(shù)據(jù)2數(shù)據(jù)數(shù)據(jù)3數(shù)據(jù)數(shù)據(jù)1數(shù)據(jù)數(shù)據(jù)2數(shù)據(jù)數(shù)據(jù)3記錄記錄文件1隨機(jī)文件的打開和關(guān)閉nOPEN語句的一般格式nOPEN 文件名文件名 FOR 讀寫方式讀寫方式 AS #文件號文件號 LEN=TnLEN=t 是可選項,是可選項,t是一個整型數(shù),用來指定以字節(jié)為單位的是一個整型數(shù),用來指定以字節(jié)為單位的記錄長度,例如記錄長度,例如LEN=5,則指定記錄的長度
22、,則指定記錄的長度5個字節(jié);個字節(jié);n讀寫方式可以是:讀寫方式可以是:? RANDOM:用這種方式打開文件,數(shù)據(jù)以記錄的形式存放在文件中,且FOR RANDOM可以省略不寫。如果不指定記錄的長度,則默認(rèn)為128個字節(jié);? BIMARY:輸出數(shù)據(jù)按它所占的字節(jié)為單位存放在文件中,不以記錄為單位。nCLOSE語句:與隨機(jī)文件CLOSE語句相同。隨機(jī)文件的輸出n輸出語句PUTnPUT語句的形式:PUT #文件號,r,輸出變量nr是一個長整型,當(dāng)以RANDOM方式打開文件時,r代表把變量中的數(shù)據(jù)輸出到文件中的第r個記錄位置上。當(dāng)以BINARY方式打開文件時, r代表把變量中的數(shù)據(jù)輸出到文件中的第r個字
23、節(jié)開始的位置上;n當(dāng)r省略時,表示將數(shù)據(jù)輸出到當(dāng)前文件指針?biāo)诘奈恢?,如:PUT #文件號,文件號,a(“逗號不能省略逗號不能省略”)n一個一個PUT語句只能輸出一個變量值,在輸出變量的位語句只能輸出一個變量值,在輸出變量的位置上不可以是表達(dá)式,輸出的數(shù)據(jù)一定要放在變量中置上不可以是表達(dá)式,輸出的數(shù)據(jù)一定要放在變量中才能輸出。才能輸出。隨機(jī)文件的輸入n輸入語句GETnGET語句的形式:GET #文件號,文件號,r,輸出變量,輸出變量nr是一個長整型,當(dāng)以是一個長整型,當(dāng)以RANDOM方式打開文件時,方式打開文件時,r代表把第代表把第r個記錄的數(shù)據(jù)讀入變量中。當(dāng)以個記錄的數(shù)據(jù)讀入變量中。當(dāng)以BI
24、NARY方式打開文件時,方式打開文件時, r代表把文件中的第代表把文件中的第r個字節(jié)開始的個字節(jié)開始的數(shù)據(jù)讀入變量中;數(shù)據(jù)讀入變量中;n當(dāng)當(dāng)r省略時,表示從當(dāng)前文件指針?biāo)诘奈恢米x入數(shù)省略時,表示從當(dāng)前文件指針?biāo)诘奈恢米x入數(shù)據(jù)到變量中,如:據(jù)到變量中,如:GET #文件號,文件號,X(“逗號不能省逗號不能省略略”)n一個一個GET語句只能讀入一個變量值。語句只能讀入一個變量值。隨機(jī)文件程序舉例單一數(shù)據(jù)類型隨機(jī)文件:單一數(shù)據(jù)類型隨機(jī)文件:samp11-9.bas: 對按對按RANDOM方式打方式打開的文件進(jìn)行開的文件進(jìn)行“讀讀”、“寫寫”;sam11-10.bas: 對按對按RANDOM方式打
25、方式打開的文件進(jìn)行開的文件進(jìn)行“讀讀”、“寫寫”;復(fù)合數(shù)據(jù)類型的隨機(jī)文件:復(fù)合數(shù)據(jù)類型的隨機(jī)文件:sam11-11.bassam11-12.basDIM i AS INTEGER, k AS INTEGEROPEN c:ad.dat FOR RANDOM AS #1 LEN = LEN(x!)PRINT STRING$(30, )FOR i = 1 TO 10 READ x PUT #1, , xNEXT iSEEK #1, 1FOR i = 1 TO 5 GET #1, , a PRINT a;NEXT iPRINTREMPRINT SEEK(1)=; SEEK(1), LOC(1)=; L
26、OC(1), LOF(1)=, LOF(1)SEEK #1, 5GET #1, , xWHILE NOT (EOF(1) PRINT x; GET #1, , xWENDPRINTq = 1234.9PUT #1, 7, qk = 1WHILE k = (LOF(1) LEN(a!) GET #1, k, x PRINT x; k = k + 1WENDPRINTCLOSEDATA 11.1,22.2,33.3,44.4,55.5,66.6,77.7,88.8,99.9,1.1,2.1,3.1執(zhí)行結(jié)果:執(zhí)行結(jié)果:11.1 22.2 33.3 44.4 55.5SEEK(1)= 6 LOC(1)
27、= 5 LOF(1)= 4055.5 66.6 77.7 88.8 99.9 1.111.1 22.2 33.3 44.4 55.5 66.6 0 88.8 99.9 1.1例例11。9DIM i AS INTEGER, k AS INTEGEROPEN c:ad.dat FOR BINARY AS #1PRINT STRING$(30, )FOR i = 1 TO 10 READ x PUT #1, , xNEXT iSEEK #1, 1FOR i = 1 TO 20 STEP 4 GET #1, i, a PRINT a;NEXT iPRINTREMPRINT SEEK(1)=; SEEK
28、(1), LOC(1)=; LOC(1), LOF(1)=, LOF(1)SEEK #1, 17GET #1, , xWHILE NOT (EOF(1) PRINT x; GET #1, , xWENDPRINTGET #1, 5, r: GET #1, 29, pPUT #1, 5, p: PUT #1, 29, rk = 1WHILE k = LOF(1) GET #1, k, x PRINT x; k = k + 4WENDPRINTCLOSEDATA 11.1,22.2,33.3,44.4,55.5,66.6,77.7,88.8,99.9,1.1,2.1,3.1執(zhí)行結(jié)果:執(zhí)行結(jié)果: 1
29、1.1 22.2 33.3 44.4 55.5SEEK(1)= 21 LOC(1)= 20 LOF(1)= 40 55.5 66.6 77.7 88.8 99.9 1.1 11.1 88.8 33.3 44.4 55.5 66.6 77.7 22.2 99.9 1.1例例11。10TYPE std num AS STRING * 6 s1 AS SINGLE s2 AS SINGLE s3 AS SINGLEEND TYPEDIM a AS std, x AS stdCLSOPEN c:rf.dat FOR RANDOM AS #1 LEN = LEN(a)READ a.num, a.s1, a.s2, a.s3WHILE a.num SPACE$(6) PUT #1, ,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度2月醫(yī)療DRG分組算法優(yōu)化技術(shù)服務(wù)協(xié)議
- 吉他日常訓(xùn)練基本功
- 二零二五出租房屋補(bǔ)充協(xié)議
- 二零二五版外賣送餐合同
- (安徽專用)中考?xì)v史真題匯編:綜合材料題- 5年(2020-2024)中考真題+1年模擬真題匯編
- 中醫(yī)藥行業(yè)分析
- 血液中心培訓(xùn)管理制度
- 鐵路檢修工段管理制度
- 項目實施管理制度樣本
- 科技公司崗位職責(zé)
- 推動粵港澳大灣區(qū)綠色金融標(biāo)準(zhǔn)和服務(wù)互認(rèn)共認(rèn)實施方案
- GA∕T 1779-2021 被動式太赫茲成像人體安全檢查設(shè)備通用技術(shù)要求
- 對通信企業(yè)發(fā)展的幾點(diǎn)認(rèn)識和思考
- 路遙《人生》(課堂PPT)
- 仁愛初中英語單詞匯總按字母順序排頁
- 2019外研社高中英語必修二課文翻譯
- 小學(xué)三年級上冊綜合實踐活動.來之不易的糧食----(22張)ppt
- 一年級上冊科學(xué)課件-1.3 觀察葉(3) l 教科版 (共14張PPT)
- 課間操評分辦法及評分表(共4頁)
- (完整版)全程成本控制流程圖
- 除塵工程設(shè)計手冊
評論
0/150
提交評論