โครงสร้างข้อมูลแบบแฟ้ม (File)

Download Report

Transcript โครงสร้างข้อมูลแบบแฟ้ม (File)

6. โครงสร้างข้อมูลแบบแฟ้ ม

File
Representation
Manipulation
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
1/57
แฟ้มข้ อมูล (Data File)
เป็ นรู ปแบบการจัดเก็บข้ อมูลอย่ างต่ อเนื่องไว้
บนหน่ ว ยความจ าส ารอง โดยรวบรวมข้ อ มู ล ที่
เกี่ ย วข้ องหรื อ สั ม พั น ธ์ กั น มาไว้ ใ นที่ เ ดี ย วกั น
ภายใต้ ชื่อไฟล์ ที่กาหนดขึ้น เพื่อสะดวกในการใช้
งาน ได้ แก่ การอ่ าน (Reading) และการเขียน
(Writing) ข้ อมูลภายในไฟล์
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
2/57
แฟ้มข้ อมูล (Data File)
ขั้นตอนการกระทากับไฟล์ ข้อมูล
แบ่ งได้ เป็ น 3 ขั้นตอนใหญ่ ๆ ดังนี้
1. เปิ ดไฟล์ ข้อมูล (Opening File)
2. อ่ าน (Reading) หรือเขียน (Writing) ไฟล์ ข้อมูล
3. ปิ ดไฟล์ ข้อมูล (Closing File)
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
3/57
แฟ้มข้ อมูล (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
4/57
ตัวอย่ างการใช้ งานไฟล์
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
5/57
ฟังก์ ชันภาษาซีทใี่ ช้ ทางานกับไฟล์




fopen
fclose
fscanf
fprintf
fgetc ,
fgets
 fputc

created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
6/57
การประกาศตัวแปรไฟล์ ข้อมูล
รู ปแบบ FILE *fp;
File pointer
โดยที่
FILE = ประโยคทีร่ ะบุว่าจะมีการใช้
ไฟล์ข้อมูล
*fp = ตัวแปร pointer ที่ชี้ยงั ไฟล์ข้อมูล
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
7/57
การเปิ ดไฟล์ (fopen)
รู ปแบบ
fp = fopen (filename, open-mode)
เมือ่ filename = ชื่อไฟล์ ข้อมูลทีต่ ้ องการใช้ งาน
open-mode = กาหนดลักษณะการกระทากับไฟล์ข้อมูล
หมายเหตุ
ถ้ าเปิ ดไฟล์ ข้อมูลไม่ สาเร็จ ฟังก์ ชัน fopen จะส่ งค่ า
NULL กลับมา
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
8/57
การเปิ ดไฟล์ (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
9/57
การเปิ ดไฟล์ (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
10/57
การเปิ ดไฟล์ (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
11/57
การปิ ดไฟล์ (fclose)
รู ปแบบ
เมือ่ fp
fclose (fp);
= ตัวแปร pointer ที่ช้ ีไปยังไฟล์ขอ้ มูล
Example FILE *fp;
fp = fopen (“test.txt”,”w”);
....
fclose (fp);
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
12/57
การบันทึกข้อมูลลงไฟล์ (fprintf)
รู ปแบบ
fprintf (fp,“format”,variables);
เมือ่ fp = ตัวแปร pointer ที่ช้ ีไปยังไฟล์ขอ้ มูล
format = รู ปแบบการบันทึกข้อมูล
variables = ตัวแปรที่มีค่าข้อมูลที่จะบันทึกลงไฟล์
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
13/57
การบันทึกข้ อมูลลงไฟล์ (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
14/57
การอ่ านข้ อมูลจากไฟล์ (fscanf)
รูปแบบ
fscanf (fp,“format”,variables);
เมือ่ fp = ตัวแปร pointer ที่ช้ ีไปยังไฟล์ขอ้ มูล
format = รู ปแบบการอ่านข้อมูล
variables = ตัวแปรที่รับค่าข้อมูลที่อ่านขึ้นมาจากไฟล์
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
15/57
การอ่ านข้ อมูลจากไฟล์ (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
16/57
การตรวจสอบจุดสิ้นสุ ดไฟล์ (feof)
เป็ นการตรวจสอบการสิ้นสุ ดของข้ อมูลในไฟล์ หรือ
การจบไฟล์ ถ้ าสิ้นสุ ดไฟล์ แล้ ว จะส่ งตัวเลขที่ ‘ไม่ใช่ 0’
กลับมา
รูปแบบ
feof (fp);
เมื่อ fp = ตัวแปร pointer ที่ชี้ไปยังไฟล์ ข้อมูล
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
17/57
การตรวจสอบจุดสิ้นสุ ดไฟล์ (feof)
เช่ น
fscanf (….);
while (!feof (fp)) {
….
fscanf (….);
}
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
18/57
ตัวอย่ างการใช้ งานไฟล์
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
19/57
การประมวลผลไฟล์ ข้อมูลแบบข้ อความ
ฟังก์ ชันสาหรับอ่ านข้ อมูลจากไฟล์ ในรู ปแบบข้ อความ (String)
เข้ ามาเก็บทีต่ ัวแปรอาร์ เรย์ หรือจนกว่ าจะพบ “\n”
หากเกิดข้ อผิดพลาด จะส่ งค่ า null กลับมา
รูปแบบ fgets (var,num,fp);
เมื่อ var = ตัวแปรอาร์ เรย์ เก็บข้ อความที่อ่านจากไฟล์
num = จานวนไบต์ ข้อมูลทีต่ ้ องการอ่ านต่ อครั้ง
fp = ตัวแปร pointer ทีช่ ี้ไปยังไฟล์ ข้อมูล
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
20/57
ฟังก์ ชันใช้ สาหรับข้ อความ (String)
เช่ น char data [20];
char infor [80];
fgets (data, 20, fp);
fgets (infor, 80, stdin);
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
21/57
การประมวลผลไฟล์ ข้อมูลแบบข้ อความ
ฟังก์ ชันสาหรับบันทึกข้ อมูลเป็ นข้ อความลงในไฟล์
รูปแบบ fputs (var,fp);
เมือ่ var = ตัวแปรอาร์ เรย์ เก็บข้ อความทีจ่ ะบันทึกลงไฟล์
fp = ตัวแปร pointer ทีช่ ี้ไปยังไฟล์ ข้อมูล
หากเกิดข้ อผิดพลาด จะส่ งค่ า null กลับมา
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
22/57
ฟังก์ ชันใช้ สาหรับข้ อความ (String)
เช่ น char data [20];
char infor [80];
fputs (data, fp);
fputs (infor, stdout);
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
23/57
ฟังก์ ชันใช้ สาหรับตรวจสอบข้ อผิดพลาด
ferror()
เป็ นการตรวจสอบการผิดพลาดที่เกิดขึน้ จากการอ่ าน
ข้ อมูล ถ้ าเกิดการผิดพลาดขึน้ จะส่ งค่ าตัวเลขทีไ่ ม่ ใช่ 0 กลับมา
ferror (fp);
รู ปแบบ
เมื่อ
fp = ตัวแปร pointer ที่ช้ ีไปยังไฟล์ขอ้ มูล
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
24/57
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
25
created by Dararat Saeleee , 344-211 Algorithmic Process & Programming
26/57