งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Chapter 10 Data Files.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Chapter 10 Data Files."— ใบสำเนางานนำเสนอ:

1 Chapter 10 Data Files

2 ประเภทของแฟ้มข้อมูล Types of data files
Stream-oriented (standard) data files ใช้งานง่าย เป็นที่นิยม Text files ประกอบด้วยอักขระเรียงต่อกัน สามารถแยกเป็นข้อมูลแต่ละค่าได้ เช่น อาจจะเป็น ตัวเลข หรือข้อความ Unformatted data files แบ่งข้อมูลเป็นบล็อก แต่ละบล็อกประกอบด้วยโครงสร้างข้อมูลที่ซับซ้อน เป็นไบต์ข้อมูลที่เรียงต่อกันได้แก่ แถวลำดับ โครงสร้าง System-oriented (low-level) data files มีความเกี่ยวข้องกับระบบปฏิบัติการมากกว่า Stream-oriented มีความซับซ้อนมากกว่า

3 Stream-oriented (standard) data files Text files
เป็น text stream ประกอบด้วยอักขระเรียงต่อกันหลายๆบรรทัด แต่ละบรรทัดยาวไม่เกิน 255 อักขระ อาจประกอบด้วยข้อมูลที่เป็น สายอักขระ หรือตัวเลข จบด้วย end-of-line (แต่ละบรรทัดไม่ใช่ string เพราะไม่ได้จบด้วย \0) เมื่อ stream อยู่ใน text-mode จะมีการแปลเกิดขึ้นระหว่าง อักขระ newline (\n) และอักขระที่ระบบปฏิบัติการใช้ทำเป็นเครื่องหมาย end-of-line ในแฟ้มข้อมูล ซึ่งใน PC ใช้เป็น cariage-return + linefeed (CR-LF) คือ อักขระขึ้นต้นบรรทัด + เลื่อนไปบรรทัดใหม่ เมื่อบันทึกข้อมูล จะมีการแปล \n ไปเป็น CR-LF เมื่ออ่านข้อมูลจากแฟ้ม CR-LF จะถูกแปลเป็น \n

4 Stream-oriented (standard) data files Unforamatted data files
จัดข้อมูลเป็นบล็อก แต่ละบล็อกประกอบด้วยอักขระที่เรียงต่อกัน บล็อกเหล่านี้ใช้เก็บโครงสร้างข้อมูลที่ซับซ้อน อาทิ แถวลำดับ และ โครงสร้าง ใช้ไลบรารีฟังก์ชันเพื่อประมวลผลข้อมูลประเภทนี้ ไลบรารีฟังก์ชันมีคำสั่งที่สามารถถ่ายโอนแถวลำดับหรือโครงสร้างทั้งหมดจากหรือไปสู่แฟ้มข้อมูล

5 Opening a file for use การเปิดแฟ้ม ทำเพื่อให้สามารถอ่านหรือบันทึกข้อมูลในแฟ้ม อ่านข้อมูลจากแฟ้มเข้าสู่โปรแกรม นำข้อมูลจากโปรแกรมบันทึกลงในแฟ้ม เมื่อใช้งานเสร็จ ต้องปิดแฟ้ม

6 Buffer area การเปิดแฟ้ม
เมื่อทำงานกับ stream-oriented data files จะต้องมี buffer area เพื่อใช้เก็บข้อมูลที่ถ่ายโอนไปมาระหว่าง ความจำและแฟ้ม ซึ่ง buffer area จะช่วยให้การถ่ายโอนเร็วขึ้น buffer area

7 Buffer area การเปิดแฟ้ม
FILE *f f FILE เป็นประเภทโครงสร้างพิเศษ ที่ใช้ในการสร้าง buffer area มีรายละเอียดกำหนดไว้ในแฟ้มระบบ stdio.h f เป็นตัวแปรตัวชี้ ที่ชี้จุดเริ่มต้นของ buffer area บางครั้งเรียกว่า stream pointer หรือ stream

8 Opening a data file การเปิดแฟ้ม
ต้องเปิดแฟ้มข้อมูลก่อนที่จะสร้างหรือประมวลผลแฟ้ม เพื่อกำหนดว่า จะตั้งชื่อและใช้งานแฟ้มข้อมูลอย่างไร เช่น read-only file write-only file read/write file

9 Library function fopen
filename 1200 1200 f FILE *f f = fopen(filename, filetype) f เป็นตัวแปรตัวชี้ ที่ชี้จุดเริ่มต้นของ buffer area filename เป็นชื่อของแฟ้มข้อมูล ตั้งตามกฎของระบบปฏิบัติการ filetype เป็นค่าใดค่าหนึ่ง ดังนี้ Buffer area “r”, “w”, “a”, “r+”, “w+”, “a+”

10 File Type “r” เปิดแฟ้มที่มีอยู่แล้ว เพื่ออ่านเท่านั้น
“w” เปิดแฟ้มใหม่เพื่อบันทึกเท่านั้น “a” เปิดแฟ้มที่มีอยู่แล้ว เพื่อบันทึกต่อท้าย “r+” เปิดแฟ้มที่มีอยู่แล้ว เพื่ออ่านและบันทึก “w+” เปิดแฟ้มใหม่เพื่ออ่านและบันทึก “a+” เปิดแฟ้มที่มีอยู่แล้ว เพื่อบันทึกต่อท้ายและอ่าน

