540 likes | 724 Views
แฟ้มข้อมูล (File). Structure Programming. เนื้อหา. ความหมายของแฟ้มข้อมูล ประเภทของแฟ้มข้อมูล การเข้าถึงข้อมูลในแฟ้มข้อมูล การประมวลผลแฟ้มข้อมูล แฟ้มข้อมูลและฟังก์ชัน. 2. Structure Programming. ระบบคอมพิวเตอร์. Permanent Storage. 3. Structure Programming.
E N D
แฟ้มข้อมูล (File) Structure Programming
เนื้อหา • ความหมายของแฟ้มข้อมูล • ประเภทของแฟ้มข้อมูล • การเข้าถึงข้อมูลในแฟ้มข้อมูล • การประมวลผลแฟ้มข้อมูล • แฟ้มข้อมูลและฟังก์ชัน 2 Structure Programming
ระบบคอมพิวเตอร์ Permanent Storage 3 Structure Programming
แฟ้มข้อมูล (File) • คือแหลงที่เก็บขอมูลเปนไบตและมีชื่อเฉพาะ สํ าหรับแฟมแตละแฟม • อาจเปนขอมูลที่ยังไมไดประมวลผล เชน ขอมูล รายชื่อพนักงาน • หรืออาจเปนขอมูลที่เปนผลลัพธจากการประมวลผล เชน รายชื่อพนักงานที่เรียงตามลําดับตัวอักษรแล้ว 4 Structure Programming
แฟ้มข้อมูล (File) • แฟ้มข้อมูลจะเก็บไวในอุปกรณบันทึกขอมูล • เชน จานบันทึก จานบันทึกแบบแข็ง แถบบันทึก (Tape) ซีดีรอม (CD-ROM) เปนตน 5 Structure Programming
ประเภทของแฟ้มข้อมูล • แบงโดยใช้เกณฑ์ 2 แบบคือ • แบงตามลักษณะการใชงาน • แบงตามลักษณะการเก็บขอมูลในแฟม 6 Structure Programming
ประเภทของแฟ้มข้อมูล • แบงตามลักษณะการใช้งาน • แฟมขอมูลมาตรฐาน (Standard Files of Stream Files) • เปนแฟมขอมูลที่มีวิธีการใชงานที่จัดเตรียมไวใหใชไดอยางสะดวก มีคําสั่งเฉพาะงานใหเลือกใชไดตามความเหมาะสม 7 Structure Programming
ประเภทของแฟ้มข้อมูล • แบงตามลักษณะการใช้งาน 2. แฟมขอมูลระบบ (System Files) • เปนแฟมข้อมูลที่ผูเขียนโปรแกรมจะตองกํ าหนด สิ่งตางๆ ที่เปนองคประกอบดวยตนเอง ไมมีโปรแกรมอื่นใด มาชวยเหลือเหมือนแฟมมาตรฐาน 8 Structure Programming
ประเภทของแฟ้มข้อมูล • แบงตามลักษณะการเก็บขอมูลในแฟม • แฟมขอมูลเชิงขอความ (Text Files) • เปนการจัดเก็บแฟมขอมูลในลักษณะขอความ (Text) ซึ่งจะตองแปลงขอความไปตามรหัสแอสกี (ASCII CODE) • มีความยาวบรรทัดละ 256 ตัวอักษร ทายบรรทัดจะมีรหัส \n (new line) หมายถึงการขึ้นบรรทัดใหม 9 Structure Programming
ประเภทของแฟ้มข้อมูล • แบงตามลักษณะการเก็บขอมูลในแฟม 2.แฟมขอมูลเชิงฐานสอง (Binary Files) • เปนการจัดเก็บแฟมขอมูลในระบบเลขฐานสอง หรือ Binary Code • ไมตองแปลงเหมือนกับ Text file เพราะขอมูลในระบบคอมพิวเตอรถูกจัดเก็บในระบบเลขฐานสองอยูแลว 10 Structure Programming
การเข้าถึงข้อมูลในแฟ้มข้อมูลการเข้าถึงข้อมูลในแฟ้มข้อมูล • มีวิธีเขาถึงได 2 วิธีคือ 1. การเขาถึงแบบตามลําดับ (Sequential Access) • การเขาถึงขอมูลแบบนี้จะตองผานขอมูลที่อยูในเรคอรดกอนหนาตามลําดับเพื่อไปยังเรคอรดที่ตองการ • วิธีการเขาถึงลักษณะนี้ใชไดกับแฟมขอมูลที่บันทึกอยูบนสื่อบันทึกขอมูล เชน เทปแมเหล็ก (Magnetic Tape) จานแมเหล็ก (Magnetic Disk) 11 Structure Programming
การเข้าถึงข้อมูลในแฟ้มข้อมูลการเข้าถึงข้อมูลในแฟ้มข้อมูล • มีวิธีเขาถึงได 2 วิธีคือ 2. การเขาถึงแบบโดยตรง (direct access) • การเขาถึงขอมูลแบบนี้จะไปยังเรคอรดที่ตองการไดโดยตรง ไมตองผานเรคอรดกอนหนา • วิธีการเขาถึงลักษณะนี้ใชไดกับแฟมขอมูลที่บันทึกอยูบนสื่อบันทึกขอมูล เชน จานแมเหล็ก (Magnetic Disk) แตใชไมไดกับแฟมขอมูลที่บันทึกอยูบนเทปแมเหล็ก (Magnetic Tape) 12 Structure Programming
การประมวลผลแฟมขอมูลการประมวลผลแฟมขอมูล • การประมวลผลแฟมขอมูลแบงออกเปน 3 ขั้นตอน คือ 1. การเปิดแฟ้มข้อมูล 2. ทำงานกับแฟ้มข้อมูล • การบันทึกขอมูล (Write) ลงในแฟมขอมูล • การอานขอมูล (Read) จากแฟมขอมูล 3. การปิดแฟ้มข้อมูล 13 Structure Programming
(Begin of File) (File Pointer) (End of File) (Buffer) (Data File) 14 Structure Programming
คำอธิบาย • เมื่อเปดแฟมขอมูล ตัวชี้ตําแหนง (fp=file pointer) จะชี้อยูที่ตํ าแหนงแรกของแฟมขอมูล • ถามีการประมวลผลและตองใชขอมูลตัวถัดไป ตัวชี้ตํ าแหนงจะเลื่อนไปยังขอมูลที่รอรับการประมวลผลถัดไปเรื่อยๆ จนถึงตําแหนง EOF (End of File) ซึ่งเปนขอมูลตัวสุดทายของแฟมขอมูล • การติดตอระหวางซีพียูกับแฟมขอมูลในจานบันทึก ไมใชการติด ตอกันโดยตรง แตจะมีการจัดเตรียมหนวยความจํ าหลักไวจํานวนหนึ่งเปนที่พักขอมูลเรียกวา บัฟเฟอร(Buffer) • เมื่อมีการอานขอมูลในจานบันทึกขอมูลจํานวนหนึ่งจะถูก เคลื่อนยายมาไวในบัฟเฟอรเพื่อรอการนํ าไปประมวลผลตอไป 15 Structure Programming
การเปิดและปิดแฟ้มข้อมูลการเปิดและปิดแฟ้มข้อมูล • ฟงกชันที่ใชในการเปดแฟมขอมูลคือ fopen(filename, mode) • ฟงกชันที่ใชในการปดแฟมขอมูลคือ fclose(file_pointer) • ตัวชี้ตําแหนงขอมูลในแฟม กําหนดใหมีชนิดของขอมูลเปน FILE 16 Structure Programming
FILE *fp; fp = fopen(filename, mode); ................. ................. ................. ................. fclose(fp); ................. คำอธิบาย filename คือ ชื่อของแฟมขอมูลที่ตองการเปด mode คือ รหัสตัวอักษรที่จะแสดงภาวะใหทราบวา จะเปดแฟมขอมูลเพื่อทํางานอะไรบาง 17 Structure Programming
ภาวะที่ใชในการเปดแฟมขอมูลเชิงขอความภาวะที่ใชในการเปดแฟมขอมูลเชิงขอความ “r+” “w+” “a+” n ถาตองการเปดแฟมขอมูลเชิงฐานสองใหใช “b” ควบ เชน “wb” “rb” “ab” “r+b” “w+b” และ “a+b” โดยมีความหมายในการทํางานเหมือนเดิม 18 Structure Programming
การทำงานกับแฟ้มข้อมูลการทำงานกับแฟ้มข้อมูล • มีการทำงาน 2 แบบคือ • การอ่านข้อมูลจากแฟ้มข้อมูล • การบันทึกข้อมูลลงแฟ้มข้อมูล • ฟงกชันที่ใชในบันทึก / อ่านข้อมูลจากแฟ้มข้อมูล แบ่งเป็น 2 กลุ่มตามลักษณะของการใช้งานแฟ้มข้อมูล 19 Structure Programming
การทำงานกับแฟ้มข้อมูลการทำงานกับแฟ้มข้อมูล 1.ฟงกชันที่ใชกับแฟมมาตรฐาน 1.1 การบันทึกและอานขอมูลครั้งละ 1ตัวอักขระ ใชฟงกชัน putc และ getc() 1.2 การบันทึกและการอานขอมูลแตละครั้งเปนขอความหรือสาย อักขระ ใชฟงกชัน fputs() และ fgets() 1.3 การบันทึกและอานขอมูลชนิดจำนวนเต็ม ใชฟงกชัน putw และ getw() 20 Structure Programming
การทำงานกับแฟ้มข้อมูลการทำงานกับแฟ้มข้อมูล 1.ฟงกชันที่ใชกับแฟมมาตรฐาน 1.4 การบันทึกและการอานขอมูลแตละครั้งที่เปนไปตามรหัส รูปแบบของฟงกชันfprintf() และ fscanf() 1.5 การบันทึกและการอานขอมูลทีละระเบียนหรือทีละบล็อก ใชฟงกชัน fwrite() และ fread() 21 Structure Programming
การทำงานกับแฟ้มข้อมูลการทำงานกับแฟ้มข้อมูล 2.ฟงกชันที่ใชกับแฟมระบบ • ฟงกชันในกลุมนี้มีลักษณะเดียว คือ ฟงกชันread() และฟังกชัน write() 22 Structure Programming
สรุปฟงกชันที่ใชบันทึกและอานขอมูลสํ าหรับแฟมขอมูล 23 Structure Programming
1. การบันทึก/อานขอมูลดวยฟงกชัน putc() และ getc() 1. การบันทึกขอมูลดวยฟงกชัน putc() ใชบันทึกขอมูลทีละ 1อักขระ เขาไปในแฟมตรงตําแหนงที่ตัวชี้ตําแหนงชี้อยู รูปแบบ putc(ch, fp) ch คือตัวแปรชนิดอักขระที่ตองการบันทึกลงในแฟมขอมูล fp คือตัวชี้ที่อยูของขอมูลในแฟม 24 Structure Programming
#include <stdio.h> #include <conio.h> void main() { char ch; FILE *fp; fp = fopen("c:\\textfile.txt",“w") ; printf("Enter test character : "); while ((ch=getche()) != '\r') { /* '\r' = Enter */ putc(ch,fp); /* put in file */ } fclose (fp) ; } ตัวอย่างที่ 1 25 Structure Programming
#include <stdio.h> #include <conio.h> void main() { char ch; FILE *fp; char *fname; printf("Enter your file : "); scanf("%s",fname); fp = fopen(fname, "w") ; printf("Enter test character : "); while ((ch=getche()) != '\r') { /* '\r' = Enter */ putc(ch,fp); /* put in file */ } fclose (fp) ; } ตัวอย่างที่ 2 26 Structure Programming
1. การบันทึก/อานขอมูลดวยฟงกชัน putc() และ getc() 2. การอ่านขอมูลดวยฟงกชัน getc() ใชอานขอมูลจากแฟมขอมูลตรงตําแหนงที่ตัวชี้เลขที่อยูชี้อยูทีละ 1อักขระ char ch; ch = getc(fp) รูปแบบ ch คืออักขระที่อ่านได้จากแฟมขอมูล fp คือตัวชี้ที่อยูของขอมูลในแฟม 27 Structure Programming
ตัวระบุ EOF บอกจุดจบของแฟม (End of File) จบแฟม EOF = 1 ยังไมจบแฟม EOF = 0 มีขอผิดพลาด EOF = -1 #include <stdio.h> #include <conio.h> void main() { char ch; FILE *fp; if ((fp=fopen("c:\\test.txt","r")) != NULL) { while((ch = getc(fp)) != EOF) { //putchar(ch); printf("%c", ch); } fclose(fp); } else printf ("Can't open file. \n") ; } ch = getc(fp); while(ch != EOF) { printf("%c", ch); ch = getc(fp); } ch = getc(fp); while(!feof(fp)) { printf("%c", ch); ch = getc(fp); } ตัวอย่างที่ 1 28 Structure Programming
#include <stdio.h> #include <conio.h> void main() { char ch; FILE *fpin, *fpout; if ((fpin=fopen("c:\\input.txt","r")) != NULL) { if ((fpout=fopen("c:\\output.txt","w")) !=NULL) { while((ch=getc(fpin)) !=EOF) putc(ch,fpout); fclose(fpout); fclose(fpin); printf(“Copy completely. \n"); } else printf("Error in opening output file. \n"); } else printf("Error in opening input file "); } ตัวอย่างที่ 2 29 Structure Programming
2. การบันทึก/อานขอมูลดวยฟงกชัน fputs() และ fgets() 1. การบันทึกขอมูลดวยฟงกชัน fputs() ใชบันทึกขอมูลทีละ 1ข้อความ เขาไปในแฟมตรงตําแหนงที่ตัวชี้ตําแหนงชี้อยู รูปแบบ fputs(str, fp) str คือข้อความที่ตองการบันทึกลงในแฟมขอมูล fp คือตัวชี้ที่อยูของขอมูลในแฟม 30 Structure Programming
#include <stdio.h> #include <conio.h> void main() { char str[100]; FILE *fp; fp = fopen("c:\\testfile.txt", "w") ; printf("Enter test message : "); gets(str); fputs(str,fp); /* put in file */ fclose (fp); } 31 Structure Programming
2. การบันทึก/อานขอมูลดวยฟงกชัน fputs() และ fgets() 2. การอ่านขอมูลดวยฟงกชัน fgets() ใชอานขอมูลทีละ 1ข้อความตรงตํ าแหนงทีละตัวเลขที่ชี้อยู fgets(str, num, fp) รูปแบบ str คือ ข้อความ num คือ จํานวนไบตที่ตองการใหอาน fp คือ ตัวชี้ตําแหนงขอมูลในแฟมที่ตองการอาน 32 Structure Programming
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { FILE *fp; char str [76] ; if ((fp=fopen("c:\\testfile.txt","r")) == NULL) { printf("Cannot open file"); } else { fgets(str, 4, fp); printf("%s",str) ; fclose(fp) ; } } 33 Structure Programming
3. การบันทึก/อานขอมูลดวยฟงกชัน putw() และ getw() 1. การบันทึกขอมูลดวยฟงกชัน putw() ใชบันทึกขอมูลชนิดจำนวนเต็ม เขาไปในแฟมตรงตําแหนงที่ตัวชี้ตําแหนงชี้อยู รูปแบบ putw(i, fp) i คือข้อมูลชนิดจำนวนเต็มที่ตองการบันทึกลงในแฟมขอมูล fp คือตัวชี้ที่อยูของขอมูลในแฟม 34 Structure Programming
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { FILE *fp; fp = fopen("c:\\int_file.txt","w"); for (int i=1; i<=10; i++) if(putw(i, fp) == EOF) { /* put in file */ printf("Error in writing file\n"); exit(0); } printf("Successful Writing !!!"); fclose(fp); } 35 Structure Programming
3. การบันทึก/อานขอมูลดวยฟงกชัน putw() และ getw() 2. การอ่านขอมูลดวยฟงกชัน getw() ใช้อ่านขอมูลชนิดจำนวนเต็ม จากแฟมตรงตําแหนงที่ตัวชี้ตําแหนงชี้อยู int i; i = getw(fp) รูปแบบ i คือข้อมูลชนิดจำนวนเต็มที่ตองการอ่านจากแฟมขอมูล fp คือตัวชี้ที่อยูของขอมูลในแฟม 36 Structure Programming
#include <stdio.h> #include <conio.h> void main() { char ch; FILE *fp; int i; fp = fopen("c:\\int_file.txt","r") ; while (!feof(fp)) { i = getw(fp); /* put in file */ printf("%d\n",i); } fclose(fp);// ***** } 37 Structure Programming
4. การบันทึก/อานขอมูลดวยฟงกชัน fprintf() และ fscanf() 1. การบันทึกขอมูลดวยฟงกชัน fprintf() ใชบันทึกขอมูลทีละ 1ข้อความ ตามรูปแบบสํ าหรับของฟงกชัน printf () เขาไปในแฟมตรงตํ าแหนงที่ตัวชี้ตําแหนงชี้อยู่ fprintf(fp, formatted string, argument list) รูปแบบ fp คือ ตัวชี้ตําแหนงขอมูลในแฟมที่ตองการบันทึก formatted string คือ รหัสรูปแบบของ printf () argument list คือ รายการตัวแปรหรือคาคงที่ที่ตองการเก็บในแฟม 38 Structure Programming
#include <stdio.h> #include <conio.h> void main() { FILE *fp; char name[25]; int credit; float average; fp=fopen ("c:\\grade.rec","w+") ; printf("Type name, total credit, grade average : \n"); scanf("%s %d %f",name, &credit, &average); fprintf(fp,"%s %d %.2f",name, credit, average); fclose (fp) ; } 39 Structure Programming
4. การบันทึก/อานขอมูลดวยฟงกชัน fprintf() และ fscanf() 2. การอ่านขอมูลดวยฟงกชัน fscanf() ใชอานขอมูลจากแฟมขอมูลตรงตํ าแหนงที่ตัวชี้ ชี้อยูทีละ 1 ข้อความตามรูปแบบของ scanf() fscanf(fp, formatted string, argument list) รูปแบบ fp คือ ตัวชี้ตําแหนงขอมูลในแฟมที่ตองการอาน formatted string คือ รหัสรูปแบบของ scanf () argument list คือ รายการตัวแปรหรือคาคงที่ที่ตองการอ่านจากแฟม 40 Structure Programming
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { FILE *fp; char name[25]; int credit; float average; if ((fp=fopen("c:\\grade.rec","r")) == NULL) { printf ("Can't open file \n") ; exit(1); } while(fscanf(fp,"%s %d %f",name,&credit,&average) != EOF) printf("%s %d %.2f\n",name, credit, average); fclose(fp) ; } 41 Structure Programming
5. การบันทึก/อานขอมูลดวยฟงกชัน fwrite() และ fread() 1. การบันทึกขอมูลดวยฟงกชัน fwrite() ใชบันทึกขอมูลจากบัฟเฟอรเขาไปในแฟมตรงตําแหนงที่ตัวชี้ ตําแหนงชี้อยูครั้งละ 1 บล็อก fwrite(&var, size, num, fp) รูปแบบ &var คือเลขที่อยูของขอมูลที่ตองการบันทึกเขาในแฟม size คือขนาดเปนไบตของบล็อกขอมูลที่ต้องการบันทึก num คือจํ านวนบล็อกที่ตองการใหบันทึกแตละครั้ง fp คือ ตัวชี้ตําแหนงขอมูลในแฟมที่ตองการบันทึก 42 Structure Programming
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { FILE *fp; int i = 10; float f = 10.5; char p[5] = "ABC"; if ((fp=fopen("c:\\test.txt","w")) == NULL) { printf ("Error in opening file\n") ; exit(1); } fwrite(&p, sizeof(p), 1, fp); if (ferror(fp)){ printf("Error in writing file\n"); exit(1); } printf("Successful !!!"); fclose(fp); } ตัวอย่างที่ 1 43 Structure Programming
#include <stdio.h> #include <conio.h> #include <stdlib.h> struct Customer_Struct { char Cus_ID[6]; char Cus_Name[50]; char Cus_Tel[15]; char Cus_Addr[100]; } Customer; void main() { FILE *fp; char fname[15]; printf("Open new file and write data in\n"); printf("Enter file name: "); gets(fname); if ((fp=fopen(fname,"w")) == NULL) { //if error printf("Can't open file\n"); exit (1); } ตัวอย่างที่ 2 44 Structure Programming
do { /* if not error */ printf("\n---------------------------------\n"); printf("Customer ID <Enter = Exit> : "); gets(Customer.Cus_ID); if (Customer.Cus_ID[0] != '\0') { printf("Name : "); gets(Customer.Cus_Name) ; printf("Tel. : ") ; gets(Customer.Cus_Tel) ; printf("Address : ") ; gets(Customer.Cus_Addr); fwrite(&Customer,sizeof(Customer), 1,fp); /* write to file*/ if (ferror(fp)) { /* if error*/ printf("Can't write to file\n") ; exit(1) ; } } } while(Customer.Cus_ID[0] != '\0') ; /* if “Enter” then stop*/ printf("\n +++ Successful Writing !!! +++ \n"); fclose(fp); } ตัวอย่างที่ 2-ต่อ 45 Structure Programming
5. การบันทึก/อานขอมูลดวยฟงกชัน fwrite() และ fread() 2. การอ่านขอมูลดวยฟงกชัน fread() ใชอานขอมูลจากแฟมขอมูลทีละ 1 บล็อก ตรงตําแหนงที่ตัวชี้ ตำแหน่งชี้อยูเขาไปเก็บในบัฟเฟอร fread(&var,size,num,fp) รูปแบบ &var คือ เลขที่อยูของตัวแปรที่ตองการอานขอมูลจากแฟมเขาไปเก็บ size คือขนาดเปนไบตของบล็อกขอมูล num คือจํ านวนบล็อกที่ตองการใหอ่านแตละครั้ง fp คือ ตัวชี้ตําแหนงขอมูลในแฟมที่ตองการอ่าน 46 Structure Programming
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { FILE *fp; int i = 10; float f = 10.5; char p[5]; if ((fp=fopen("c:\\test.txt",“r")) == NULL) { printf ("Error in opening file\n") ; exit(1); } fread(&p, sizeof(p), 1, fp); if (ferror(fp)){ printf("Error in reading file\n"); exit(1); } printf(“%s”, p); fclose(fp); } ตัวอย่างที่ 1 47 Structure Programming
#include <stdio.h> #include <conio.h> #include <stdlib.h> struct Customer_Struct { char Cus_ID[6]; char Cus_Name[50]; char Cus_Tel[15]; char Cus_Addr[100]; } Customer; void main() { FILE *fp; char fname[15]; printf("Open file and read data in\n"); printf("Enter file name: "); gets(fname); if ((fp=fopen(fname,"r")) == NULL) { //if error printf("Can't open file\n"); exit (1); } ตัวอย่างที่ 2 48 Structure Programming
printf("Data from file : "); while(fread(&Customer,sizeof(Customer),1,fp) == 1) { if(ferror(fp)) { printf("Can't read from file\n"); exit(1) ; } printf("ID : %s\n", Customer.Cus_ID); /* display */ printf("Name : %s\n",Customer.Cus_Name); printf("Telephone : %s\n",Customer.Cus_Tel); printf("Address : %s\n", Customer.Cus_Addr); printf("\n-----------------------------------------\n"); } fclose(fp); } ตัวอย่างที่ 2-ต่อ 49 Structure Programming
แฟ้มข้อมูล และฟังก์ชัน • การส่งแฟ้มข้อมูลไปยังฟังก์ชันย่อย • การคืนแฟ้มข้อมูลกลับไปยังฟังก์ชัน Main 50 Structure Programming