วันพุธที่ 17 กันยายน พ.ศ. 2557

07:03
9.6 การใช้ฟังก์ชัน  fprintf( )  และ  fscanf( )
            9.6.1 ฟังก์ชัน  fprintf( )
                        เป็นฟังก์ชันที่ใช้บันทึกข้อมูล  (write)  ลงแฟ้มโดยสามารถจัดรูปแบบข้อมูลที่ต้องการบันทึกได้คล้ายกับฟังก์ชัน  printf( )  แตกต่างกันตรงที่  printf( )  เป็นฟังก์ชันที่ใช้พิมพ์ผลลัพธ์ออกทางจอภาพแต่ฟังก์ชัน  fprintf( )  ใช้บันทึกข้อมูลลงแฟ้ม
รูปแบบการใช้ 
fprintf (fp,control string,variable list);
  
โดยที่ 

fp  คือ  ตัวชี้ตำแหน่งในแฟ้มข้อมูล
control string  คือ  รหัสรูปแบบข้อมูลและรหัสควบคุมใช้เหมือนฟังก์ชัน  printf( )  เช่น  สามารถระบุชนิดของข้อมูลที่ต้องการบันทึกลงแฟ้มเป็น   %d, %c, %f, %s   หรือใช้รหัสควบคุม   \n  หรือ  \t  ก็ได้
variable list  คือ  ค่าคงที่  ตัวแปร  หรือนิพจน์ที่จะเขียนลงแฟ้มข้อมูล  ถ้าเป็นค่าคงที่สตริงต้องเขียนอยู่ภายในเครื่องหมาย  “…”
                   ตัวอย่างที่  9.4  แสดงการใช้ฟังก์ชัน  fprintf( )
int  x=15;  float  f=4.562;  char str[20]=”Computer”;
FILE  *fptr;
fprintf(fptr, “%d \t  %f \t  %s \n”,x,f,str);
                                                                                                                                                                                                                                                                                             
โดยที่ 

fptr  คือ  ตัวชี้ตำแหน่งในแฟ้มข้อมูล  (file pointer)
 คือ  ตัวแปร  int  เก็บข้อมูลตัวเลข  15  ซึ่งจะถูกบันทึกลงแฟ้มเป็น  field  ที่ 1
 คือ  ตัวแปร  float  เก็บข้อมูลตัวเลข  4.562  ซึ่งจะถูกบันทึกลงแฟ้มเป็น  field  ที่ 2            
str  คือ  ตัวแปร  string  เก็บข้อความว่า  “Computer”  ซึ่งจะถูกบันทึกลงแฟ้มเป็น  field ที่ 3
\t  คือ  รหัสควบคุมที่สั่งให้  tab  ไป  1  ครั้ง  ก่อนที่จะบันทึกข้อมูล  field  ต่อไป
\n  คือ  รหัส  new line  ใช้สั่งให้ขึ้นบรรทัดใหม่ในแฟ้มข้อมูล
            9.6.2 ฟังก์ชัน  fscanf( )
                        เป็นฟังก์ชันที่ใช้อ่านข้อมูล  (read)  ขึ้นจากแฟ้มข้อมูลแล้วนำมาเก็บไว้ในตัวแปรที่ต้องการได้โดยมีการทำงานคล้ายกับฟังก์ชัน  scanf( )  แตกต่างกันตรงที่ฟังก์ชัน  fscanf( )  เป็นฟังก์ชันที่ใช้อ่านข้อมูลจากแฟ้มข้อมูลแต่ฟังก์ชัน  scanf( )  เป็นฟังก์ชันที่ใช้รับข้อมูลจากคีย์บอร์ดแล้วไปเก็บไว้ในตัวแปรที่ต้องการ
รูปแบบการใช้
fscanf( fp, control string, variable list);
                                                                                                        
โดยที่ 

fp  คือ  ตัวชี้ตำแหน่งในแฟ้มข้อมูล
control string  คือ  รหัสรูปแบบข้อมูลใช้เหมือนฟังก์ชัน  scanf( )  เช่น  สามารถระบุชนิดของข้อมูลที่ต้องการอ่านข้อมูลจากแฟ้มเป็น  %d,%c,%f,%s  และยังสามารถใช้รหัส  new  line
หรือ  \n  ได้
variable list  คือ  ชื่อตัวแปรที่ใช้เก็บข้อมูลที่อ่านมาจากแฟ้มข้อมูล  โดยจะต้องระบุเครื่องหมาย  & (ampersand)  นำหน้าชื่อตัวแปรด้วย  ยกเว้นตัวแปรสตริงเท่านั้นที่ไม่ต้องมีเครื่องหมาย &
ตัวอย่างที่  9.5  แสดงการใช้ฟังก์ชัน  fscanf( )
int i;  float f;  char str[80];
FILE *fptr;
fscanf( fptr,”%d  %f  %s \n”,&i,&f,str);                                                                  
                                                                                            
โดยที่ 

i  คือ  ตัวแปรชนิด  int  ใช้เก็บข้อมูลที่อ่านจากแฟ้ม  field  ที่ 1
 คือ  ตัวแปรชนิด  float  ใช้เก็บข้อมูลที่อ่านจากแฟ้ม  field  ที่ 2
str  คือ  ตัวแปรสตริง  ใช้เก็บข้อมูลที่อ่านจากแฟ้ม  field  ที่ 3
fptr  คือ  file pointer  ใช้ชี้ตำแหน่งข้อมูลในแฟ้ม
            เพื่อความเข้าใจเกี่ยวกับการใช้ฟังก์ชัน  fprintf( )  และฟังก์ชัน  fscanf( )  มากยิ่งขึ้น  ให้ศึกษาจากโปรแกรมตัวอย่างดังต่อไปนี้
โปรแกรมตัวอย่างที่ 9.3 แสดงการใช้ฟังก์ชัน fprintf( ) บนทึกข้อมูลลงในแฟ้ม               1  record

/*             wdataf.c                                */
/*   this program for write one record into data file       */
#include<stdio.h>                                                                      /*  บรรทัดที่  1  */
#include<stdlib.h>                                                                     /*  บรรทัดที่  2  */
#include<conio.h>                                                                     /*  บรรทัดที่  3  */
void main(void)                                                                            /*  บรรทัดที่  4  */
{                                                                                                   /*  บรรทัดที่  5  */
      FILE *fptr;                                                                                 /*  บรรทัดที่  6  */
      int  x=5;  float  f=4.5;  char str[80]="C and C++ Programming";   /*  บรรทัดที่  7  */
      char fname[80];                                                                         /*  บรรทัดที่  8  */
      clrscr( );                                                                                   /*  บรรทัดที่  9  */
      printf("Enter your file name ( file format is  *.dat ) :");                /*  บรรทัดที่  10  */
      gets(fname);                                                                                  /*  บรรทัดที่  11  */
      if( (fptr=fopen(fname, "w")) == NULL )                                          /*  บรรทัดที่  12  */
            {                                                                                          /*  บรรทัดที่  13  */
                  printf("Error in open file ");                                            /*  บรรทัดที่  14  */
                  printf("\007");                                                                 /*  บรรทัดที่  15  */
                  exit(1);                                                                            /*  บรรทัดที่  16  */
            }                                                                                          /*  บรรทัดที่  17  */
      fprintf(fptr, "%d \t %.2f \t %s\n", x, f, str);                                    /*  บรรทัดที่  18  */
      fclose(fptr);                                                                                  /*  บรรทัดที่  19  */
}                                                                                                    /*  บรรทัดที่  20  */
หมายเหตุ  ถ้าต้องการเก็บแฟ้มข้อมูลไว้ในไดร์ฟ  a: ก่อน  run  โปรแกรมต้องใส่แผ่นดิสก์เก็ตต์ไว้ในไดร์ฟ  a:  เพื่อเก็บแฟ้มข้อมูลที่สร้างจากโปรแกรมนี้
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: Enter  your  file  name  (file  format  is  *.dat) : a:test1.dat  ทำให้สร้างแฟ้มข้อมูลในแฟ่นดิสด์เก็ตต์ที่อยู่ไดร์ฟ  A:  ชื่อแฟ้ม  test1.dat  ซึ่งภายในแฟ้มข้อมูล  test1.dat  จะเก็บข้อมูล  1  record  ดังนี้    5    4.50  C  and  C++  Programming       

