Скачать презентацию บทท 10 การเขยนโปรแกรมตดตอกบ ไฟล ฟงกชนไฟล ในภาษาซ ฟลดฟงกชนแบงไดเปน Скачать презентацию บทท 10 การเขยนโปรแกรมตดตอกบ ไฟล ฟงกชนไฟล ในภาษาซ ฟลดฟงกชนแบงไดเปน

f50e8bc17381800006a3c02cb6df8de6.ppt

  • Количество слайдов: 34

บทท 10 การเขยนโปรแกรมตดตอกบ ไฟล บทท 10 การเขยนโปรแกรมตดตอกบ ไฟล

ฟงกชนไฟล ในภาษาซ ฟลดฟงกชนแบงไดเปน 2 กลม ดงน § High-level routines (มบฟเฟอร ) ไดแก fopen, fclose, ฟงกชนไฟล ในภาษาซ ฟลดฟงกชนแบงไดเปน 2 กลม ดงน § High-level routines (มบฟเฟอร ) ไดแก fopen, fclose, getc, putc, fgetc, fputc, fread, fwrite, fgets, เปนตน § Low-level routines (ไมมบฟเฟอร ) ไดแก open, read, write, lseek, close เปนตน fputs

ฟงกชนไฟล (ตอ ( w โปรแกรมประยกต (application program) สวนใหญมกใชฟงกชนระดบสง ซงเรยกใชบนระดบตำอกชนหน ง และฟงกชนระดบตำซงจะเรยกใช โดยตรงไปยงระบบเลย ฟงกชนไฟล (ตอ ( w โปรแกรมประยกต (application program) สวนใหญมกใชฟงกชนระดบสง ซงเรยกใชบนระดบตำอกชนหน ง และฟงกชนระดบตำซงจะเรยกใช โดยตรงไปยงระบบเลย

ไฟล (File) w ทกอนพตและเอาทพตในภาษาซจะพจ ารณาเปนไฟล ดงนน ทกไฟลไมจำเปนตองอยบนแผนด สก แตสามารถเปนอปกรณได ซงไฟลทเปดอยเปนประจำจะมอ ย 3 ไฟล ดงน ไฟล (File) w ทกอนพตและเอาทพตในภาษาซจะพจ ารณาเปนไฟล ดงนน ทกไฟลไมจำเปนตองอยบนแผนด สก แตสามารถเปนอปกรณได ซงไฟลทเปดอยเปนประจำจะมอ ย 3 ไฟล ดงน

ไฟล ชอ (file pointer) (File)(ตอ ) อปกรณ Handle stdin (standard input) 0 แปนพมพ จอภาพ ไฟล ชอ (file pointer) (File)(ตอ ) อปกรณ Handle stdin (standard input) 0 แปนพมพ จอภาพ stderr (standard error) จอภาพ สำหรบ MS-DOS มไฟลอนๆอก ไดแก 1 stdout (standard output) stdaux (auxilliary device) comms 2 3

การเปดไฟล w กอนทเราจะทำการอานหรอเขยนลงบน ไฟลหนงๆ เราจะตองทำการเปดไฟลกอน FILE *fp; โดยใชฟงกชน fopen() w โดยการประกาศตวชไฟลเปนดงน fp = fopen(fname, การเปดไฟล w กอนทเราจะทำการอานหรอเขยนลงบน ไฟลหนงๆ เราจะตองทำการเปดไฟลกอน FILE *fp; โดยใชฟงกชน fopen() w โดยการประกาศตวชไฟลเปนดงน fp = fopen(fname, mode); w การเรยกใชฟงกชน fopen() สำหรบโครงสราง FILE ซงไดมการนยามไวใน STDIO. H

การเปดไฟล (ตอ ( โดยทโหมด คอ “r”, “w”, “a” ซงหมายถง read, write และ append ตามลำดบ การเปดไฟล (ตอ ( โดยทโหมด คอ “r”, “w”, “a” ซงหมายถง read, write และ append ตามลำดบ หมายเหต § กรณทพยายามเปดไฟลทยงไมมด วยโหมด “w” หรอ “a” จะมการสรางไฟลขนมาใหม และถาทำการเปดไฟลเพอ write จะสงผลใหขอมลเดมทมอยในไฟ ลนนหายไป

การเปดไฟล (ตอ ( § กรณทพยายามเปดไฟลทยงไมม ดวยโหมด “r” จะเกด error โดยคนคาเปน NULL § กรณทเราตองการเปดเพอทำการ read การเปดไฟล (ตอ ( § กรณทพยายามเปดไฟลทยงไมม ดวยโหมด “r” จะเกด error โดยคนคาเปน NULL § กรณทเราตองการเปดเพอทำการ read และ write สามารถใชเครองหมาย ‘+’ เพมเตมได เชน “r+w” § ไฟลมทงทเปนไฟลขอความ และไบ นารไฟลตองบอกแกคอมไพเลอรดวยว าเปนไฟลชนดใด เชน

การปดไฟล w เมอใชงานไฟลเรยบรอยแลวควรทำก ารปดไฟลใหเรยบรอย โดยใชฟงกชน fclose() ซงการประกาศเปนดงน fclose(fp); การปดไฟล w เมอใชงานไฟลเรยบรอยแลวควรทำก ารปดไฟลใหเรยบรอย โดยใชฟงกชน fclose() ซงการประกาศเปนดงน fclose(fp);

การอานและเขยนขอมล w เมอทำการเปดไฟลแลวจงสามารถทำ การอานและเขยนไฟลได ซงการอานและเขยนไฟลนนมหลายว ธ และวธทงายทสด คอ การใชฟงกชน getc และ putc ดงน c การอานและเขยนขอมล w เมอทำการเปดไฟลแลวจงสามารถทำ การอานและเขยนไฟลได ซงการอานและเขยนไฟลนนมหลายว ธ และวธทงายทสด คอ การใชฟงกชน getc และ putc ดงน c = getc(fp; ( putc(c, fp; (

ตวอยาง 1 การอานขอมลจากไฟล #include <stdio. h> main(argc, argv) int argc; char *argv[]; { int ตวอยาง 1 การอานขอมลจากไฟล #include main(argc, argv) int argc; char *argv[]; { int c; FILE *fp; if((fp=fopen(argv[1], “r”))==NULL) printf(“Can’t find file %s”, argv[1]); else while((c=getc(fp))!=EOF) putc(c, stdout); fclose(fp); }

อนพตขอมล § ทำการอานคาจากไฟลขอความชอ “DATA. DAT” <This is a simple program to read a text อนพตขอมล § ทำการอานคาจากไฟลขอความชอ “DATA. DAT”

คำอธบายโปรแกรมตวอยาง 14. 1 § ฟงกชน main มการผานคา 2 อารกวเมนต § ทำการเปดไฟล ซงเปนขอความชอ DATA. DAT คำอธบายโปรแกรมตวอยาง 14. 1 § ฟงกชน main มการผานคา 2 อารกวเมนต § ทำการเปดไฟล ซงเปนขอความชอ DATA. DAT เพออาน § ถาเปดไฟลไมได แสดงขอความวาไมพบไฟลดงกลาว ถาเปดไฟลได (pointer ทชไปยง DATA. DAT ไมเทากบ NULL) จงเรมทำ while loop

ฟงกชน fgets() and fputs() § เปนฟงกชนทใชกบอปกรณ line ซงโดยปกตไฟลขอความจะเขยนลงเป น line และสนสดแตละ line ดวย ‘n’ ฟงกชน fgets() and fputs() § เปนฟงกชนทใชกบอปกรณ line ซงโดยปกตไฟลขอความจะเขยนลงเป น line และสนสดแตละ line ดวย ‘n’ § รปแบบ fgets(line, MAXLINE, fp; ( fputs(line, fp; (

ฟงกชน ทำหนาทอาน input line ถดไป (รวมทง ‘n’ จากไฟลท fp ชอย ) ลงในcharacter array ชอ ฟงกชน ทำหนาทอาน input line ถดไป (รวมทง ‘n’ จากไฟลท fp ชอย ) ลงในcharacter array ชอ line ซงมความยาวเทากบ MAXLINE-1 และเมออานสนสด เตม ‘’ 0เปน character ตวสดทายของ line fputs ทำหนาทเขยนขอมลจาก character array ชอ line ลงสไฟลท fp ชอย § fgets() and fputs()) ตอ (

โปรแกรมตวอยาง #include<stdio. h> #include<ctype. h> typedef enum {FALSE, TRUE}BOOL; main() { char name[32], address[32]; โปรแกรมตวอยาง #include #include typedef enum {FALSE, TRUE}BOOL; main() { char name[32], address[32]; int c=0, ch=0; BOOL ok; FILE *fptr; fptr = fopen(“name. dat”, “a”); 2

โปรแกรมตวอยาง 2 (ตอ ( while((tolower(c))!=‘n’) { ok =FALSE; while(!ok) { puts(“n name? ”); fgets(name, โปรแกรมตวอยาง 2 (ตอ ( while((tolower(c))!=‘n’) { ok =FALSE; while(!ok) { puts(“n name? ”); fgets(name, 32, stdin); puts(“n address? ”); fgets(address, 32, stdin); puts(“nnttdata is : -n”); printf(“%snn”, name, address);

โปรแกรมตวอยาง 2 (ตอ ( puts(“OK to write? ”); if((ch=getche())==‘y’||ch==‘y’) ok = TRUE; } putchar(‘n’); โปรแกรมตวอยาง 2 (ตอ ( puts(“OK to write? ”); if((ch=getche())==‘y’||ch==‘y’) ok = TRUE; } putchar(‘n’); fputs(name, fptr); fputs(address, fptr); puts(“ncontinue? ”); c = getch(); } fclose(fptr); }

อธบายโปรแกรมตวอยาง § เปดไฟลชอ “NAMES. DAT” เพอบนทกขอมล § ใช while loop เพอปอนชอ ทอยของแตละคน เมอขอมลถกตองทำการบนทกลงไฟล § อธบายโปรแกรมตวอยาง § เปดไฟลชอ “NAMES. DAT” เพอบนทกขอมล § ใช while loop เพอปอนชอ ทอยของแตละคน เมอขอมลถกตองทำการบนทกลงไฟล § เมอสนสดการใชงานไฟล ทำการปดไฟลดวย fclose § จะไดไฟลขอความ ชอ “NAMES. DAT” โดยมขอมลดงน SAKCHAI 391 Taksin Rd. Bangkok 2

อธบายโปรแกรมตวอยาง (ตอ ( § ผลลพธเปนดงน name? > SAKCHAI address? > 391 Taksin Rd. Bangkok อธบายโปรแกรมตวอยาง (ตอ ( § ผลลพธเปนดงน name? > SAKCHAI address? > 391 Taksin Rd. Bangkok data is : SAKCHAI 391 Taksin Rd. Bangkok 2

อธบายโปรแกรมตวอยาง (ตอ ( OK to write? >Y continue? >Y name? > SAKOL address? >102 อธบายโปรแกรมตวอยาง (ตอ ( OK to write? >Y continue? >Y name? > SAKOL address? >102 Seerom Rd. Bangkok 2

อธบายโปรแกรมตวอยาง (ตอ ( data is : SAKOL 102 Seerom Rd. Bangkok OK to write? อธบายโปรแกรมตวอยาง (ตอ ( data is : SAKOL 102 Seerom Rd. Bangkok OK to write? >Y continue? >N 2

สรปหวขอบทท 10 File w ลกษณะของแฟมขอมล – 13. 1 w การทำงานกบแฟมขอมล – 13. 2 w สรปหวขอบทท 10 File w ลกษณะของแฟมขอมล – 13. 1 w การทำงานกบแฟมขอมล – 13. 2 w การเปดแฟมขอมล – 13. 3 w การปดแฟมขอมล – 13. 4 w การอานและเขยนแฟมขอมล – 13. 5 n ทละตวอกขระ getc(fp); / putc(ch, fp) ch(%c) – 13. 5. 1 ทละ (คำ )string(%s)13. 5. 2 – fscanf / fprintf n ทละบรรทด – 13. 5 -3 fgets / fputs n

บทท 11 File w ลกษณะของแฟมขอมล w การทำงานกบแฟมขอมล 13. 2 – 13. 1 – Open บทท 11 File w ลกษณะของแฟมขอมล w การทำงานกบแฟมขอมล 13. 2 – 13. 1 – Open n Write/Read/Append (mode) n Close n w การเปดแฟมขอมล - 13. 3 FILE *fp fp = fopen(filename, mode)

ขอควรระวง ตวอยางการเปดแฟมขอม ล- 13. 3 w FILE *fp fp = fopen(filename, mode) w fp ขอควรระวง ตวอยางการเปดแฟมขอม ล- 13. 3 w FILE *fp fp = fopen(filename, mode) w fp = fopen(“out 1. txt”, “w”) การเปดเพอ เขยนลง (w)จะ = สรางให เขยนทบขอมลเดม w fp = fopen(“out 1. txt”, “r”) การเปดเพออาน (r)จะ ตองตรวจสอบกอนวามขอมลทจะ /

ความหมายของ keyword เปด แฟมขอมล. 1ใชสำหรบการเปดเพออาน (ตองตรวจสอบการมอยของไฟล w NULL : วางเปลา : หมายถงไมมแฟมขอมลนน ( . ความหมายของ keyword เปด แฟมขอมล. 1ใชสำหรบการเปดเพออาน (ตองตรวจสอบการมอยของไฟล w NULL : วางเปลา : หมายถงไมมแฟมขอมลนน ( . 2ใชสำหรบตรวจสอบวา อานขอมลจบหรอยง w EOF : end of file : หมายถงสนสดไฟล /

การปดแฟมขอมล 13. 4 w fclose(fp); w ปดทกครงทใชงานเสรจ เนองจากเวลาทำงานตางๆ โปรแกรมจะกระทำไดทละ แฟมขอมลเทานน FILE *fp fp = การปดแฟมขอมล 13. 4 w fclose(fp); w ปดทกครงทใชงานเสรจ เนองจากเวลาทำงานตางๆ โปรแกรมจะกระทำไดทละ แฟมขอมลเทานน FILE *fp fp = fopen(“out 1. txt”, “r”); w fclose(…) จะ return (0; ( …………. . fclose(fp); - 1

การอานและเขยนแฟม ขอมล -13. 5 w ทละตวอกขระ ch = getc(fp); / ch(%c) – 13. 5. การอานและเขยนแฟม ขอมล -13. 5 w ทละตวอกขระ ch = getc(fp); / ch(%c) – 13. 5. 1 putc(ch, fp) w ทละ string(%s)13. 5. 2 fscanf / fprintf w ทละบรรทด - – 13. 5 -3 (หนา 12( fgets / fputs w การอานและเขยนแบบการเขาถ

การอานและเขยนแฟม ขอมล -13. 5 อาน (อานออกมาจากไฟล ) ดวยคำสง getc( ) ตวอยางการใชงาน FILE *fp; char การอานและเขยนแฟม ขอมล -13. 5 อาน (อานออกมาจากไฟล ) ดวยคำสง getc( ) ตวอยางการใชงาน FILE *fp; char ch; ch = getc(fp) ทวไปจะอานจน 13. 7( EOF (ตย. 13. 6 และ

การอานและเขยนแฟมข อมล -13. 5(ตอ ( wเขยน (เขยนลงไฟล ) ดวยคำสง ตวอยางการใชงาน putc( ) FILE *fp; การอานและเขยนแฟมข อมล -13. 5(ตอ ( wเขยน (เขยนลงไฟล ) ดวยคำสง ตวอยางการใชงาน putc( ) FILE *fp; char ch; ch = ‘a; ’ putc(ch, fp); )ตย. 13. 5 เปน array ของ character(

fscanf(fp, “%s” , array_ch ); wการอานออกมาจากไฟล ตย. 13. 8 มจดบกพรองคอ เมอสนสดไฟลแล วยงไมสามารถออกจาก loop while fscanf(fp, “%s” , array_ch ); wการอานออกมาจากไฟล ตย. 13. 8 มจดบกพรองคอ เมอสนสดไฟลแล วยงไมสามารถออกจาก loop while ได

fprintf(fp, “%s” , array_ch); wการเขยนลงไฟล ตาม ตย. ท 13. 10 fprintf(fp, “%d” , int_arg); fprintf(fp, “%s” , array_ch); wการเขยนลงไฟล ตาม ตย. ท 13. 10 fprintf(fp, “%d” , int_arg); และเปนตวอยางทสามาร ถให user

การอาน เขยนทละบรรทด 13. 5. 3 – w fgets ตย. ท 13. 11 และแบบวน loop การอาน เขยนทละบรรทด 13. 5. 3 – w fgets ตย. ท 13. 11 และแบบวน loop รบคาใหใชงานไดจรง ตาม ตย. ท 13. 13 w fputs w ตย. ท 13. 12

การอานเขยนขอมลแบบเข าถงตรง – 13. 5. 4 wfseek wfread wfwrite ตย. 13. 14 การอานเขยนขอมลแบบเข าถงตรง – 13. 5. 4 wfseek wfread wfwrite ตย. 13. 14