BC322 ครั้งที่ 6 Text file BC322 : computer Programming (Week6)
สิ่งที่จะเรียนในวันนี้ - การอ่านข้อมูลจากไฟล์ - การบันทึกข้อมูลลงไฟล์ BC322 : computer Programming (Week6)
แฟ้มข้อมูล (Data File) การรวบรวมข้อมูลที่สัมพันธ์กัน, เกี่ยวข้องกันมาไว้ที่เดียวกัน เพื่อสะดวกในการเรียกใช้ ค้นหาข้อมูล ข้อมูลในไฟล์ – แบ่งเป็น Record 1 Field Name Age Major Year Level Sara 20 BC 3 Vevee 18 MK 1 Ken 22 IB 4 1 File 1 Record BC322 : computer Programming (Week6)
ขั้นตอนการบันทึกข้อมูลลงไฟล์ เปิดแฟ้มข้อมูล (Open File) บันทึกข้อมูลลงแฟ้มข้อมูล (Write File) ปิดแฟ้มข้อมูล (Close File) BC322 : computer Programming (Week6)
ขั้นตอนการอ่านข้อมูลจากไฟล์ เปิดแฟ้มข้อมูล (Open File) อ่านข้อมูลจากแฟ้มข้อมูล (Read File) ปิดแฟ้มข้อมูล (Close File) BC322 : computer Programming (Week6)
สิ่งที่จะต้องรู้ก่อน ชื่อแฟ้มข้อมูล ชื่ออะไร นามสกุลอะไร จะทำอะไรกับแฟ้มข้อมูล อ่าน หรือ บันทึก BC322 : computer Programming (Week6)
ชนิดของแฟ้มข้อมูล Text file ข้อความที่อ่านรู้เรื่อง Binary file binary data 0,1 BC322 : computer Programming (Week6)
การเปิดแฟ้มข้อมูล (Open File) รูปแบบ FILE *pointer-name; pointer-name = fopen(“filename”, “mode”); Pointer-name ชื่อตัวแปร ที่ชี้ตำแหน่งแรกของข้อมูลในไฟล์ filename ชื่อแฟ้มข้อมูล อยู่ภายใต้เครื่องหมาย “ ” mode เปิดเพื่อวัตถุประสงค์ใด อ่านหรือบันทึก BC322 : computer Programming (Week6)
mode Mode วัตถุประสงค์ r เปิดแฟ้มข้อมูลสำหรับอ่านข้อมูล w สร้างแฟ้มข้อมูลสำหรับบันทึกข้อมูล a เปิดแฟ้มข้อมูลสำหรับบันทึกข้อมูลต่อจากแฟ้มเดิม ถ้าไม่มีแฟ้มนี้ –สร้างแฟ้มใหม่ r+ เปิดแฟ้มข้อมูลสำหรับการอ่านและบันทึกข้อมูล w+ สร้างแฟ้มข้อมูลสำหรับการอ่านและบันทึกข้อมูล ถ้ามีอยู่แล้วจะเขียนทับข้อมูลเดิม a+ เปิดแฟ้มข้อมูลสำหรับอ่านและบันทึกข้อมูลต่อท้ายจากแฟ้มข้อมูลเดิม BC322 : computer Programming (Week6)
ข้อผิดพลาดของการเปิดแฟ้ม เปิดไม่ได้ Write protect Disk full ตัวอย่าง FILE *fp; fp = fopen(“d:/test.dat”, “w”); เปิดแฟ้มข้อมูลชื่อ test.dat เพื่อบันทึก โดยมี fp – เป็นตัวชี้ตำแหน่งข้อมูล หรือใช้ d:\\test.dat ข้อผิดพลาดของการเปิดแฟ้ม เปิดไม่ได้ Write protect Disk full ไม่มีแฟ้มข้อมูล BC322 : computer Programming (Week6)
เทคนิคการตรวจสอบข้อผิดพลาดในการเปิดไฟล์ข้อมูล FILE *fp; fp = fopen(“test.dat”,”r”); if(fp== NULL) { printf(“Cannot open file\n”); exit(0); } โปรแกรมจบการทำงาน คำสั่ง exit(0); จะใช้ได้ ต้องเพิ่ม #include <stdlib.h> ที่ต้นโปรแกรม BC322 : computer Programming (Week6)
การปิดแฟ้มข้อมูล รูปแบบ fclose(Pointer-name); การปิดแฟ้มข้อมูล (Close File) หลังจากสิ้นสุดการใช้งานของแฟ้มข้อมูล ต้องปิดแฟ้มข้อมูล รูปแบบ fclose(Pointer-name); Pointer-name ชื่อตัวแปร ที่ชี้ตำแหน่งของข้อมูลในไฟล์ BC322 : computer Programming (Week6)
การบันทึกข้อมูลลงแฟ้มข้อมูล
คำสั่ง fprintf เหมือน printf แต่จะแสดงผลในไฟล์ แสดงผลข้อมูลได้ทุกอย่าง เช่น เลขจำนวนเต็ม ทศนิยม ตัวอักษร หรือข้อความ ต้องระบุตัวแปรไฟล์ที่ต้องการจะแสดงผลลงในนั้น ใช้คู่กับการเปิดไฟล์แบบ w BC322 : computer Programming (Week6)
การบันทึกข้อมูลลงแฟ้มข้อมูล รูปแบบ fprintf(fp, “format”, arg-list); fp คือ ชื่อ pointer ที่ทำหน้าที่ในการชี้ข้อมูลในแฟ้ม format คือ format code ตามชนิดของข้อมูล arg-list คือ กลุ่มของตัวแปรที่ใช้มีข้อมูลและต้องการบันทึกข้อมูลลงในแฟ้มแฟ้มข้อมูล เช่น fprintf(fp, “%s %d %d”, address, a, b); BC322 : computer Programming (Week6)
printf(“Enter Age%d: “,i); scanf(“%d”,&Age); fprintf(fp, “%d\n”,Age); Ex1 จงเขียนโปรแกรมเพื่อรับอายุของเพื่อนทางหน้าจอ แล้วเก็บอายุของเพื่อน ๆ ในห้อง 20 คน ลงในไฟล์ชื่อ Student.dat for(i = 1;i <= 20;i++) { printf(“Enter Age%d: “,i); scanf(“%d”,&Age); fprintf(fp, “%d\n”,Age); } fclose(fp); #include <stdio.h> #include <stdlib.h> void main() { FILE *fp; int Age,i; fp = fopen(“Stduent.dat”,”w”); if(fp == NULL) { printf(“Cannot open file\n”); exit(0); } BC322 : computer Programming (Week6)
Ex2 จงเขียนโปรแกรมเพื่อเปลี่ยนค่าองศาเซลเซียส (C) เป็นองศาโรเมอร์และองศาฟาเรนไฮต์(F) ตั้งแต่ 1 – 10 องศาเซลเซียส ผลลัพธ์การเปลี่ยนค่าให้เก็บไว้ในแฟ้มข้อมูลชื่อ temp.dat C R F 1 0.00 32.00 2 1.00 3 2.00 4 3.00 5 4.00 41.00 6 5.00 7 6.00 8 7.00 9 8.00 10 9.00 50.00 BC322 : computer Programming (Week6)
Solution BC322 : computer Programming (Week6)
Ex3 : จงเขียนโปรแกรมเพื่อรับ Name,Score ของนักศึกษา 30 คน เพื่อคำนวณเกรด โดยบันทึกข้อมูลทั้งหมดลงไฟล์ Test.txt ดังนี้ Anny 80.00 A Peter 45.50 F Michael 61.50 B ... เงื่อนไขการคิดเกรด ดังนี้ 71 – 100 A 51 – 70 B 0-50 F BC322 : computer Programming (Week6)
ตัวอย่าง Data ที่ถูกเก็บลงในไฟล์ BC322 : computer Programming (Week6)
Solution เฉลย Ex3 BC322 : computer Programming (Week6)
การอ่านข้อมูลจากแฟ้มข้อมูล
คำสั่ง fscanf เหมือนคำสั่ง scanf แต่จะไปอ่านค่ามาจากไฟล์แทน อ่านค่าได้เหมือนปกติ ใช้คู่กับการเปิดไฟล์แบบ r จะอ่านข้อมูลจนกว่าจะหมดไฟล์ BC322 : computer Programming (Week6)
การอ่านข้อมูลจากแฟ้มข้อมูล fscanf(fp, “format”, arg-list); รูปแบบ fp คือ ชื่อ pointer ที่ทำหน้าที่ในการชี้ข้อมูลในแฟ้ม format คือ format code ตามชนิดของข้อมูล arg-list คือ กลุ่มของตัวแปรที่ใช้สำหรับเก็บข้อมูลที่ได้ จากแฟ้มข้อมูล ต้องมีเครื่องหมาย & นำหน้า (ข้อมูลหมดได้ EOF) เช่น fscanf(fp, “%s”, address); fscanf(fp, “%d %d”, &a, &b); BC322 : computer Programming (Week6)
การตรวจสอบข้อมูลในแฟ้มข้อมูล ข้อมูลหมดหรือยัง ? รูปแบบ result = feof(fp); fp คือ ชื่อ pointer ที่ทำหน้าที่ในการชี้ข้อมูลในแฟ้ม ผลลัพธ์ result <> 0 ข้อมูลหมด result = 0 ข้อมูลยังไม่หมด BC322 : computer Programming (Week6)
#include <stdio.h> #include <stdlib.h> void main() { Ex4 จงเขียนโปรแกรมเพื่ออ่านข้อมูลองศาเซลเซียส (C) องศาโรเมอร์และองศาฟาเรนไฮต์(F) จากแฟ้มข้อมูลชื่อ temp.dat แล้วแสดงผลทางจอภาพ while(!feof(fp)) { fscanf(fp,"%d%f%f", &c, &r, &f); printf("%3d%6.2f%8.2f\n", c, r, f); } fclose(fp); #include <stdio.h> #include <stdlib.h> void main() { FILE *fp; float r, f; int c; clrscr(); fp = fopen("temp.dat","r"); if(fp == NULL) printf("Cannot open file\n"); exit(0); } BC322 : computer Programming (Week6)
Ex5 : จงเขียนโปรแกรมอ่านข้อมูลหลาย ๆ ค่าจากไฟล์ #include <stdio.h> void main() { FILE *fi; char st1[10],st2[10],st3[10]; fi=fopen(“C:/data/contents.txt”, “r”); if(fi==NULL) printf(“can not open file”); exit(0); } fscanf(fi,”%s%s%s”,st1,st2,st3); fclose(fi); printf(“%s\n”,st1); printf(“%s\n”,st2); BC322 : computer Programming (Week6)
Ex6 : จงเขียนโปรแกรมเพื่ออ่านข้อมูล 3 ค่าจากไฟล์Number Ex6 : จงเขียนโปรแกรมเพื่ออ่านข้อมูล 3 ค่าจากไฟล์Number.dat แล้วหาค่าผลรวมในแต่ละบรรทัดแล้วแสดงผลทางหน้าจอ Number.dat ผลลัพธ์ทางหน้าจอ 10 20 30 12 13 15 8 10 15 7 13 19 Answer 60 40 33 39 BC322 : computer Programming (Week6)
Solution เฉลย Ex6 BC322 : computer Programming (Week6)
การอ่านข้อมูลจากไฟล์หนึ่ง เพื่อแสดงผลในอีกไฟล์หนึ่ง จะต้องเปิดไฟล์ 2 ไฟล์ ไฟล์แรก เปิดเพื่ออ่านข้อมูลจากไฟล์ (เปิดแบบ r) ไฟล์ที่สอง เปิดเพื่อแสดงผลข้อมูลลงไฟล์ (เปิดแบบ w) เมื่อสิ้นสุดการทำงานจะต้องปิดไฟล์ทั้ง 2 ไฟล์ BC322 : computer Programming (Week6)
จำนวนแผนก Employee.dat 4 Marketing 15 Personnel 20 Finance 6 Ex7 บริษัทแห่งหนึ่งต้องการเขียนโปรแกรมเพื่ออ่านชื่อแผนก และจำนวนพนักงานจากไฟล์ Exployee.dat และเพื่อคิดค่าแรงให้กับพนักงาน โดยพนักงานแต่ละคนจะได้ค่าแรงวันละ 250 บาท แล้วจัดเก็บข้อมูลลงในไฟล์ Wage_emp.dat Wage_emp.dat Employee.dat จำนวนแผนก Department Employee Wage = = = = = = = = = = = = = = = = = = Marketing 15 3750 Personnel 20 5000 Finance 6 1500 Computer 7 1750 4 Marketing 15 Personnel 20 Finance 6 Computer 7 BC322 : computer Programming (Week6)
#include <stdlib.h> void main() { FILE *fin,*fout; Solution #include <stdio.h> #include <stdlib.h> void main() { FILE *fin,*fout; int Num,Max,i,Wage; char Dep[10]; clrscr(); if(fin == NULL) { printf("Cannot open file\n"); exit(0); } เฉลย Ex7 BC322 : computer Programming (Week6)
เฉลย Ex7(ต่อ) BC322 : computer Programming (Week6)
Quiz โรงแรมแห่งหนึ่ง ต้องการเขียนโปรแกรมเพื่ออ่านค่าจากไฟล์ Hotel.dat โดยอ่าน รหัสพนักงาน(ID),จำนวนชั่วโมงทำงาน(Hour) , อัตราค่าแรง(Rate) เพื่อคิดค่าแรงของพนักงาน(Wage) โดยมีเงื่อนไขดังนี้ ถ้าทำงาน ไม่เกิน 10 ชั่วโมง คิดตามอัตราค่าแรงปกติ ถ้า 11-15 ชั่วโมง คิดค่าแรง 8 ชั่วโมงแรกเป็นอัตราปกติ ส่วนที่เกิน คิด 1.5 เท่าของค่าแรงปกติ ถ้า มากกว่า 15 ชั่วโมง คิดค่าแรง 8 ชั่วโมงแรกเป็นอัตราปกติ ส่วนที่เกินคิด 2 เท่าของค่าแรงปกติ ต่อจากนั้นเก็บ ID และ Wage ลงในไฟล์ Salary.dat BC322 : computer Programming (Week6)
ตัวอย่าง input และ output Salary.dat Hotel.dat A123 5 120 A325 12 150 A140 8 200 A123 600 A325 1650 A140 1600 ตัวอย่าง input และ output BC322 : computer Programming (Week6)