คำแนะนำ  เราค่อยตรวจสอบต่อไปว่าสามารถเขียนข้อมูลลงแฟ้มได้จริงหรือไม่   ในโปรแกรมตัวอย่างที่  9.5
คำอธิบายโปรแกรม 
            จากโปรแกรมตัวอย่างที่  9.3  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้
            การทำงานของโปรแกรมตัวอย่างนี้  จะให้เปิดแฟ้มข้อมูลขึ้นมาเพื่อเขียน  โดยให้ผู้ใช้งานตั้งชื่อแฟ้มเอง  แต่ให้มีนามสกุล  .dat  เช่น  a:test1.dat  คือ  ตั้งชื่อแฟ้ม  test.dat  เก็บไว้ที่ไดร์ฟ  a  ถ้าเปิดไม่ได้ก็จะพิมพ์ข้อผิดพลาด  และมีเสียง  bell  ดัง  บอกให้ทราบ  ซึ่งถ้าเปิดได้แล้วจะนำค่าของตัวแปร  x, f  และ  ตัวแปร  str  เขียนลงในแฟ้มข้อมูลดังกล่าว  1  record  ตามคำสั่งอยู่ที่บรรทัดที่  18  ซึ่งการเขียนข้อมูลจะมีการเว้นช่องว่างในแต่ละฟิลด์  เนื่องจากมีการใช้รหัส  \t  และ  \n  ทำให้เกิดความสะดวกในการอ่านข้อมูลจากแฟ้มขึ้นมาใช้งานต่อไป  เขียนเสร็จแล้วก็จะใช้ฟังก์ชัน  fclose( )  เพื่อปิดแฟ้มข้อมูล  ในบรรทัดที่ 19
โปรแกรมตัวอย่างที่  9.4  แสดงการใช้ฟังก์ชัน  fprintf( )  บันทึกข้อมูลลงในแฟ้มควบคู่กับคำสั่ง  for

/*             wdataf2.c              */
/*   this program for write  5 record into data file          */
#include<stdio.h>                                                                      /*  บรรทัดที่  1  */
#include<stdlib.h>                                                                      /*  บรรทัดที่  2  */
#include<conio.h>                                                                     /*  บรรทัดที่  3  */
void main(void)                                                                            /*  บรรทัดที่  4  */
{                                                                                                   /*  บรรทัดที่  5  */
      FILE *fptr;                                                                                     /*  บรรทัดที่  6  */
      int  x=1;  float  f=8.5;  char str[80]="C and C++ Programming";   /*  บรรทัดที่  7  */
      int j;                                                                                              /*  บรรทัดที่  8  */
      char fname[80];                                                                           /*  บรรทัดที่  9  */
      clrscr( );                                                                                       /*  บรรทัดที่  10  */
      printf("Enter your file name ( file format is  *.dat ) :");                   /*  บรรทัดที่  11  */
      gets(fname);                                                                                /*  บรรทัดที่  12  */
      if( (fptr=fopen(fname, "w")) == NULL )                                         /*  บรรทัดที่  13  */
            {                                                                                            /*  บรรทัดที่  14  */
                  printf("Error in open file ");                                               /*  บรรทัดที่  15  */
                  printf("\007");                                                                   /*  บรรทัดที่  16  */
                  exit(1);                                                                               /*  บรรทัดที่  17  */
            }                                                                                            /*  บรรทัดที่  18  */
      for(j=1; j<=5; j++)
            {                                                                      /*  บรรทัดที่  19  */
                  fprintf(fptr, "%d \t %.2f \t %s\n ", x, f, str);             /*  บรรทัดที่  20  */
                  x= x+1;                                                                  /*  บรรทัดที่  21  */
                  f= f+1.5;                                                                /*  บรรทัดที่  22  */
            }                                                                                  /*  บรรทัดที่  23  */
fclose(fptr);                                                                                 /*  บรรทัดที่  24  */
}                                                                                                    /*  บรรทัดที่  25  */

