6. โครงสร้างข้อมูลแบบแฟ้ม File Representation Manipulation created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
แฟ้มข้อมูล (Data File) เป็นรูปแบบการจัดเก็บข้อมูลอย่างต่อเนื่องไว้บนหน่วยความจำสำรอง โดยรวบรวมข้อมูลที่เกี่ยวข้องหรือสัมพันธ์กันมาไว้ในที่เดียวกัน ภายใต้ชื่อไฟล์ที่กำหนดขึ้น เพื่อสะดวกในการใช้งาน ได้แก่ การอ่าน (Reading) และการเขียน (Writing) ข้อมูลภายในไฟล์ created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
แฟ้มข้อมูล (Data File) ขั้นตอนการกระทำกับไฟล์ข้อมูล แบ่งได้เป็น 3 ขั้นตอนใหญ่ๆ ดังนี้ 1. เปิดไฟล์ข้อมูล (Opening File) 2. อ่าน (Reading) หรือเขียน (Writing) ไฟล์ข้อมูล 3. ปิดไฟล์ข้อมูล (Closing File) created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
แฟ้มข้อมูล (Data File) คำสั่งกระทำกับไฟล์ข้อมูล 1. Open input file filename1 , output file filename2 2. Read var.1, var.2, … from input file 3. Write var.1, var.2, … to output file 3. Close Files created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
ตัวอย่างการใช้งานไฟล์ Algorithm Exfile. 1. Open input file data , output file outfile 2. sum 0 , count 0 3. Loop (not end of file) 3.1 read name , score from input file 3.2 sum sum + score 3.3 count count + 1 4. mean sum / count 5. write count , mean to output file 6. Close Files 7. end created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
ฟังก์ชันภาษาซีที่ใช้ทำงานกับไฟล์ fopen fclose fscanf fprintf fgetc , fgets fputc created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การประกาศตัวแปรไฟล์ข้อมูล รูปแบบ FILE *fp; โดยที่ FILE = ประโยคที่ระบุว่าจะมีการใช้ไฟล์ข้อมูล *fp = ตัวแปร pointer ที่ชี้ยังไฟล์ข้อมูล File pointer created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming การเปิดไฟล์ (fopen) รูปแบบ fp = fopen (filename, open-mode) เมื่อ filename = ชื่อไฟล์ข้อมูลที่ต้องการใช้งาน open-mode = กำหนดลักษณะการกระทำกับไฟล์ข้อมูล หมายเหตุ ถ้าเปิดไฟล์ข้อมูลไม่สำเร็จ ฟังก์ชัน fopen จะส่งค่า NULL กลับมา created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming การเปิดไฟล์ (fopen) โหมดของไฟล์ข้อมูล (open-mode) Text mode Binary mode ความหมาย r หรือ rt rb เปิดไฟล์เพื่ออ่านอย่างเดียว w หรือ wt wb เปิดไฟล์เพื่อเขียนอย่างเดียว a หรือ at ab เปิดไฟล์เพื่อเขียนต่อท้ายข้อมูลเดิม r+ หรือ r+t r+b เปิดไฟล์เพื่ออ่านและเขียน w+ หรือ w+t w+b สร้างไฟล์เพื่ออ่านและเขียน a+ หรือ a+t a+b สร้างไฟล์เพื่อเขียนต่อท้ายข้อมูลเดิม created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming การเปิดไฟล์ (fopen) เช่น FILE *fp, *inf, *outf; fp = fopen (“income.dat”, “r”); inf = fopen(“f:/algor/input.dat”, “r”); outf = fopen (“output.dat”, “w”); created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming การเปิดไฟล์ (fopen) Example FILE *fp; fp = fopen (“test.txt”, “w”); หรือ FILE *fp; if (( fp= fopen (“test.txt”,”w”)) == NULL) { printf (“Error opening file.”); exit (-1); } created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming การปิดไฟล์ (fclose) รูปแบบ fclose (fp); เมื่อ fp = ตัวแปร pointer ที่ชี้ไปยังไฟล์ข้อมูล Example FILE *fp; fp = fopen (“test.txt”,”w”); .... fclose (fp); created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การบันทึกข้อมูลลงไฟล์ (fprintf) รูปแบบ fprintf (fp,“format”,variables); เมื่อ fp = ตัวแปร pointer ที่ชี้ไปยังไฟล์ข้อมูล format = รูปแบบการบันทึกข้อมูล variables = ตัวแปรที่มีค่าข้อมูลที่จะบันทึกลงไฟล์ created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การบันทึกข้อมูลลงไฟล์ (fprintf) ตัวอย่าง fprintf (fp, “%d”, num); fprintf (outf, “%d %s”, num, name); fprintf (ofp,”%s %f”, std.name, std.score); created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การอ่านข้อมูลจากไฟล์ (fscanf) รูปแบบ fscanf (fp,“format”,variables); เมื่อ fp = ตัวแปร pointer ที่ชี้ไปยังไฟล์ข้อมูล format = รูปแบบการอ่านข้อมูล variables = ตัวแปรที่รับค่าข้อมูลที่อ่านขึ้นมาจากไฟล์ created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การอ่านข้อมูลจากไฟล์ (fscanf) เช่น fscanf (fp, “%d”, &num); fscanf (inf, “%d %s”, &num, name); fscanf (ifp,”%s %f”, std.name, &std.score); created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การตรวจสอบจุดสิ้นสุดไฟล์ (feof) เป็นการตรวจสอบการสิ้นสุดของข้อมูลในไฟล์หรือการจบไฟล์ ถ้าสิ้นสุดไฟล์แล้ว จะส่งตัวเลขที่ ‘ไม่ใช่ 0’ กลับมา รูปแบบ feof (fp); เมื่อ fp = ตัวแปร pointer ที่ชี้ไปยังไฟล์ข้อมูล created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การตรวจสอบจุดสิ้นสุดไฟล์ (feof) เช่น fscanf (….); while (!feof (fp)) { …. } created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
ตัวอย่างการใช้งานไฟล์ FILE *ifp , *ofp; int sum = 0; count = 0; ifp = fopen (“data.dat”,”r”); ofp = fopen (“outfile.dat”,”w”); fscanf (ifp,”%s %d”, name, &score); while (! feof (ifp)) { sum += score; count++; fscanf (ifp,”%s %d”,name, &score); } mean = (float) sum / count; fprintf (ofp,”%d %f”,count , mean); fclose (ifp); fclose (ofp); created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การประมวลผลไฟล์ข้อมูลแบบข้อความ ฟังก์ชันสำหรับอ่านข้อมูลจากไฟล์ในรูปแบบข้อความ (String) เข้ามาเก็บที่ตัวแปรอาร์เรย์ หรือจนกว่าจะพบ “\n” หากเกิดข้อผิดพลาด จะส่งค่า null กลับมา รูปแบบ fgets (var,num,fp); เมื่อ var = ตัวแปรอาร์เรย์เก็บข้อความที่อ่านจากไฟล์ num = จำนวนไบต์ข้อมูลที่ต้องการอ่านต่อครั้ง fp = ตัวแปร pointer ที่ชี้ไปยังไฟล์ข้อมูล created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
ฟังก์ชันใช้สำหรับข้อความ (String) เช่น char data [20]; char infor [80]; fgets (data, 20, fp); fgets (infor, 80, stdin); created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
การประมวลผลไฟล์ข้อมูลแบบข้อความ ฟังก์ชันสำหรับบันทึกข้อมูลเป็นข้อความลงในไฟล์ รูปแบบ fputs (var,fp); เมื่อ var = ตัวแปรอาร์เรย์เก็บข้อความที่จะบันทึกลงไฟล์ fp = ตัวแปร pointer ที่ชี้ไปยังไฟล์ข้อมูล หากเกิดข้อผิดพลาด จะส่งค่า null กลับมา created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
ฟังก์ชันใช้สำหรับข้อความ (String) เช่น char data [20]; char infor [80]; fputs (data, fp); fputs (infor, stdout); created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
ฟังก์ชันใช้สำหรับตรวจสอบข้อผิดพลาด ferror() เป็นการตรวจสอบการผิดพลาดที่เกิดขึ้นจากการอ่านข้อมูล ถ้าเกิดการผิดพลาดขึ้น จะส่งค่าตัวเลขที่ไม่ใช่ 0 กลับมา รูปแบบ ferror (fp); เมื่อ fp = ตัวแปร pointer ที่ชี้ไปยังไฟล์ข้อมูล created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming Class Exercise กำหนดอาเรย์ชื่อ table มีค่าดังนี้ A 4 B+ 3.5 B 3 C+ 2.5 C 2 D+ 1.5 D 1 E 0 นศ.คนหนึ่งต้องการโปรแกรมช่วยคำนวณเกรดเฉลี่ยเพื่อวางแผนการเรียน จึงขอให้ท่านเขียนโปรแกรม อ่านข้อมูลรหัสวิชา ชื่อรายวิชา จำนวนหน่วยกิตและเกรดที่ได้ของแต่ละรายวิชา (จำนวนหน่วยกิตอาจเท่ากับ 1,2,3,4 และไม่ทราบจำนวนรายวิชา) จากแฟ้มข้อมูล คำนวณหาค่าเกรดเฉลี่ยโดยใช้อาเรย์ table created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming