第十三章 檔案. 檔案 I/O 的基本觀念 檔案 I/O 的流程 定義指向 FILE 結構的指標 開啟一檔案 呼叫檔案 I/O 庫存函數以進行檔案的處理 關閉檔案 FILE 結構 此結構宣告於 標頭檔中.

Slides:



Advertisements
Similar presentations
FCU, Department of ECE, IC Design Research Lab. TEL: # 4945 Pre-SIm , Post-Sim.
Advertisements

6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
第七章 抽樣與抽樣分配 蒐集統計資料最常見的方式是抽查。這 牽涉到兩個問題: 抽出的樣本是否具有代表性?是否能反應出母體的特徵?
學習C++的基本語法 認識關鍵字與識別字的不同 學習程式碼偵錯的流程 學習如何提高程式的可讀性
: A-Sequence 星級 : ★★☆☆☆ 題組: Online-judge.uva.es PROBLEM SET Volume CIX 題號: Problem D : A-Sequence 解題者:薛祖淵 解題日期: 2006 年 2 月 21 日 題意:一開始先輸入一個.
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
1 第一章 Word 的基本觀念 內容概要: Word 的特色 啟動與離開 Word 的方法 滑鼠游標與外型的介紹 基本操作 Word 視窗法則 使用 Word 遭遇問題時, 應如何利用軟體特 性而獲得輔助解說.
1 Web of Science 利用指引 單元二 瀏覽與處理查詢結果. 2 瀏覽檢索結果 查出的結果,預設以時間排列, 使用者可改變結果的排列方式: 還可以依被引用次數、相關度、 第一作者、刊名、出版年等排序 回到前先查的結果畫面 點選想看資料的完整書目 本館訂購範圍的期刊 全文,便可直接連結.
五小專案 黃詩晴 章乃云. 目錄 計算機 智慧盤 拼圖 記憶大挑戰 數學題庫 心得 參考文獻.
第一章 變數、常數及資料型態. 變數 C 程式語言的變數名稱 第一個字必須是英文字母或底線 (_) 之後可以是數字, 英文字母或底線 (_) 不可以是保留字 例: Num (Ο) _score (Ο) C&C (X) 8num (X)
JAVA 程式設計與資料結構 第二章 JAVA 程式基本概念及操作. 第一個程式 /* * 這是第一個程式 (FirstP.java) */ class FirstP{ public static void main(String args[]){ System.out.println("Whatever.
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
例外處理. 內 容 大 綱 例外的產生 捕捉例外 丟出例外 例外的產生 (1/4) 一般常見的執行時期錯誤包括整數除法分母為 0(divide by zero) ,陣列索引值越限 (array index out of range) ,輸入輸出錯誤 (I/O error) 、檔案 不存在或無法存取.
第 18 章 名稱空間與例外處理 18-1 名稱空間 18-1 名稱空間 18-2 例外處理 18-2 例外處理.
第三章 變數與繫結 陳維魁 博士 儒林圖書公司. 2 大綱  變數的定義  變數元件  儲存區配置問題  參考的透明性  完全計算  捷徑計算  繫結 (binding)  繫結時間  精選習題.
程式註解說明. 2 程式註解格式 塊狀註解 對檔案、 class 、 method 、資料結構、一段程式 …. 等程式區塊 做說明。 第一行的開頭必需為 “/*” 且沒有其他文字,最後一行的開頭 必需以 “*/” 做為結束,在中間每一行的開頭都必需是一個 “*” 。 單行註解 佔據一整行的說明。 以.
Chapter 07 低階程式語言.
JAVA 程式設計與資料結構 第十章 GUI Introdution III. File Chooser  File Chooser 是一個選擇檔案的圖形介面, 無論我們是要存檔還是要開啟檔案,使 用這個物件都會讓我們覺得容易且舒適。
長訊科技 EVRCOM Voice Mail System 使用者操作說明及流程. 自動總機 -- 來電語音轉接服務流程 ( 範例流程 )
第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍 7-4 VB.NET 常用的內建函數 7-4 VB.NET 常用的內建函數 7-5 遞迴函數 7-5.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
顯示訊息 MsgBox 函數 將訊息顯示在對話方塊中,等使用者按下按鈕,並傳回一 Integer 來指示使用者按下的是那一個鈕。 語法
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
第 5 章 深入 Response 物件 製作. 網頁的轉向與強制輸出 - 讓網頁轉彎的 Redirect 敘述 運用 Response 物件的 Redirect 方法,將瀏覽器顯 示的網頁,導向至其他網頁,語法如下: Response.Redirect 網頁路徑與名稱 此網頁路徑與名稱  若是導向到同一台.
:Problem D: Bit-wise Sequence ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10232: Problem D: Bit-wise Sequence 解題者:李濟宇 解題日期: 2006 年 4 月 16.
7 陣列與搜尋 7.1 陣列 一般資料變數 宣告一維陣列 起始一維陣列 7-4
: Happy Number ★ ? 題組: Problem Set Archive with Online Judge 題號: 10591: Happy Number 解題者:陳瀅文 解題日期: 2006 年 6 月 6 日 題意:判斷一個正整數 N 是否為 Happy Number.
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
: Problem A : MiniMice ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11411: Problem A : MiniMice 解題者:李重儀 解題日期: 2008 年 9 月 3 日 題意:簡單的說,題目中每一隻老鼠有一個編號.
第十章 再論結構. 指標與結構的關係 /* File name: ex10-1a.c */ #include int main() { struct student { char *name; int score; }; struct student st= {"Brian", 97}; struct.
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
:Nuts for nuts..Nuts for nuts.. ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 10944:Nuts for nuts.. 解題者:楊家豪 解題日期: 2006 年 2 月 題意: 給定兩個正整數 x,y.
從此處輸入帳號密碼登入到管理頁面. 點選進到檔案管理 點選「上傳檔案」上傳資料 點選瀏覽選擇電腦裡的檔案 可選擇公開或不公開 為平台上的資料夾 此處為檔案分類,可顯示在展示頁面上,若要參加 MY EG 競賽,做品一律上傳到 “ 98 MY EG Contest ” 點選此處確定上傳檔案.
第 13 章 檔案與資料夾處理 13-1 檔案與資料夾操作 13-1 檔案與資料夾操作 13-2 循序檔案的文字檔案讀寫 13-2 循序檔案的文字檔案讀寫 13-3 隨機檔案的處理 13-3 隨機檔案的處理 13-4 二進位檔案的讀寫 13-4 二進位檔案的讀寫 13-5 檔案對話方塊 13-5 檔案對話方塊.
資料結構實習-一 參數傳遞.
第六章 陣列.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
: Beautiful Numbers ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11472: Beautiful Numbers 解題者:邱經達 解題日期: 2011 年 5 月 5 日 題意: 若一個 N 進位的數用到該.
第 9 章 TSR 程式基本教練. 本章提要 TSR 程式 以熱鍵 (Hot key) 叫用 TSR 程式 Clock 中斷 int 08h 、 int 1ch DOS reentrant 的問題 有用的 TSR 程式.
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
JAVA 程式設計與資料結構 第二十章 Searching. Sequential Searching Sequential Searching 是最簡單的一種搜尋法,此演 算法可應用在 Array 或是 Linked List 此等資料結構。 Sequential Searching 的 worst-case.
資料結構實習-二.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
Structural Equation Modeling Chapter 6 CFA 根據每個因素有多重指標,以減少 測量誤差並可建立問卷的構念效度 驗證性因素分析.
Chapter 10 m-way 搜尋樹與B-Tree
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
網路介紹及其運用 講師陳炯勳. 5-2 IP 協定 ( 一 ) IP 協定運作 (1) – 網路成員:主機 (Host) 與路由器 (Router) – 路由表 – 電報傳輸運作.
Probability Distribution 機率分配 汪群超 12/12. 目的:產生具均等分配的數值 (Data) ,並以 『直方圖』的功能計算出數值在不同範圍內出現 的頻率,及繪製數值的分配圖,以反應出該 機率分配的特性。
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
第 6 章 迴圈結構 6-1 計數迴圈 6-1 計數迴圈 6-2 條件迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-4 While/End While 迴圈 6-5 跳出迴圈 6-5 跳出迴圈 6-6 VB.NET 的錯誤處理 6-6 VB.NET.
連續隨機變數 連續變數:時間、分數、重量、……
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
-Artificial Neural Network- Matlab操作介紹 -以類神經網路BPN Model為例
Visual C++重點複習.
資料結構實習-六.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
數字系統與資料表示法 教師: 陳炯勳 數系轉換 r進制數字 稱為 base r或 radix r 有r個計數符號,計數順序逢r歸零(進位) A n A n - 1 ‥‥A 2 A 1 A 0 ﹒A -1 A -2 ‥‥A -m 其中A n 及A.
Microsoft Excel.
第8章 字串與陣列 8-1一維陣列的處理 8-2 字串處理 8-3 多維陣列的處理 8-4 動態陣列與參數傳遞 8-5 陣列排序與搜尋.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
:Problem E.Stone Game ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10165: Problem E.Stone Game 解題者:李濟宇 解題日期: 2006 年 3 月 26 日 題意: Jack 與 Jim.
著作權所有 © 旗標出版股份有限公司 第 14 章 製作信封、標籤. 本章提要 製作單一信封 製作單一郵寄標籤.
幼兒行為觀察與記錄 第八章 事件取樣法.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
第 8 章 記憶體指標. 8.0 變數、數值、位址 8.1 指標與變數 對 C++ 語言而言,指標( pointers )是存放 變數或陣列的位址,因此也可以藉由指標 間接取得變數或陣列中的值。 對 C++ 語言而言,指標( pointers )是存放 變數或陣列的位址,因此也可以藉由指標 間接取得變數或陣列中的值。
Presentation transcript:

第十三章 檔案

檔案 I/O 的基本觀念 檔案 I/O 的流程 定義指向 FILE 結構的指標 開啟一檔案 呼叫檔案 I/O 庫存函數以進行檔案的處理 關閉檔案 FILE 結構 此結構宣告於 標頭檔中

檔案 I/O 的基本觀念 FILE 結構 /* Definition of the control structure for streams */ typedef struct { int level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ int bsize; /* Buffer size */ unsigned char *buffer;/* Data transfer buffer */ unsigned char *curp;/* Current active pointer*/ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ } FILE; /* This is the FILE object */

檔案字元 I/O /* File name: ex13-2a.c */ #include int main() { FILE *fptr; char ch; fptr = fopen( “ c:\\tremp\\test.dat ”, “ w ” ); while((ch = getche()) != ‘ ‘ ) fputc(ch, fptr); fclose(fptr); }

檔案字元 I/O 程式解說 (1) FILE *fptr; /* 流程一 */ 此敘述表示定義一 fptr 為指向 FILE 結構的指標 (2) fptr=fopen( “ c:\\tremp\\test.dat ”, “ w ” ); /* 流程二 */ 此敘述為開啟檔案之功用,其中 fopen 具有二個 參數,第一個參數是檔名;第二個為檔案的存取 模式 (3) fputc(ch, fptr); 此敘述為檔案 I/O 的庫存函數,主要是將 ch 變數 內容放到 fptr 所指的檔案 ( 即為 test.dat) (4) fclose(fptr); 此敘述表示將 fptr 所指的檔案關閉

檔案字元 I/O 檔案的存取模式 ( 文字檔 ) 二進位檔的存取模式 rb 、 wb 、 ab 其它的存取模式 r+ 、 w+ 、 a+ 存取模式作用 r 讀取 w 寫入 a 附加

檔案字元 I/O /* File name: ex13-2b.c */ #include int main() { FILE *fptr; char ch; fptr = fopen("c:\\temp\\test.dat", "r"); while((ch = fgetc(fptr)) != EOF) printf("%c", ch); fclose(fptr); }

檔案字元 I/O 程式解說 此程式是將檔案中的資料讀取出來,並配合標準的 輸出,使其資料示在螢幕上 while( ( ch = fgetc(fptr) ) != EOF ) 此敘述主要是利用一 while 迴圈,將 fptr 所指的字元 指定給 ch ,判斷 ch 是否為 EOF ,若不是,則印此字 元,直到檔案結束為止

檔案字串 I/O 當使用者輸入資料是以字串為單位時,字串的 I/O 是 您最佳的選擇 C 提供的檔案字串 I/O 函數 fputs() 此函數的功能是將字串資料寫入所指的檔案中,如 範例 ex12-3a.c fgets() 此函數的功能是從一指定的檔案中讀取字串,如範 例 ex12-3b.c

檔案字串 I/O /* File name: ex13-3a.c */ #include int main() { FILE *fptr; char str[81]; fptr = fopen("c:\\temp\\str.dat", "w"); while(strlen(gets(str)) > 0) { fputs(str, fptr); fputs("\n", fptr); } fclose(fptr); }

檔案字串 I/O 程式解說 (1) fputs(str, fptr); 此敘述會將 str 陣列的資料寫入 fptr 所指的檔案中 此函數需要二個參數,第一個為字串參數;第二 個為指向 FILE 結構的檔案指標 (2) strlne(gets(str)) > 0 判斷您輸入的字串是否大於 0 ,若不是大於 0 ,表 示您未輸入字串就按「 Enter 」鍵,此時程式便 將檔案關閉,若輸入字串大於 0 ,才執行 fputs 函 數

檔案的字串 I/O /* File name: ex13-3b.c */ #include int main() { FILE *fptr; char str[81]; fptr = fopen("c:\\temp\\str.dat", "r"); while(fgets(str, 80, fptr) != NULL) printf("%s", str); fclose(fptr); }

檔案字串 I/O 程式解說 (1) fgets(str, 80, fptr); 此敘述會從 fptr 所指的檔案中,一次讀取 80 個字 串長度的 str 陣列資料 此函數需要三個參數,第一個為字串參數;第二 個參數表示一次讀取的字串長度;第三個為指向 FILE 結構的檔案指標 (2) strlne(gets(str)) > 0 判斷您輸入的字串是否大於 0 ,若不是大於 0 ,表 示您未輸入字串就按「 Enter 」鍵,此時程式便 將檔案關閉,若輸入字串大於 0 ,才執行 fputs 函 數

檔案的字串 I/O 判斷開啟檔案是否成功? if( ( fptr = fopen("c:\\temp\\str.dat", "w") ) == NULL ) { printf("Can\'t open c:\\temp\\str.dat"); exit(1); } 當呼叫 fopen 失敗時,系統會傳回 NULL 值回來,此 外它會印出一訊息並呼叫 exit 函數終止程式執行 參數若為 0 ,表示正當結束,否則為不正常的結束

檔案的格式化 I/O 主要是用於當輸入的資料是混合性的時候 C 提供的檔案格式化 I/O 函數 fprintf() fscanf() 這兩個函數與 printf() 和 scanf() 很相似,只是這兩個 函數多了一個指向檔案的指標

檔案的格式化 I/O fprintf() 函數 主要是將資料寫入到檔案中 語法如下: fprintf( fptr, "%s %d", id, score ); 此敘述表示將 id 和 score 一併寫入 fptr 所指的檔案中 範例 ex13-4a.c

檔案的格式化 I/O fscanf() 函數 主要是將檔案中的資料讀取出來 語法如下: fscanf( fptr, "%s %d", id, &score ) 此敘述表示從 fptr 所指的檔案中讀取 id 和 score 範例 ex13-4b.c

檔案區段 I/O 主要用於當運作的資料為一區段,如結構、陣列或 結構陣列 … 等等 此類 I/O 可設定區段的大小及一次要拿多少個區段, 這樣會讓讀取更有效率 C 提供的檔案區段 I/O fwrite() fread()

檔案區段 I/O fwrite() 函數 此函數會將某個區段的資料一次寫入到檔案中 語法如下: fwrite( &student, sizeof(student), 1, fptr ) 其中第一個參數為要寫入的資料;第二個參數為區 段的大小;第三個參數為一次要寫入的區段數目; 第四個參數為指向寫入檔案的指標 範例 ex13-5a.c

檔案區段 I/O fread() 函數 此函數會從檔案中讀取一個區段的資料到,並儲存 於程式的變數中 語法如下: fread(&student, sizeof(student), 1, fptr) 其中第一個參數是儲存從檔案中讀取的資料;第二 個參數為讀取的區段大小;第三個參數為一次要讀 取的區段數目;第四個參數為指向被讀取檔案的指 標

隨機存取 讓檔案資料的存取可以依使用者的意思隨心所欲的 尋找 隨機存取函數 fseek() 範例 ex13-6a.c

隨機存取 fseek 函數 語法如下: fseek(fptr, offset, 0) 此函數包含三個參數,第一個參數為指向檔案的指 標;第二個參數為位移的 bytes 數;第三個參數表示 從何處開始搜尋 第三個參數可分為三種 SEEK_SET 或 0 ,表示從檔頭開始搜尋 SEEK_CUR 或 1 ,表示從目前的位置開始搜尋 SEEK_END 或 2 ,表示從檔尾開始搜尋 fseek 函數的失敗傳回值為非零值

文字檔與二進位檔的差異 換行,如範例 ex13-7a.c 檔案結尾,如範例 ex13-7c.c

文字檔與二進位檔的差異 換行 文字檔的換行字元 ‘ \n ’ 是由 CR (carriage return) /LF(line feed) 組成 CR/LF 分別對應到 ASCII 十進位碼 的 13 與 10 ,故儲存時在檔案中會佔 2 bytes ;而讀取 時則將 CR/LF 兩個字元轉為在 ‘ \n ’ 一個字元 二進位檔寫入換行字元 '\n' 僅記錄 LF( 亦即 ASCII 碼 的 10) ,佔 1 byte 的儲存空間

文字檔與二進位檔的差異 檔案結尾 文字檔遇到 Ctrl-Z( 十進位 ASCII 碼 26) 時,會視為檔 案的結束 二進位檔則直接以檔案長度來判定檔案是否結束

檔案指標在何處 檔案指標函數 ftell() 此函數可以回傳目前檔案指標位置 語法如下: curpos = ftell(fptr) 此函數需要一個指向檔案的檔案指標;其中 curpos 為一個檔案指標 此函數失敗之傳回值為 -1L 範例 ex13-8a.c

重置檔案指標 重置檔案指標函數 rewind() 此函數可使檔案指標返回檔案的開頭 語法如下: rewind(fptr); 此敘述會將檔案指標 fptr 移回檔案開頭 範例 ex13-9a.c

偵察檔案指標的運作 偵察檔案指標函數 ferror() 此函數可偵察檔案指標在最近一次寫入或讀取資料 動作時是否正確的執行 語法如下: ferror(fptr); 此敘述會偵察檔案指標所執行的動作是否正確 若有錯誤則可利用 perror 印出錯誤訊息,再呼叫 clearerr 函數重設檔案錯誤旗號為 0 範例 ex13-10a.c