11 fopen () เมื่อมีการเรียกใช้ fopen function จะมีการส่งคืนค่าต่อไปนี้
ตัวชี้หรือที่อยู่ของจุดเริ่มต้นของ buffer area ของแฟ้ม NULL ถ้าไม่สามารถเปิดแฟ้มได้ หรือหาแฟ้มไม่พบ

12 fclose () ปิดแฟ้มได้ 2 วิธี
โดยเรียกใช้ fclose(f) เพื่อสั่งให้ปิดแฟ้มที่มีตัวชี้คือ f fcloseall() สั่งให้ปิดทุกแฟ้ม เมื่อโปรแกรมสิ้นสุดการทำงาน จะปิดแฟ้มข้อมูลโดยอัตโนมัติ ถ้าไม่พบ fclose ก่อนปิดแฟ้ม จะคัดลอกข้อมูลจาก buffer บันทึกลงในแฟ้ม

13 fflush () คัดลอกข้อมูลจาก buffer บันทึกลงในแฟ้ม
fflush(f) เพื่อสั่งให้บันทึกที่แฟ้มที่มีตัวชี้คือ f flushall() สั่งให้บันทึกลงทุกแฟ้ม

14 #include <stdio.h> FILE *f; f = fopen(“data.dat”, “w”); …
fclose(f); 2000 f 2000 Buffer area f เป็นตัวแปรที่เก็บที่อยู่ของจุดเริ่มต้นของ buffer area ของแฟ้ม เปิดแฟ้มใหม่ชื่อ data.dat เพื่อบันทึกข้อมูล แล้วส่งที่อยู่ของจุดเริ่มต้นของ buffer area ของแฟ้มไปไว้ใน f

15 #include <stdio.h> #define NULL 0 main () { FILE *f;
f = fopen(“data.dat”, “r+”); if (f == NULL) printf (“\nERROR – cannot open file\n”); else { fclose (f); } data.dat 2000 2000 f Buffer area เปิดแฟ้มที่มีอยู่แล้วชื่อ data.dat เพื่ออ่านและบันทึกข้อมูล ถ้าไม่พบแฟ้มนี้ จะแสดงข้อความเพื่อแจ้งความผิดพลาด

16 ตัวอย่าง #include <stdio.h> #define NULL 0 main () { FILE *f;
if (f = fopen(“data.dat”, “r+”)) == NULL) printf (“\nERROR – cannot open file\n”); else { fclose (f); } เปิดแฟ้มที่มีอยู่แล้วชื่อ data.dat เพื่ออ่านและบันทึกข้อมูล ถ้าไม่พบแฟ้มนี้ จะแสดงข้อความเพื่อแจ้งความผิดพลาด

17 การบันทึกและอ่านแฟ้มข้อมูล
มี 3 วิธี formatted output ใช้ได้เฉพาะกับ text-mode stream เพื่อบันทึก formatted data ลงในแฟ้ม เพื่อให้โปรแกรมอื่น อาทิ spreadsheet, database สามารถอ่านได้ ใช้ character output เพื่อบันทึก อักขระเดียว หรือ บรรทัดของอักขระ ลงในแฟ้ม ใช้ direct output เพื่อบันทึกข้อมูลจากความจำลงสู่แฟ้มโดยตรง วิธีนี้ใช้กับแฟ้มไบนารีเท่านั้น

18 Formatted file output ใช้ fprintf() ในการบันทึกลงในแฟ้ม
fprintf() เหมือน printf() ต่างกันเพียง fprintf() ส่ง output ไปที่ stream ที่กำหนดไว้ใน argument list ของ fprintf() ถ้ากำหนดให้ stream argument เป็น stdout แล้ว fprintf() และ printf() จะทำงานเหมือนกัน ตัวอย่าง FILE *f fprint(f, “\n%d %f”, count, data[count]) fprint(stdout, “\n%d %f”, count, data[count])

19

20

21 Formatted file input ใช้ fscanf() ในการอ่านข้อมูลจากแฟ้ม
fscanf() เหมือน scanf() ต่างกันเพียง fscanf() ส่ง input ไปที่ stream ที่กำหนดไว้ใน argument list ของ fscanf() ถ้ากำหนดให้ stream argument เป็น stdin จะมีผลทำให้fscanf() และ scanf() ทำงานเหมือนกัน

22

23 character input character input function มี 3 function getc ()
fgetc () fgets ()

24 getc () & fgetc () getc () f เป็นตัวชี้ เก็บที่อยู่ของแฟ้มที่ถูกเปิด
int getc(FILE *f) อ่านอักขระจาก stream ที่กำหนด f เป็นตัวชี้ เก็บที่อยู่ของแฟ้มที่ถูกเปิด (fopen() คืนค่าที่อยู่ของแฟ้มที่เปิด) fgetc () เหมือน getc() สามารถใช้แทนกันได้