หมายเหตุ  ถ้าต้องการเก็บแฟ้มข้อมูลไว้ในไดร์ฟ  a: ก่อน  run  โปรแกรมต้องใส่แผ่นดิสก์เก็ตต์ไว้ในไดร์ฟ  a:  เพื่อเก็บแฟ้มข้อมูลที่สร้างจากโปรแกรมนี้
ผลลัพธ์ที่ได้จากโปรแกรม
แผนผังลำดับงาน: จอภาพ: Enter  your  file  name  (file  format  is  *.dat )  :a:test2.dat  ทำให้สร้างแฟ้มข้อมูลในแผ่นดิสก์เก็ตต์ที่อยู่ไดร์ฟ  A:  ชื่อแฟ้ม  test2.dat  ซึ่งภายในแฟ้มข้อมูล  test2.dat  จะเก็บข้อมูล  5  record  ดังนี้  1        8.50    C  and  C++Programming  2        105.00     C  and  C++Programming  3        11.50     C  and  C++Programming  4        13.00     C  and  C++Programming  5        14.50     C  and  C++Programming


คำแนะนำ  เราค่อยตรวจสอบต่อไปว่าสามารถเขียนข้อมูลลงแฟ้มได้จริงหรือไม่   ในโปรแกรมตัวอย่างที่  9.6
คำอธิบายโปรแกรม 
            จากโปรแกรมตัวอย่างที่  9.4  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้
            โปรแกรมตัวอย่างที่  9.4  จะทำงานคล้ายกับโปรแกรมตัวอย่างที่  9.3  คือเปิดแฟ้มข้อมูลขึ้นมาเพื่อเขียน  เช่น  เขียนที่ไดร์ฟ  a:test2.dat  แต่จะเขียนข้อมูลมากกว่า  1  record  โดยใช้คำสั่ง  for  ช่วย  ซึ่งคำสั่งอยู่บรรทัดที่  19  ถึง  23  คือเขียนค่าตัวแปร  x, f  และ  str  ลงในแฟ้ม  และแต่ละ  record  ที่เขียนจะมีการคำนวณเปลี่ยนค่าตัวแปร  x  และ  f  ด้วย  เมื่อเขียนเสร็จแล้วก็จะปิดแฟ้มข้อมูล  ด้วยฟังก์ชัน  fclose( )  ในคำสั่งบรรทัดที่  24
โปรแกรมตัวอย่างที่  9.5  แสดงการใช้ฟังก์ชัน  fscanf( )  อ่านข้อมูลจากแฟ้ม  1  record

/*             rdataf.c  */
/*   this program for read one record from data file     */
/*   and print data to monitor                                                 */
#include<stdio.h>                                                                      /*  บรรทัดที่  1  */
#include<stdlib.h>                                                                     /*  บรรทัดที่  2  */
#include<conio.h>                                                                      /*  บรรทัดที่  3  */
void main(void)                                                                             /*  บรรทัดที่  4  */
{                                                                                                     /*  บรรทัดที่  5  */
      FILE *fptr;                                                                                    /*  บรรทัดที่  6  */
      int  x;  float  f;  char c, str1[80], str2[80], str3[80];                        /*  บรรทัดที่  7  */
      char fname[80];                                                                           /*  บรรทัดที่ 8  */
      clrscr( );                                                                                           /*  บรรทัดที่  9  */
      printf("Enter your file name ( file format is  *.dat ) :");                     /*  บรรทัดที่  10  */
      gets(fname);                                                                                   /*  บรรทัดที่  11  */
      if( (fptr=fopen(fname, "r")) == NULL )                                           /*  บรรทัดที่  12  */
            {                                                                                        /*  บรรทัดที่  13  */
                  printf("Error in open file ");                                           /*  บรรทัดที่  14  */
                  printf("\007");                                                               /*  บรรทัดที่  15  */
                  exit(1);                                                                            /*  บรรทัดที่  16  */
            }                                                                                          /*  บรรทัดที่  17  */
      fscanf(fptr, "%d %f %c %s %s %s \n", &x, &f, &c,str1,str2,str3);      /*  บรรทัดที่  18  */
      printf("%d\t%.2f\t%c %s %s %s\n",x,f,c,str1,str2,str3);         /*  บรรทัดที่  19  */
      fclose(fptr);                                                                               /*  บรรทัดที่  20  */
      getch();                                                                                         /*  บรรทัดที่  21  */
}                                                                                                    /*  บรรทัดที่  22  */
หมายเหตุ  ก่อน  run  โปรแกรมต้องใส่แผ่นดิสก์เก็ตต์ไว้ในไดร์ฟ  a:  ที่มีแฟ้ม  test1.dat  ที่เคยสร้างไว้แล้ว  เพื่อให้โปรแกรมอ่านข้อมูลจากแฟ้มนี้
ผลลัพธ์ที่ได้จากโปรแกรม
แผนผังลำดับงาน: จอภาพ: Enter  your  file  name  (file  format  is  *.dat)  :  a:test1.dat  ทำให้เปิดแฟ้มข้อมูลในแผ่นดีสก์เก็ตต์ที่อยู่ไดร์ฟ  A:  ชื่อแฟ้ม  test1.dat  ซึ่งอ่านข้อมูลจากแฟ้มข้อมูล  test1.dat  ซึ่งมีอยู่  1  record  ชึ้นมาใช้งานด้วยฟังก์ชัน  fscanf( )  พิมพ์ข้อมูลออกทางจอภาพดังนี้    5           4.50        C  and  C++Programming       

