1 / 32

File Processing (การประมวลผลแฟ้มข้อมูล)

File Processing (การประมวลผลแฟ้มข้อมูล). เนื้อหาที่จะเรียนรู้. ทำไมจึงต้องมีการติดต่อแฟ้มข้อมูล ลำดับข้อมูล (Data Hierarchy) การเปิดและปิดแฟ้มข้อมูล การอ่านและเขียนแฟ้มข้อมูล ฟังก์ชันที่ใช้เกี่ยวกับการประมวลผลแฟ้มข้อมูล. File Processing by Worawut 2006. ทำไมจึงต้องมีการติดต่อแฟ้มข้อมูล.

minda
Download Presentation

File Processing (การประมวลผลแฟ้มข้อมูล)

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. File Processing(การประมวลผลแฟ้มข้อมูล)

  2. เนื้อหาที่จะเรียนรู้ • ทำไมจึงต้องมีการติดต่อแฟ้มข้อมูล • ลำดับข้อมูล (Data Hierarchy) • การเปิดและปิดแฟ้มข้อมูล • การอ่านและเขียนแฟ้มข้อมูล • ฟังก์ชันที่ใช้เกี่ยวกับการประมวลผลแฟ้มข้อมูล File Processing by Worawut 2006

  3. ทำไมจึงต้องมีการติดต่อแฟ้มข้อมูลทำไมจึงต้องมีการติดต่อแฟ้มข้อมูล • ข้อมูลไม่หายเมื่อโปรแกรมจบการทำงาน • ประมวลผลข้อมูลที่ถูกเก็บในแฟ้มข้อมูล โดยใช้โปรแกรมคอมพิวเตอร์ • เป็นการเก็บข้อมูลแบบถาวร อยู่ในที่เก็บข้อมูลสำรอง (Secondary Storage) • สามารถนำข้อมูลมาใช้ประโยชน์ได้หลักจากโปรแกรมจบการทำงาน File Processing by Worawut 2006

  4. ลำดับของข้อมูล (data hierarchy) ขนาดเล็ก Bit Byte Field Record File ขนาดใหญ่ Database File Processing by Worawut 2006

  5. ลำดับของข้อมูล (ต่อ) CMU 1 2 3 File KU 4 5 6 CU 7 8 9 CMU 1 2 3 Record CMU Field 00100100 Byte 1 Bit File Processing by Worawut 2006

  6. Stream Program File ข้อมูลจะมีการไหลเข้า-ออกผ่าน Stream การติดต่อแฟ้มข้อมูล ในภาษาซี (C Language) Stream เป็นตัวเชื่อมต่อระหว่างแฟ้มข้อมูลกับโปรแกรม File Processing by Worawut 2006

  7. File การติดต่อแฟ้มข้อมูล ในภาษาซี (C Language) Text files ไฟล์ที่เก็บตัวอักษร, string โดยใช้ ASCII Binary files ไฟล์ที่เก็บข้อมูลเฉพาะซึ่งผ่านการเข้ารหัส ที่เฉพาะเจาะจงแตกต่างกัน File Processing by Worawut 2006

  8. Program File การติดต่อแฟ้มข้อมูล ในภาษาซี (C Language) ในการติดต่อกับแฟ้มข้อมูล Stream จะถูกแทนด้วย ตัวแปรชี้แฟ้มข้อมูล(file pointer) ที่ถูกกำหนดเป็นโครงสร้างข้อมูลชนิด FILE *ptr_Data file pointer ตัวแปรชี้แฟ้มข้อมูล มีสัญลักษณ์ * นำหน้าชื่อตัวแปร เช่น *ptr_Data EX. FILE *ptr_Data; File Processing by Worawut 2006

  9. การเปิดและปิดแฟ้มข้อมูลการเปิดและปิดแฟ้มข้อมูล • แฟ้มข้อมูลที่ทำการศึกษานี้ เป็นชนิดแฟ้มข้อความ (text file) • การใช้งานแฟ้มข้อมูลต้องประกาศ Header Program • #include < stdio.h> • ตัวแปรที่เกี่ยวกับแฟ้มข้อมูลใช้โครงสร้างข้อมูลชนิด FILE • จะมีการใช้ตัวชี้แฟ้มข้อมูล (pointer:พอยเตอร์ มี *นำหน้าชื่อตัวแปร) เพื่ออ้างอิงถึงพื้นที่ดิกส์ที่เก็บแฟ้มข้อมูล • FILE *ชื่อตัวแปรชี้แฟ้มข้อมูล; • EX. FILE *ptrData; File Processing by Worawut 2006

  10. การเปิดและปิดแฟ้มข้อมูล (ต่อ) • การเปิดแฟ้มข้อมูล ใช้ฟังก์ชัน fopen(); • ใช้สำหรับเปิดแฟ้มข้อมูลเพื่ออ่านหรือเขียนข้อมูล • syntax: ตัวชี้แฟ้ม = fopen(“ชื่อแฟ้มข้อมูล”,mode); • # เงื่อนไขการคืนค่าของฟังก์ชัน fopen() • if openfile complete • return address • if openfile not complete !! • return NULL • EX. ptrData = fopen(“c:\\student.txt”, “r”); File Processing by Worawut 2006

  11. การเปิดและปิดแฟ้มข้อมูล (ต่อ) เมื่อเปิดแฟ้มได้สมบูรณ์ File Processing by Worawut 2006

  12. การเปิดและปิดแฟ้มข้อมูล (ต่อ) • การปิดแฟ้มข้อมูล ใช้ฟังก์ชัน fclose(); • ใช้สำหรับปิดแฟ้มข้อมูล ไม่มีการใช้งานแฟ้มข้อมูลแล้ว ตัวชี้เลิกการชี้แฟ้มข้อมูล • ส่งข้อมูลที่ค้างใน stream ลงแฟ้มข้อมูล • syntax: fclose(ตัวชี้แฟ้ม); • # เงื่อนไขการคืนค่าของฟังก์ชัน fclose() • if close file complete • return 0 • EX. fclose(ptrData); File Processing by Worawut 2006

  13. การเปิดและปิดแฟ้มข้อมูล (ต่อ) • mode ของการเปิดแฟ้มข้อมูล (**สำหรับแฟ้มชนิดข้อความ ใช้งานบ่อยมาก) File Processing by Worawut 2006

  14. การเปิดและปิดแฟ้มข้อมูล (ต่อ) ประกาศตัวแปรชี้แฟ้มข้อมูลเป็นชนิด FILE EX. #include<stdio.h> void main() { FILE *ptrData; if((ptrData = fopen(“c:\\student.txt”,”r”)) != NULL) { printf(“Open file Complete !!”); fclose(ptrData); } else printf(“Can not Open file”); } เปิดแฟ้ม student.txt เพื่ออ่านข้อมูล mode “r” อ่านอย่างเดียว ปิดแฟ้มข้อมูล ไม่ใช้งานแล้ว File Processing by Worawut 2006

  15. การอ่านและเขียนแฟ้มข้อมูลแบบ Sequential Access • เมื่อสามารถเปิดแฟ้มข้อมูลสำเร็จแล้ว • - สามารถนำข้อมูลในแฟ้มออกมาใช้งานหรือเขียนข้อมูลไปยังแฟ้ม • ฟังก์ชันในการอ่าน/เขียนแฟ้มข้อมูล คล้ายกันกับฟังก์ชันที่เคยเรียนรู้ • scanf( ); // รับค่าจากคีย์บอร์ด (Standard input) • printf( ); // ส่งค่าที่ต้องการแสดงผลออกหน้าจอ (Standard Output) • ฟังก์ชันสำหรับอ่าน/เขียนแฟ้มข้อมูลจะมี f นำหน้าชื่อฟังก์ชัน File Processing by Worawut 2006

  16. เป็นฟังก์ชันสำเร็จรูป (อยู่ใน library ชื่อ stdio.h) เป็นฟังก์ชันสำเร็จรูป (อยู่ใน library ชื่อ stdio.h) การอ่านและเขียนแฟ้มข้อมูล (ต่อ) • ฟังก์ชันที่ใช้ในการอ่านข้อมูลในแฟ้ม • fscanf(); • ฟังก์ชันที่ใช้ในการเขียนข้อมูลไปยังแฟ้ม • fprintf(); File Processing by Worawut 2006

  17. ตัวชี้แฟ้ม การอ่านข้อมูลในแฟ้มแบบ Sequential Access • การอ่านข้อมูลในแฟ้ม โดยใช้ฟังก์ชัน fscanf(); • - คล้ายการทำงานของฟังก์ชัน scanf() • - อ่านข้อมูลจากแฟ้มทีละ 1 ค่าโดยจัดรูปแบบข้อมูลให้อยู่ในชนิดที่ต้องการได้ Syntax: fscanf(ตัวชี้แฟ้ม,“รูปแบบข้อมูล”, &ตัวแปร); เช่น fscanf(ptrData,“%c%d%d”,&ch,&num1,&num2); &ตัวแปร รูปแบบข้อมูล File Processing by Worawut 2006

  18. การอ่านข้อมูลในแฟ้มแบบ Sequential Access • EX. การอ่านข้อมูลในแฟ้ม โดยใช้ฟังก์ชัน fscanf(); #include <stdio.h> void main() { FILE *ptrData; char ch; int num; ptrData=fopen("c:\\code.txt",“r"); if (ptrData != NULL) { while(feof(ptrData) ==0) { fscanf(ptrData,"%c%d",&ch,&num); if (ch=='c') printf("your room is %c%d",ch,num); } } else printf(“Open file Error”); fclose(ptrData); } File Processing by Worawut 2006

  19. %d %c การอ่านข้อมูลในแฟ้มแบบ Sequential Access program code.txt *ptrData E25 C11 F30 ผลลัพธ์ หน้าจอ your room is C11 fscanf(ptrData,"%c%d",&ch,&num); File Processing by Worawut 2006

  20. ข้อมูล ตัวชี้แฟ้ม รูปแบบข้อความและข้อมูล การเขียนข้อมูลลงแฟ้ม การเขียนข้อมูลลงแฟ้มแบบ Sequential Access • การเขียนข้อมูลลงแฟ้ม โดยใช้ฟังก์ชัน fprintf(); • - การทำงานคล้ายฟังก์ชัน printf(); • - เขียนข้อมูลลงแฟ้มโดยจัดรูปแบบของข้อความและข้อมูลให้อยู่ในชนิดที่ต้องการได้ Syntax: fprintf(ตัวชี้แฟ้ม,“รูปแบบข้อความและข้อมูล”, ตัวแปรหรือข้อมูล); เช่น fprintf(ptrData,“N’ MaM is %d years old”,23); File Processing by Worawut 2006

  21. การเขียนข้อมูลลงแฟ้ม การเขียนข้อมูลลงแฟ้มแบบ Sequential Access • EX. การเขียนข้อมูลลงแฟ้ม โดยใช้ฟังก์ชัน fprintf(); #include <stdio.h> void main() { FILE *ptrData; ptrData=fopen("c:\\print_t.txt","w"); if (ptrData != NULL) fprintf(ptrData,"Hello Computer Olympic camp %d",1); else printf(“Open file Error”); fclose(ptrData); } File Processing by Worawut 2006

  22. print_t.txt Hello Computer Olympic Camp 1 การเขียนข้อมูลลงแฟ้ม การเขียนข้อมูลลงแฟ้มแบบ Sequential Access fprintf(ptrData,"Hello Computer Olympic camp %d",1); File Processing by Worawut 2006

  23. การตรวจสอบการอ่าน/เขียน แฟ้มข้อมูล • ที่ผ่านมา ยังไม่ได้ตรวจสอบแฟ้มข้อมูลก่อนการอ่าน/ก่อนการเขียน • อาจทำให้โปรแกรมทำงานผิดพลาดได้ !!! • ฟังก์ชันสำหรับการตรวจสอบก่อนการอ่าน/เขียน แฟ้มข้อมูล ได้แก่ • feof(); • ตรวจสอบจุดสิ้นสุดของแฟ้มข้อมูล • บางทีจะใช้ตัวแปรเฉพาะ EOF (End Of File) นำมา • ตรวจสอบจุด สิ้นสุดของแฟ้มข้อมูล File Processing by Worawut 2006

  24. การตรวจสอบการอ่าน/เขียน แฟ้มข้อมูล • การใช้งานฟังก์ชัน feof() • syntax: retvalue = feof(ตัวชี้แฟ้ม); • retvalue คือ ตัวแปรที่รับค่าที่ส่งกลับมาจากฟังก์ชัน feof ค่าตัวแปรที่ส่งกลับมา มีความหมาย 2 แบบ ดังนี้ 1. ถ้า rtvalue = 0 คือ ตัวชี้ยังไม่ถึงจุดสิ้นสุดของแฟ้ม (not EOF) 2. ถ้า rtvalue > 0 คือ ตัวชี้ถึงจุดสิ้นสุดของแฟ้ม (EOF) ** rtvalue > 0 เป็นตัวเลขอื่นๆ ได้ ต้องระวังในการตรวจสอบ File Processing by Worawut 2006

  25. การตรวจสอบการอ่าน/เขียน แฟ้มข้อมูล • Ex. การใช้งาน ฟังก์ชัน feof(); #include <stdio.h> void main() { FILE *ptrSource; FILE *ptrTarget; char c; if((ptrSource=fopen("Source.dat","r")) != NULL) { if((ptrTarget=fopen("Target.dat","w")) != NULL) { while(!feof(ptrSource)) /* check End Of Source File */ { fscanf(ptrSource,”%c”,&c); if(ferror(ptrSource)!= 0) /* check write data */ { printf("Error Read data from source file\n"); return(); } File Processing by Worawut 2006

  26. fprintf(ptrTarget,”%c”,c); /* write to target file */ if(ferror(ptrTarget)!= 0) /* check write data */ { printf("Error Writing to Target file\n"); return(); } } /* end while */ } /* end if open Target file */ else printf("Can't open Target file"); } /* end if open Source file */ else printf("Can't open Source file"); fclose(ptrSource); fclose(ptrTarget); } /* end main */ File Processing by Worawut 2006

  27. Source.dat Abcdefg1234 Target.dat Abcdefg1234 • การตรวจสอบการอ่าน/เขียน แฟ้มข้อมูล • จากตัวอย่างโปรแกรมที่ให้พิจารณา คือโปรแกรมอะไร ??? คัดลอกแฟ้มข้อมูล fscanf(ptrSource,”%c”,&c); fprintf(ptrTarget,”%c”,c); File Processing by Worawut 2006

  28. เทคนิคเกี่ยวการแก้ปัญหาและปัญหาที่พบบ่อยเทคนิคเกี่ยวการแก้ปัญหาและปัญหาที่พบบ่อย • การเปิดไฟล์จากไดเรกเตอรีและไดรฟ์ที่ต้องการ เช่น ไดร์ฟ A: • ต้องใช้สัญลักษณ์ \\ เพื่อระบุถึง path ที่อยู่ของแฟ้มที่ต้องการ • เช่น ต้องการเปิดแฟ้มที่ A:\data\student.txt • ในโปรแกรม-> fopen(“A:\\data\\student.txt”,“mode”); File Processing by Worawut 2006

  29. สรุป เนื้อหาเรื่อง File • การประมวลผลแฟ้มข้อมูล เป็นลักษณะ Sequential Access • คำสั่งที่ใช้ จะใช้กับแฟ้มข้อมูลชนิด text • เมื่อทำการเปิดแฟ้ม ตัวชี้แฟ้มจะเริ่มต้นที่จุดเริ่มต้นของข้อมูลในแฟ้มเสมอ File Processing by Worawut 2006

  30. การบ้าน • กำหนดให้ ในแฟ้มข้อมูล num.data มีข้อมูลดังภาพ • 1 4 2 8 14 • 15 40 57 32 84 • 91 57 5 7 100 • จงเขียนโปรแกรมเพื่อหาผลรวม ของข้อมูลจากแฟ้ม num.data แล้วแสดงผลออกหน้าจอและบันทึกผลลัพธ์ที่แฟ้ม num_out.data File Processing by Worawut 2006

  31. การบ้าน • จงเขียนโปรแกรมรับข้อมูลชื่อและอายุของนักศึกษาจำนวน 5 คนและบันทึกลงแฟ้มข้อมูลชื่อ friends.data ดังภาพ • Somchai 15 • Devil 14 • Satan 20 • Rungtip 16 • จากนั้น จงเขียนโปรแกรมอ่านข้อมูลจากแฟ้มข้อมูลข้างต้น และแสดงผลทางจอภาพ File Processing by Worawut 2006

  32. การบ้าน • จากแฟ้มข้อมูล friends.data เก็บข้อมูลชื่อและอายุ ดังภาพ • Somchai 15 • Devil 14 • Satan 20 • Rungtip 16 • จงเขียนโปรแกรมค้นหาชื่อของเพื่อนที่ต้องการ ถ้าพบข้อมูลตรงกับที่ต้องการค้นหาให้แสดงชื่อและอายุของเพื่อนทางจอภาพ (ใช้ strcmp() ในการเปรียบเทียบ string) File Processing by Worawut 2006

More Related