25 character output character output function putc ()
int putc (int c, FILE *f); บันทึกอักขระเดียว(lower-order byte)ลงใน stream fputs () char fputs (char *s, FILE *f); string ที่ถูกชี้โดย s ถูกบันทึกลงในแฟ้มที่ถูกชี้โดย f บันทึกอักขระ 1 บรรทัดลงใน stream

26 การสร้างแฟ้มข้อมูล Creating a Data File

27 fgets () char *fgets(char *s, int n, FILE *f) s
3000 3000 char *fgets(char *s, int n, FILE *f) s เก็บที่อยู่ของ input (buffer ที่ป้อนข้อมูล) n หมายถึง จำนวนสูงสุดของอักขระที่จะป้อนเข้า f เก็บที่อยู่ของแฟ้มที่ถูกเปิด อ่านอักขระทีละบรรทัดจากแฟ้มที่ f ชี้ แล้วนำไปเก็บในความจำเริ่มจากตำแหน่งที่ถูกชี้โดย S อักขระถูกอ่านจนกระทั่งพบอักขระ new line (หรืออ่านไปได้ n-1 อักขระ) f 6000 6000

28

29 Direct file input Unformatted Data Files
อ่านข้อมูลจากแฟ้ม(ดิสก์) ไปเก็บในความจำ

30 Unformatted Data Files
ใช้ในการเก็บข้อมูลที่มีลักษณะเป็นบล็อก แต่ละบล็อกมีขนาดแน่นอน ใช้แทนโครงสร้างที่ซับซ้อน อาทิ แถวลำดับ หรือ โครงสร้าง โดยที่แฟ้มข้อมูลอาจประกอบด้วย หลายโครงสร้างที่มีส่วนประกอบเหมือนกัน หรือ อาจประกอบด้วยหลายแถวลำดับที่เป็นประเภทและมีขนาดเดียวกัน บางครั้งอาจไม่ต้องการอ่านหรือบันทึกข้อมูลที่อยู่ภายในบล็อก ทีละค่า แต่ต้องการอ่านข้อมูลทั้งบล็อกจากแฟ้มข้อมูลและบันทึกทั้งบล็อกลงในแฟ้ม ใช้ fread, fwrite

31 fwrite รูปแบบ fwrite (ตัวแปร, sizeof(ข้อมูล), จำนวนข้อมูลที่จะบันทึก, f)

32

33

34

35 fread รูปแบบ fread (ตัวแปร, sizeof(ข้อมูล), จำนวนข้อมูลที่จะอ่าน, f) s
3000 3000 f 6000 6000

36

37 การสร้างแฟ้มข้อมูล Creating a data file
ต้องสร้างแฟ้ม ก่อนที่จะนำไปประมวลผล การสร้างแฟ้ม Stream-oriented ชนิด text file ทำได้ 2 วิธี ใช้โปรแกรมประมวลผลคำ (word processor) สร้างโดยตรง เขียนโปรแกรมเพื่อป้อนข้อมูลเข้าไป แล้วให้บันทึกลงแฟ้ม การสร้างแฟ้ม Stream-oriented ชนิด Unformatted data files ทำได้วิธีเดียวโดยการเขียนโปรแกรม การเขียนโปรแกรมรับข้อมูลจากแป้นพิมพ์แล้วบันทึกข้อมูลลงในแฟ้ม ถ้าข้อมูลแยกกันเป็นแต่ละค่า ใช้ getchar เพื่อป้อนข้อมูล putc เพื่อบันทึกข้อมูลลงแฟ้ม

38

39 การอ่านแฟ้มข้อมูล Reading a Data File

40 gets ใช้อ่าน string จากอุปกรณ์มาตรฐาน
puts ใช้บันทึก string ลงในอุปกรณ์มาตรฐาน fgetc ใช้อ่าน character จากแฟ้มข้อมูล fputc ใช้บันทึก character ลงแฟ้มข้อมูล fgets ใช้อ่าน string จากแฟ้มข้อมูล fputs ใช้บันทึก string ลงในแฟ้มข้อมูล fscanf ใช้อ่าน formatted data จากแฟ้มข้อมูล fprintf ใช้บันทึก formatted data ลงในแฟ้มข้อมูล fread ใช้อ่าน unformatted data จากแฟ้มข้อมูล fwrite ใช้บันทึก unformatted data ลงในแฟ้มข้อมูล

41

42

43

44 Sequential file ftell() หาตำแหน่งปัจจุบันของตัวชี้
rewind() ตำแหน่งปัจจุบันของตัวชี้ ไปอยู่ที่จุดเริ่มต้นของแฟ้ม (ไบต์ )

45 fseek() รูปแบบ fseek (*f, ระยะทางที่เคลื่อนที่ offset, ระยะทางเคลื่อนที่สัมพัทธ์) SEEK_SET ต้นแฟ้ม SEEK_CUR ตำแหน่งปัจจุบัน SEEK_END ท้ายแฟ้ม

46

47

48


ดาวน์โหลด ppt Chapter 10 Data Files.

งานนำเสนอที่คล้ายกัน


Ads by Google