ข้อสังเกต  ข้อมูลที่อ่านได้จากโปรแกรมตัวอย่างที่  9.5  เป็นข้อมูลที่เราเขียนใส่ไว้ในแฟ้มข้อมูลจากโปรแกรมตัวอย่างที่  9.3
คำอธิบายโปรแกรม 
            จากโปรแกรมตัวอย่างที่  9.5  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้
            โปรแกรมตัวอย่างนี้  จะเปิดแฟ้มข้อมูลขึ้นมาเพื่ออ่านข้อมูล  โดยให้ผู้ใช้วนเติมชื่อแฟ้มข้อมูลที่ต้องการอ่าน  เช่น  เราจะอ่านแฟ้มที่บันทึกข้อมูลได้จากโปรแกรมตัวอย่างที่  9.3  คือ  a:test1.dat  ซึ่งคำสั่งบรรทัดที่  18  อ่านข้อมูลขึ้นมาเก็บไว้ที่ตัวแปร  x, f, c,str1, str2  และตัวแปร  str3  แล้วทำงานคำสั่งบรรทัดที่  19  คือนำค่าที่เก็บไว้ในตัวแปรดังกล่าวแสดงออกที่จอภาพ  หลังจากทำงานเสร็จสิ้นแล้ว  จะปิดแฟ้มข้อมูลด้วยฟังก์ชัน  fclose( )  ในคำสั่งบรรทัดที่  20
โปรแกรมตัวอย่างที่  9.6  แสดงการใช้ฟังก์ชัน  fscanf( )  อ่านข้อมูลจากแฟ้ม  ควบคู่กับคำสั่ง  for

