
f50e8bc17381800006a3c02cb6df8de6.ppt
- Количество слайдов: 34
บทท 10 การเขยนโปรแกรมตดตอกบ ไฟล
ฟงกชนไฟล ในภาษาซ ฟลดฟงกชนแบงไดเปน 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) สวนใหญมกใชฟงกชนระดบสง ซงเรยกใชบนระดบตำอกชนหน ง และฟงกชนระดบตำซงจะเรยกใช โดยตรงไปยงระบบเลย
ไฟล (File) w ทกอนพตและเอาทพตในภาษาซจะพจ ารณาเปนไฟล ดงนน ทกไฟลไมจำเปนตองอยบนแผนด สก แตสามารถเปนอปกรณได ซงไฟลทเปดอยเปนประจำจะมอ ย 3 ไฟล ดงน
ไฟล ชอ (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, mode); w การเรยกใชฟงกชน fopen() สำหรบโครงสราง FILE ซงไดมการนยามไวใน STDIO. H
การเปดไฟล (ตอ ( โดยทโหมด คอ “r”, “w”, “a” ซงหมายถง read, write และ append ตามลำดบ หมายเหต § กรณทพยายามเปดไฟลทยงไมมด วยโหมด “w” หรอ “a” จะมการสรางไฟลขนมาใหม และถาทำการเปดไฟลเพอ write จะสงผลใหขอมลเดมทมอยในไฟ ลนนหายไป
การเปดไฟล (ตอ ( § กรณทพยายามเปดไฟลทยงไมม ดวยโหมด “r” จะเกด error โดยคนคาเปน NULL § กรณทเราตองการเปดเพอทำการ read และ write สามารถใชเครองหมาย ‘+’ เพมเตมได เชน “r+w” § ไฟลมทงทเปนไฟลขอความ และไบ นารไฟลตองบอกแกคอมไพเลอรดวยว าเปนไฟลชนดใด เชน
การปดไฟล w เมอใชงานไฟลเรยบรอยแลวควรทำก ารปดไฟลใหเรยบรอย โดยใชฟงกชน fclose() ซงการประกาศเปนดงน fclose(fp);
การอานและเขยนขอมล w เมอทำการเปดไฟลแลวจงสามารถทำ การอานและเขยนไฟลได ซงการอานและเขยนไฟลนนมหลายว ธ และวธทงายทสด คอ การใชฟงกชน getc และ putc ดงน c = getc(fp; ( putc(c, fp; (
ตวอยาง 1 การอานขอมลจากไฟล #include <stdio. h> 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 file. § จะไดผลลพธดงน <This is a simple program to read a text file.
คำอธบายโปรแกรมตวอยาง 14. 1 § ฟงกชน main มการผานคา 2 อารกวเมนต § ทำการเปดไฟล ซงเปนขอความชอ DATA. DAT เพออาน § ถาเปดไฟลไมได แสดงขอความวาไมพบไฟลดงกลาว ถาเปดไฟลได (pointer ทชไปยง DATA. DAT ไมเทากบ NULL) จงเรมทำ while loop
ฟงกชน fgets() and fputs() § เปนฟงกชนทใชกบอปกรณ line ซงโดยปกตไฟลขอความจะเขยนลงเป น line และสนสดแตละ line ดวย ‘n’ § รปแบบ fgets(line, MAXLINE, fp; ( fputs(line, fp; (
ฟงกชน ทำหนาทอาน 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]; 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, 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’); fputs(name, fptr); fputs(address, fptr); puts(“ncontinue? ”); c = getch(); } fclose(fptr); }
อธบายโปรแกรมตวอยาง § เปดไฟลชอ “NAMES. DAT” เพอบนทกขอมล § ใช while loop เพอปอนชอ ทอยของแตละคน เมอขอมลถกตองทำการบนทกลงไฟล § เมอสนสดการใชงานไฟล ทำการปดไฟลดวย fclose § จะไดไฟลขอความ ชอ “NAMES. DAT” โดยมขอมลดงน SAKCHAI 391 Taksin Rd. Bangkok 2
อธบายโปรแกรมตวอยาง (ตอ ( § ผลลพธเปนดงน 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 Seerom Rd. Bangkok 2
อธบายโปรแกรมตวอยาง (ตอ ( data is : SAKOL 102 Seerom Rd. Bangkok OK to write? >Y continue? >N 2
สรปหวขอบทท 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 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 = fopen(“out 1. txt”, “w”) การเปดเพอ เขยนลง (w)จะ = สรางให เขยนทบขอมลเดม w fp = fopen(“out 1. txt”, “r”) การเปดเพออาน (r)จะ ตองตรวจสอบกอนวามขอมลทจะ /
ความหมายของ keyword เปด แฟมขอมล. 1ใชสำหรบการเปดเพออาน (ตองตรวจสอบการมอยของไฟล w NULL : วางเปลา : หมายถงไมมแฟมขอมลนน ( . 2ใชสำหรบตรวจสอบวา อานขอมลจบหรอยง w EOF : end of file : หมายถงสนสดไฟล /
การปดแฟมขอมล 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. 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 ch; ch = getc(fp) ทวไปจะอานจน 13. 7( EOF (ตย. 13. 6 และ
การอานและเขยนแฟมข อมล -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 ได
fprintf(fp, “%s” , array_ch); wการเขยนลงไฟล ตาม ตย. ท 13. 10 fprintf(fp, “%d” , int_arg); และเปนตวอยางทสามาร ถให user
การอาน เขยนทละบรรทด 13. 5. 3 – w fgets ตย. ท 13. 11 และแบบวน loop รบคาใหใชงานไดจรง ตาม ตย. ท 13. 13 w fputs w ตย. ท 13. 12
การอานเขยนขอมลแบบเข าถงตรง – 13. 5. 4 wfseek wfread wfwrite ตย. 13. 14
f50e8bc17381800006a3c02cb6df8de6.ppt