1 / 13

第十三章 檔案處理

第十三章 檔案處理. 13-1 檔案的開啓與關閉 13-2 字元 I/O 13-3 字串 I/O 13-4 格式化 I/O. 第十三章 檔案處理.

nara
Download Presentation

第十三章 檔案處理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十三章 檔案處理 • 13-1 檔案的開啓與關閉 • 13-2 字元I/O • 13-3 字串I/O • 13-4 格式化I/O

  2. 第十三章 檔案處理 將資料存入磁碟或由磁碟取出資料的方式,稱為檔案處理。且所有的程式語言,都提供了資料輸出入的處理功能,諸如檔案的開啟、寫入及關閉等等。這一章將介紹如何針對不同形式的資料,使用C語言程式實作資料輸出入於磁碟的動作。Turbo C的檔案處理分為三種模式,分別是字元I/O,字串I/O及格式化I/O。使用者應依照資料的格式,選擇適當的模式。其次,不論使用那一種模式,均應執行檔案的開啓與關閉。所以,本章分為四節介紹Turbo C的檔案處理,分別是檔案的開啓與關閉、字元I/O、字串I/O及格式化I/O。

  3. 13-1 檔案的開啓與關閉 不論使用何種語言,當我們欲執行檔案的存取時,一定要先行開啓檔案,等到所有資料都處理完後,還要將檔案關閉,C語言亦是如此。以下程式是使用字元模式,將鍵盤所輸入的字元,存入”test1.txt”中。 #include <stdio.h> main( ) { FILE *fptr; char c; fptr = fopen (“textfile.txt”, “w”); while((c=getche( )) != ‘r’) putc(c, fptr); fclose(fptr); }

  4. stdio.h 所有的檔案處理的函式,都包含在stdio.h中,所以檔案處理前均應使用 以下敘述,匯入stdio.h。 #include “stdio.h” FILE型別 C語言的檔案存取,皆使用FILE的型別。當發出開啓檔案之要求,且此要求被認 可,則系統將傳回一個指向檔案的FILE型別。以下敘述,即宣告一個指標變數 fptr,FILE *fptr;往後,即可使用指標fptr存取檔案資料。 fopen 當您欲從磁碟存取資料時,首先必須以fopen開啓指定的檔案,其函式原型如 下: FILE *fopen (const char *filename, const char *mode);

  5. fclose 將緩衝區的資料寫入磁碟,關閉檔案,其語法如下: int fclose (file *stream); 當寫入成功時,傳回0。 開檔的問題 如果以fopen函式所指定的檔案不能開啓,則程式將不能執行。為什麼一 個檔案不能被開啓呢?例如,於輸入檔中,磁碟空間不足,或開啓讀取 檔時,此檔案根本未存在。為了避免以上錯誤,因此在開啓檔案時,應 先檢查檔案的開啓是否順利,所以,開檔的敘述應修正如下: FILE *fptr; if( (fptr = fopen(“test1.txt”, “r”))==NULL) { printf(“can not open the file”); exit(); }

  6. 13-2 字元I/O putc putc與前面的putch或putchar相近,只是寫入的位置不同, 前者是將字元寫入檔案,後兩者是寫入螢幕。例如,以下敘 述可將ch所指定的字元,寫入所開啓的檔案。 putc(ch, fptr); 其次,若要連續將鍵盤所輸入的字元,寫入指定的檔案,直 到按Return鍵為止,則其程式如下, while((ch=getche()) != ‘\r’) putc(ch, fptr);

  7. getc getc剛好與putc相反,getc可從指定的檔案傳回一個字元。例如,以下敘 述可從檔案中傳回一個字元。 ch = getc(ptr); 以下敘述則可將指定的檔案,全部列印在螢幕。 while((ch=getc(fptr)) != EOF) printf(“%c”, ch); 範例13-2a 請寫一個程式,可以將鍵盤輸入的字元,儲存在test1.txt。 範例13-2b 請寫一個程式,可以將test1.txt顯示在螢幕。 範例13-2c請寫一個程式,可以計算test1.txt的字元數目。

  8. 13-3 字串I/O fputs fputs可以將指定的字串寫入檔案。例如,以下敘述可將“abc”字串寫入指 定的檔案test3.txt。 FILE *fptr; char s[]=”abc”; fptr = fopen(“test3.txt”, “w”); fputs(s, fptr);

  9. fgets fgets可以從指定的檔案中,讀取一列字串。例如,以下敘述可從test3.txt 中讀取一列字串,並輸出於螢幕。 FILE *fptr; char s[101]; fptr = fopen(“test3.txt”, “r”); fgets(s, 100, fptr); 上式的fget共需要3個參數,第一個s是傳回的字串,第2個100是字串的 最大長度,本例因宣告s的長度為101,所以應限制為100,以免超過陣 列的大小。

  10. 範例13-3a 請寫一個程式,可將使用者所輸入的字串寫入檔案 test3.txt。其次,每寫入一列,應自動補上一個新行的字串 (“\n”)。 範例13-3b 請寫一個程式,可讀取上例的test3.txt,並顯示在螢幕。

  11. 13-4 格式化I/O 到目前為止,我們只能處理字元或字串等型別的資料,那數值型別的資 料呢?例如,在一個學生基本資料中,即含有姓名、身高及成績等欄 位,此時即可使用本單元的格式化I/O。格式化I/O所使用的函式分別是 fprintf與fscanf,且其用法與第四章的printf與scanf相同,只是寫入的地 點不同而已。以下分別介紹此二函式。 fprintf 當您欲寫入資料至檔案時,只要重覆使用fprintf即可寫入資料,其函式原 型如下圖。 int fprintf (FILE *stream, const char *format [ , argument,...]);

  12. 例如,以下敘述可寫入字串,其中outf是開檔時所傳回的檔案指標。 fprintf (outf, “%s”, “ABC”); 以下敘述可寫入整數。 fprintf (outf, “%d”, 25); 以下敘述,可同時寫入一個字串,一個整數及一個浮點數。 fprintf (outf, “%s %d %f”, “示範”, 90, 25.5); fscanf fscanf當您欲從檔案讀取資料時,只要重覆使用fscanf即可讀取資料,其 函式原型如下,使用方式同fprintf。 int fscanf (FILE *stream, const char *format [ , address,...]);

  13. 範例13-4a 假設有學生資料如下: 請寫一個程式,可以由使用者輸入以上資料,直到姓名長度為0時,將以 上資料存入test4.txt。 範例13-4b 同上範例,但可讀取test4.txt,並將其內容顯示在螢幕。

More Related