/*             rdataf2.c                                */
/*   this program for read  5 record from data file         */
/*   and print data to monitor                                       */
#include<stdio.h>                                                                          /*  บรรทัดที่  1  */
#include<stdlib.h>                                                                        /*  บรรทัดที่  2  */
#include<conio.h>                                                                        /*  บรรทัดที่  3  */
void main(void)                                                                                 /*  บรรทัดที่  4  */
{                                                                                                        /*  บรรทัดที่  5  */
      FILE *fptr;                                                                                 /*  บรรทัดที่  6  */
      int  x;  float  f;  char c, str1[80],str2[80],str3[80];                       /*  บรรทัดที่  7  */
      int j;                                                                                          /*  บรรทัดที่  8  */
      char fname[80];                                                                       /*  บรรทัดที่  9  */
      clrscr( );                                                                                   /*  บรรทัดที่  10  */
      printf("Enter your file name ( file format is  *.dat ) :");              /*  บรรทัดที่  11  */
      gets(fname);                                                                            /*  บรรทัดที่  12  */
      if( (fptr=fopen(fname, "r")) == NULL )                                       /*  บรรทัดที่  13  */
            {                                                                                       /*  บรรทัดที่  14  */
                  printf("Error in open file ");                                          /*  บรรทัดที่  15  */
                  printf("\007");                                                             /*  บรรทัดที่  16  */
                  exit(1);                                                                         /*  บรรทัดที่  17  */
            }                                                                                        /*  บรรทัดที่  18  */
      for(j=1; j<=5; j++)
             {                                                                         /*  บรรทัดที่  19  */
                  fscanf(fptr, "%d %f %c %s %s %s \n", &x, &f,&c,str1,str2,str3); /*  บ.  20  */
                  printf("%d \t %.2f \t %c %s %s %s \n",x,f,c,str1,str2,str3); /*  บรรทัดที่  21  */
            }                                                                                             /*  บรรทัดที่  22  */
      fclose(fptr);                                                                                   /*  บรรทัดที่  23  */
      getch();                                                                                         /*  บรรทัดที่  24  */
}                                                                                                    /*  บรรทัดที่  25  */
หมายเหตุ  ก่อน  run  โปรแกรมต้องใส่แผ่นดิสก์เก็ตต์ไว้ในไดร์ฟ  a:  ที่มีแฟ้ม  test2.dat  ที่เคยสร้างไว้แล้ว  เพื่อให้โปรแกรมอ่านข้อมูลจากแฟ้มนี้
ผลลัพธ์ที่ได้จากโปรแกรม
แผนผังลำดับงาน: จอภาพ: Enter  your  file  name  (file  format  is  *.dat)  :a:test2.dat  ทำให้เปิดแฟ้มข้อมูลในแผ่นดีสก์เก็ตต์ที่มีอยู่ไดร์ฟ  A:  ชื่อแฟ้ม  test2.dat  ซึ่งจะอ่านข้อมูลครั้งละ 1  record  จากแฟ้ม  test2.dat  ขึ้นมาใช้งานด้วยฟังก์ชัน  fscanf( )  พิมพ์ข้อมูลครั้งละ 1 record  ออกทางจอภาพ  จนกระทั่งครบทุก  record  ในแฟ้ม  ดังนั้นบนจอภาพจะปรากฏข้อมูลดังนี้    1        8.50    C  and  C++Programming  2        10.00     C  and  C++Programming  3        11.50     C  and  C++Programming  4        13.00     C  and  C++Programming  5        14.50     C  and  C++Programming     

ข้อสังเกต  ข้อมูลที่อ่านได้จากโปรแกรมตัวอย่างที่  9.6  เป็นข้อมูลที่เราเขียนใส่ไว้ในแฟ้มข้อมูลจากโปรแกรมตัวอย่างที่  9.4
คำอธิบายโปรแกรม 
            จากโปรแกรมตัวอย่างที่  9.6  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้
            โปรแกรมตัวอย่างนี้จะทำงานคล้ายกับโปรแกรมตัวอย่างที่  9.5  จะเปิดแฟ้มข้อมูลขึ้นมาอ่านข้อมูล  โดยให้ผู้ใช้งานเติมชื่อแฟ้มข้อมูลที่ต้องการอ่าน  เช่น  เราจะค้นแฟ้มที่บันทึกข้อมูลได้จากโปรแกรมที่  9.4  คือ  a:test2.dat  ซึ่งข้อมูลมีอยู่ทั้งหมด  5  record  โดยใช้คำสั่ง  for  ช่วย  ซึ่งคำสั่งอยู่บรรทัดที่  19  ถึง  22  โดยที่คำสั่งบรรทัดที่  20  จะอ่านข้อมูลขึ้นมาเก็บไว้ที่ตัวแปร  x, f, c, str1, str2  และตัวแปร  str3  แล้วนำค่าที่เก็บไว้ในตัวแปรดังกล่าวแสดงออกที่จอภาพ  ตามลำดับ  หลังจากทำงานเสร็จสิ้นแล้วจะปิดแฟ้มข้อมูลด้วยฟังก์ชัน  fclose( )  ในคำสั่งบรรทัดที่  23

0 ความคิดเห็น:

แสดงความคิดเห็น