មេរៀនទី១០: រក្សារទុកទិន្នន័យក្នុង File

មេរៀនទី១០: រក្សារទុកទិន្នន័យក្នុង File

I.   Definition file: File  ជាសំណុំនៃទិន្នន័យ   ដែលមានទំនាក់ ទំនង ជាមួយគ្នា  និងមានប្រភេទដូចគ្នាត្រូវបាន ផ្ដុំបញ្ចូលគ្នាបង្កើតបាន ជា array of data ។ file ត្រូវបានផ្ទុកក្នុង Disk … ។
II.   Analysis file: បណ្ដាជំហ៊ានដើម្បី analysis file រួមមាន ៖

–   Declaration file variable :
–   Open file for read or write :
–   Read file, write file :
–   Close file.
II.1). Declaration file variable: យើងកំណត់ប្រើ    fptr         ជាឈេμាះ  pointer   file ដើម្បីធ្វើជាឧទាហរណ៍ ។  ក្នុងជាក់ ស្ដែង,
យើងអាចជំនួស fptr ដោយឈេμាះណាផ្សេងទៀតក៏បាន ។
Statement Declaration មាន Syntax ដូចខាងក្រោម ៖

 FILE *fptr ;

 – FILE ជា Keyword ជានិច្ចជាកាលត្រូវតែមាន និងសរសេរជាអក្សរ ធំ។
– សញ្ញា * បញ្ជាក់ថា pointer ។

II.2). Open file for write or read : Syntax open file for write:
fptr = fopen (“filename” , “w” );

 Syntax open file  for read :

fptr = fopen (“filename” , “r” );

 ឧទាហរណ៍ៈ បើក file ថμីដើម្បី write data (ដោយ file មានឈេμាះ និង path)

fptr = fopen (“c:\\TC\\ EXAM.TXT”, “w”);

+  ប្រភេទ analysis file មានរាងដូចខាងក្រោម ៖
–  ចំពោះ text file :

“r”     :  បើក file ដែលមានស្រាប់សំរាប់ read (“read only”) ។
“w”   : បើក file ថμីដើម្បី write (“write only”), បើឈេμាះ file ដូចឈេμាះ file ចាស់នោះ file ចាស់ត្រូវបានលប់ចោល ។
“a”    :  បើក file ដែលមានស្រាប់សំរាប់ write ថែមទិន្នន័យ ។
“r+”  :  បើក file ដែលមានស្រាប់សំរាប់ read និង write ។
“w+” :  បើក file ថμីដើម្បី write និង read
“a+” :  បើក file ដែលមានស្រាប់សំរាប់ read និង write ថែមទិន្នន័យឭ
– ចំពោះ binary file : “rb”  : បើក binary file ដែលមានស្រាប់សំរាប់ read, “read only,binary file”.
“ wb”: បើក binary file ថμីដើម្បី write, “writing only, binary file”
“ab”  :  បើក binary file ដែលមានស្រាប់សំរាប់ write data ថែម “r+b” : បើក binary file ដែលមានស្រាប់សំរាប់ read និង write “w+b”: បើក binary file ថμីសំរាប់ read និង write

“a+b” :  បើក binary file ដែលមានស្រាប់ដើម្បី write ថែមទិន្នន័យថμី

II.3). Read file និង Write file ក្នុងជំហ៊ាននេះមានភាព ខុសគ្នា រវាងបណ្ដាប្រភេទរបស់   file   និងប្រភេទ  analysis   file ។ដូច្នេះយើងត្រូវ សិក្សាក្នុងឧទាហរណ៍ជាមួយបណ្ដា function write, read ។

II.4). Close file: Close file ជាការងារចុងក្រោយគេបង្អស់ក្នុងការ analysis file ។ មានរាង ៖

fclose (fptr);
# include <stdio.h>

main ( )

{FILE *fptr;

fptr = fopen (“sample.dat”, “w”);

if (fptr = = NULL) printf (“\n ERROR – Cannot open”);

else      { … /* analysis file */; … fclose (fptr);

}

}

 III. Binary file :

III.1)    ក្រោយពីបើក file ថμីជាមួយ  analysis file “w”(writing), ដំបូងនោះ file ទទេ ព្រោះមិនទាន់ មានធាតុណាទាំងអស់, ពេលនោះ pointer file នឹង point to ចុង file គឺ (EOF)  ខាងក្រោយនេះ ជា ឧទាហរណ៍ បង្កើត file មាន 1០០ ធាតុ ដែលមានតំលៃពី 1 ដល់ 1០០ ។

ឧទាហរណ៍ ៖  បង្កើត file នៃចំនួនគត់ ៖

# include <stdio.h>
# include <conio.h>
main ( )
{  char filename[21];

int i;

long num; FILE *f1;

printf (“\n Name file:”);   scanf (“%20s”, &filename);

f1 = fopen (filename, “wb”);   /*open file for writing only */

/* write 100 number into file */

for ( i = 1; i <= 100; i ++)

fwrite (&i, sizeof (int), 1, f1);

fclose(f1);

}

Note:  fwrite (&i, sizeof (int), 1, f1);

–     Function  នេះមានសកមμភាព  writedataទៅក្នុងfile(file  write)  មានបណ្ដា  parameters

ដូចខាងក្រោម
+  &i: address of  Variable i
+  ទំហំរបស់ data ដែលត្រូវ write ទៅក្នុង file
+  Address of  file
+  ចុងក្រោយគឺ pointer of file
–  fwrite អនុញ្ញាត្ដិអោយ write data ជាច្រើនដែលមានទំហំប៉ុនគ្នា, ទៅក្នុង file បាន ។
+  fopen ( ): អាចមានតំលៃសេμី NULL, ក្នុងករណីមានកំហុសដូចជា disk full  ។

Ex: printf (“Name file:”);  scanf (“%20s”, filename);

f1 = fopen (filename, “wb”);

យើងអាចជំនួសដោយ statement:

f1 = fopen (“Integer.Dat”, “wb”);

 III.2) Read binary file: ដើម្បី Read ធាតុណាមួយរបស់ file ត្រូវមានលក្ខ័ខ័ណៈ តើ file នោះនៅមានធាតុសំរាប់ Read ឬអត់ ?

(pointer  Æ EOF) ។ Function feof ( ) នឹងប្រាប់អោយដឹងៈ បើ Read ដល់ចុង file នោះ feof ( ) =

True ផ្ទុយទៅវិញ feof ()= False ។
វិធានដើម្បី Read file មួយយើងប្រើ ៖

ពេល Read file, ត្រូវ Read ធាតុ file ជាមុនទើបត្រួតពិនិត្យមើល តើធាតុនោះជា EOF ឬអត់ ?

if ((ch = getc (fp)) != EOF)…

ក្នុងនោះ function getc (fp) ជា function Read 1 character ឬ 1 byte របស់ file

ដែលមាន  pointer  fileគឺ  fp។  statement  នេះមានន័យថា  Read  1  character  ពី  file  fp និងពិនិត្យមើលតំលៃរបស់វាសេμី  EOF   ឬ  អត់ ? ឬប្រើ Loop   while ដើម្បីត្រួតពិនិត្យ គ្រប់ធាតុ ទាំងអស់របស់ file ដែលយើង Read . while ((ch = getc (fp)) != EOF) …

នោះនឹង Read ធាតុទាំងអស់របស់ file រហូតដល់ EOF ទើបឈប់ ។

Ex: Read file of integer number :
#include <stdio.h>
main ( )
{     char filename[21];

int  i;

FILE  *f1;

printf (“”\n Name file:”);  scanf (“%20s”, &filename);

f1 = open (filename, “rb”);

while (fread (&i, sizeof (int), 1, f1),  !feof (f1))

printf (“\n%d”, i);

fclose (f1);

}

Note:  Statement

while (fread(&i, sizeof(int),1, f1),!feof(f1))

printf(“\n%d”, i);

អនុវត្ដន៍ការ Read តំលៃ i, ក្រោយមកត្រួតពិិនិត្យមើ់ល EOF ហើយឬនៅ ។

syntax:

while (Expression 1, Expression2) <Actions>;

សមមូលនឹង

do   {  Expression 1;

if (Expression2)  <Action>;

} while (Expression2);

ដូច្នេះក្នុងកមμវិធីខាងលើអាចសរសេរដូចខាងក្រោម ៖

do {     fread (&i, sizeof (int), 1, f1);

if (!feof (f1))

printf (“\n%d”, i);

} while (!feof (f1));

–  ឬ បើយើងដឹងចំនួនធាតុជាមុន នោះយើងសរសេរ

for ( i = 1; i <= 100; i++)

fread (&i, sizeof (int), 1, f1);

–  កុំភ្លេច open file data ប្រភេទ binary “rb” ។

* ឥឡូវយើងធ្វើឧទាហរណ៍ជាក់ស្ដែង: ឧបមាថាមាន file INTEGER.Dat ផ្ទុកចំនួនពី1 ដល់1០០។ យើង Read ធាតុទី1និងទី3នៃ file ខាងលើហើយតាងអោយ Variable A,B។ Exam: Read 3ចំនួនគត់:#include<stedio.h>

#include<conio.h>

main( )

{  int A,B; long num; FILE *f1;

f1=fopen(“Integer.DAT”,”rb”); fread (&A, sizeof (int),1,f1); fread (&B, sizeof (int),1,f1); fread (&B, sizeof (int),1,f1); printf (“\n A=%d”,A);

printf (“\n B=%d”,B);

fclose (f1); getgh( ); return 0;

}

Example: Copy ពី file នៃចំនួនគត់ទៅ file ផ្សេងទៀត។ កមμវិធីសរសេរក្រោមរាង Function:

Ex: copy file of integer:

#include < stdio.h>

#include < conio.h>

main( )

{ char filename1 [21];

char filename2 [21];

int i;

FILE  *f1,*f2;

printf (“Name file source:”); scanf (“%20s”,&filename1);

f1=fopen (filename1,”rb”);

prinf (“Name file destination :”); scanf (“%20s”,&filename2);

f2=fopen (filename2, “wb”);

while (fread(&i, sizeof(int),1,f1),! feof (f1))

{

fwrite (&i, sizeof(int),1,f2);

}

f close (f1); f close (f2); return 0;

}

 III.3/ write-read file ដែលមាន Data ប្រភេទ struct :

Example: បង្កើត file ដែលមានទិន្នន័យជា struct:

#include<stdio.h>

#include<conio.h>

#include<string.h>

#define TRUE 1

char ss[80];

typedef struct {

int day;

int month;

int year;

}   date;

typedef struct {

char name[80] ;

int homenum;

char street[80] ;

char city[30] ;

float salary;

date dob;

}  person;

person read_screen (person poeple);

FILE *fpt;

main( )

{int flag = TRUE;

person poeple;

fpt = fopen (“LIST.DAT”,”wb”);

person. salary = 0;

while (flag)

{     printf (“\n Name:”); gets (people. name);

if (people. name[0]= = ‘\0’)

break;

people = read_screen(people);

fwrite (&people, sizeof (person),1,fpt);

}

fclose (fpt);

}

*/ ——————- */

person read_screen (person  people)

{  printf (“Enter day/ month/ year : ”);

scanf     (“%d%d%d”,    &people.dob.day,           &people.dob.month,

&people.dob.year);

printf (“Home number : ”); scanf (“%d”, &people.homenum);

gets (ss); /* or while (getch ( ) ! = ‘\n’); */

printf (“City : ”);

gets (people.city);

printf (“Street : ”).

gets (people.street);

printf (“Salary :”); scanf (“%f”, &people.salary);

gets (ss);

return (people);

}

Exam: read data from file struct :

មុននឹង  read  file  of  struct  យើងត្រូវដឹង  struct  នោះជាមុនៈ  មាន  field  ណាខ្លះ  ? ប្រភេទទិន្នន័យរបស់ field នីមួយៗ …

# include <stdio.h>

# include <conio.h>

# include <string.h>

#define TRUE 1

typedef struct {  int day;

int month;

int  year;

}  date;

typedef struct {  char name[80]; int homenum; char street[80]; char city[30]; float salary; date dob;

}  person; void write_screen (person); FILE  *fpt;

main ( )

{  person people;

fpt = fopen (“LIST.DAT”, “rb”);

while (fread (&people, sizeof(person), 1, fpt), !feof (fpt))

{     write_screen (people);

}

fclose (fpt);

return 0;

}

void write_screen (person people)

{     printf (“Name :%s \n”, people.name);

printf   (“Date of  birth   :%2d/    %2d/    %2d     \n”, people.dob.day,people.dob.month,

people.dob.year);

printf (“Home number :%d \n”, people homenum);

printf (“Street :%s \n”, people.street);

printf (“City :%s \n”, people.city);

printf (“Salary :%8.2 f\n\n”, people.salary);

}

Note:   ក្នុងឧទាហណ៍ខាងលើ, យើងគប្បីចំណាំការ Declaration និង open file ដើម្បី read ជាមួយ

“rb”, និង open file ដើម្បី write ជាមួយ “wb” ។

IV. Access ដោយផ្ទាល់ទៅធាតុរបស់ file binary :

ក្នុង C ដើម្បី access ដោយផ្ទាល់ទៅធាតុណាមួយរបស់ file យើងប្រើ fseek :

fseek (fptr, No*sizeof(one_record), SEEK_SET);

Note:


 +  fptr: ជា pointer file, វាអាចមានឈេμាះផ្សេងៗ …
+  No:  ជាទីតាំងនៃលេខរៀងរបស់ធាតុក្នុង file ។ (ធាតុទីមួយរបស់ file មានលេខរៀង (index) សេμី 0) តែពេលយើងប្រើគឺ ចាប់ ផ្ដើមពីលេខ ១ ។

+  sizeof(onerecord), ច្រើនតែអនុវត្ដន៍ដោយ function sizeof ( ) ។ ដូច្នេះកន្សោម ៖

No *sizeof(onerecord) ;

+ parameter ចុងក្រោយក្នុង statement មាន៣ ករណីៈ

SEEK_SET (ឬ 0)  រំកិលគណនាទីតាំង access ចាប់ពីដើម file

SEEK_CUR (ឬ 1) រំកិលគណនាពីទីតាំង current pointer file ទៅចុង file ។
SEEK_END (ឬ 2) រំកិលគណនាពីចុង file មកវិញ

* យើងនិងស្រាវជ្រាវការ Access ដោយផ្ទាល់ទៅក្នុង file

+  Read data from Keyboard  និង create new

+  Read again data from file.

+  Update, data …

Ex:    Access ដោយផ្ទាល់, file ដើម្បី Read : ឧបមាយើងមាន file  នៃបណ្ដាចំនួនគត់ នឹងចង់

access ដោយផ្ទាល់ដើម្បី Read  ធាតុទី No :

# include <stdio.h>

#include <conio.h>

main  ( )

{  char filename[21];

int n;

int No;

FILE *f1;

printf (“ Name file:”);  scanf (“ %20s” , filename);

f1 = fopen (filename, “ r” );

while (printf (“No :”),scantf (“ %d”,&No)

{fseek (f1, size(int) *(No-1), SEEK_SET);

fread (&n, sizeof (int), 1, f1);

printf (“ Value find is : %d \n”, n);

}

fclose(f1); getch();

}

Note: ឧទាហរណ៍ខាងលើអនុញ្ញាតិអោយយើង Read ដោយផ្ទាល់ Value នៃធាតុណាមួយក្នុង file ។

Ex:  access ដោយផ្ទាល់ដើម្បី update data:

# include <stdio.h>

#include <conio.h>

main  ( )

{  char filename[21];

int n;

long num;

FILE *f1;

printf (“ Name file :” ); scanf (“ %20s”,filename)

f1 = fopen (filename,” w”);

while (printf (“No :”), scanf(“ %d”, &num),num)

 

{printf (“value update:” );  scanf (“ %d”, &n); fseek (f1,sizeof (int)*(num –1), SEEK_SET); fwrite (&n, sizeof (int), 1,f1);

}

fclose(f1);

}

Ex:  access ដោយផ្ទាល់ : write និង read:

# include <stdio.h>

#include <conio.h>

int main (vod)

{  FILE *strem;

char msg[ ] = “ this is a program for example !”;

char buf[20];

if ((stream = fopen  (“ DUMMY.FIL”, “w+” )) == NULL)

{  fprintf (stderr, “cannot open output file.\n”);

return 1;

}

fwrite (msg,strlen (msg) +1, 1, stream);

fseek (streem, SEEK_SET, 0);

fread (buf,strlen(msg) +1, 1, stream);

printf (“ %s\n”, buf);

fclose (stream);

return 0;

}

 Ex:  update file struct ខាងលើៈ (file LIST.DAT) :

# include <stdio.h>

#include <conio.h>

# define TRUE 1

typedef struct   { int day;

int month;

int year;

}  date;

typedef struct   { char name[80];

int homenum;

char street[80];

char city[30];

float salary;

}  person;

void write_screen (person);

FILE *fpt;

main ( )

{  person  people;

 

int No;

long size, pos;

fpt = fopen (“LIST.DAT”, “rb”);

fseek (fpt, 0, SEEK_END);

size = ftell(fpt);

printf (“No :”); scanf (“%d”, &No);

pos = No *sizeof (person);

if (No < 0 || pos > size)

printf (“\nHave no record in file”);

else

{  fseek (fpt, pos –1, 0);

fread (&people, sizeof (person), 1, fpt);

write_screen (people);

}

}

void write_screen (person people) {dUcxagelI}

 IV.1. Text Files :

បណ្ដាធាតុរបស់ Text file គឺជាបណ្ដា characters, string, text  ។

បណ្ដា Function write ទៅក្នុង text file :

putc (ch, fptr); write 1 character ទៅក្នុង text file

fputs (str, fptr); write string ទៅក្នុង text file

fprintf (fptr,…); សមមូល printf ( )

Ex:  write string នៃបណ្ដា អក្សរធំទៅក្នុង file:

កមμវិធីនេះ Read 1 បន្ទាត់ character ពី keyboard និង write ទៅក្នុង text file:

# include <stdio.h>

main ( )

{  FILE *fpt;

char c;

fpt = fopen (“c:\\tc\\sample.Dat”, “w”);

do {  putc (toupper (c = getchar ( ) ), fpt);

}  while (c! = ‘\n’);

fclose (fpt);

}

ª ចំណាំ  នេះជា Function គណនា text file. ។ Statement putc ប្រាប់អោយយើងដឹងថានេះជា

file text ។ ជា statement write 1 character ទៅក្នុង text file ។

ªStatement openfile :

fpt = fopen (“c:\\tc\\sample.dat”, “w”);

 IV.2.Read data from text file : ដើម្បីបើក file text :

fopen (…, “r”);

ចំណាំ ៖ “r” មានន័យថា Read only

Read data from text file :

ការ Read បណ្ដាធាតុពី file ក្រោយពីបើក file ហើយ ៖

getc (fptr); Read charater form text file

fgets (str, fptr); Read string str ពី text file fptr ។

fscanf ( ); Read បណ្ដា Value ពី text file, សមមូល scanf ( );

# include <stdio.h>

main ( )

{  FILE *fpt;

char c;

if ((fpt = fopen (“C:\\TC\\sample.DAT”, “r”)) == NULL)

printf (“\a\n Erro, Cannot open file”)

else

do { putchar (c = getc (fpt));

}  while (c! = ‘\n’);

fclose (fpt);

}
C C++

IV.3.  លំហាត់អនុវត្ដ ៖

ឧទាហរណ៍ខាងក្រោមអធិប្បាយពីការ write និង Read បណ្ដា Record ទៅក្នុង text file ។

# include <stdio.h>

# include <conio.h>

# include <string.h>

# define TRUE 1

typedef  struct  {  int day;

int month;

int year;

}  date;

typedef struct   {  char name[80]; int homenum; char street[80]; char city[30]; float salary; date dob;

}  person;

person read_screen (person people); void write_file (person people); FILE *fpt;

char ss[80];

main ( )

{  person people;

int flag = TRUE;

fpt = fopen (“LIST.DAT”, “w”);

people.salary = 0;

while (flag)

{  printf (“\n Name:”); gets (people.name);

if (people.name[0] == ‘\0’)

break;

people = read_screen (people);

write_file (people);

}

fclose (fpt);

}

person read_screen (person  people)

{  printf (“Enter day /month/ year:”);

scanf         (“%d%d%d”,         &people.dob.day,         &people.dob.month,

&people.dob.year) ;

printf (“home number :”);

scanf (“%d”, &people.homenum);

gets (ss);      /* or while (getchar ( ) != ‘\n’);

printf (“street:”); gets (people.street); printf (“city:”);  gets (people.city); printf (“salary:”);

scanf (“%f”, &people.salary);

gets (ss);

return (people);  }

void write_file (person people).

{  fprintf      (fpt,      “%d%d%d\n”,      people.dob.day,      people.dob.month,

people.dob.year);

fprintf (fpt, “%d\n”, people.homneum);

fprintf (fpt, “%s\n”, people.street);

fprintf (fpt, “%s\n”, people.city);

fprintf (fpt, “%f\n”, people.salary);

}

IV.4.  បណ្ដាឧទាហរណ៍គណនា text :

ក្នុងផ្នែកនេះយើងសិក្សាពីបណ្ដាឧទាហរណ៍គណនា file text ដូចជា copy file, រាប់ចំនួនបន្ទាត់ទៅក្នុង

text file :

Ex: រាប់ចំនួនបន្ទាត់ទៅក្នុង text file:

# define EOF –1

# define EOL 0x0A     /* or ‘\n’ */

int ch, count;

ch = getch ( ); count = 0;

while (ch != EOF)

{  while (ch != EOL) ch = getchar ( );

count ++;

ch = gatchar ( );

}

ឬសរសេរម្យ៉ាងទៀតខ្លីជាង ៖

# define EOF   –1

# define EOL 0x0A     /* or ‘\n’ */

int ch, count = 0;

ch = getchar ( );

while ((ch = getchar ( )) != EOF)

while ((ch = getchar ( )) != EOL)

cout ++;

Ex:  រាប់ចំនួន character ឬ គណនាទំហំរបស ់ file :

ចូររាប់មើលក្នុង file មួយមានផ្ទុកប៉ុនμាន character ?

# include <stdio.h>

# include <conio.h>

# include < stdlib.h>

main (int argc, char  *argv[ ])

{  int ch;

char filename[20]; FILE *fp;

long count = 0;

printf (“\n Name file :”);  scanf (“%s”,&filename);

fp = fopen (filename, “r”);

while ((ch = getc(fp)) != EOF)

 

{  putc (ch, stdout);         /*Display character on screen);

count ++;

}

fclose (fp);

printf (“file %s have got %ld character.”, filename, count);

return 0;

}

Note:

+ កមμវិធីខាងលើអនុវត្ដន៍តែចំពោះ text file ដែលផ្ទុក character ក្នុងតារាង code ASCII ។

+  ចំនួន character ដែល Display on screen តិចជាងចំនួន byte ជាក់ស្ដែងរបស់ file ។ ព្រោះ

Function getc ( ) មិនរាប់ character, ដើមបន្ទាត់ ‘\r’ ។  function getc ( ) ចាត់ទុក character

‘\r’ និង ‘\n’ តែមួយ character ប៉ុណ្ណោះ ។

ដូច្នេះដើម្បីរាប់អោយត្រឹមត្រូវចំនួន byte ក្នុង file, នោះយើងត្រូវ openfile ដើម្បី Read ជា “rb”:

if ((fp = fopen (argv[1], “rb”)) == NULL)

ពេលនោះ  function  getc  (  )  នឹងមិនបែងចែក  character  ទៀតវាគណនាគ្រប់  character

ទាំងអស់និងរាប់ ចំនួន byte ទាំងអស់ក្នុង file ។

VI. បណ្ដា function គណនា  file របស់ turbo C:

frewind( ): នាំ cursor file ទៅទីតាំងនៃធាតុដំបូងរបស់ file

Ex:      ខាងក្រោមនឹង  Display      ឡើងវិញ  អត្ថន័យរបស់  file   ដែលទើបនឹងបង្កើតឡើង  ។

ដើម្បីធ្វើការងារនេះ ដំបូងត្រូវនាំ cursor file ទៅទីតាំងនៃធាតុតំបូង, បន្ទាប់មកប្រើ function fgets ( )

ដើម្បី Read ឡើងវិញបណ្ដា តំលៃរបស់ file ។

# include <stdio.h>

# include <stdlib.h>

# include < conio.h>

# include <string.h>

main ( )

{  char str[80];

FILE *fp;

if ((fp = fopen (“TEST”, “w+”)) == NULL)

{  printf (“Cannot open file .\n”);

exit (1);

}

do {  printf (“Enter string:”); gets(str);

strcat (str, ‘\n’);                /* add new line */

 

fputs (str, fp);

}  while (*str != ‘\n’);

/* Now Read And Display Data of  file */

frewind (fp);

while (!feof (fp))

{ fgets (str, 79, fp);

printf (str);

}

getch ( );
return 0;

}

+ ferror ( ):

Function ferror ( ) កំណត់ការគណនា file មានកំហុស ឬអត់ ?

– ផ្ដល់តំលៃ TRUE បើមាន error

– ផ្ដល់តំលៃ FALSE បើគμាន error

យើងគប្បីប្រើ ferror ( ) ក្រោយពី statement គណនា file :

–  ch = getc (fp);

if (ferror (fp))…

–  putc (ch,fp);

if (ferror(fp))…

+ remove ( ):

Function remove ( ) នឹង delete file ចេញពី disk ។

fflush (stdin) ;

+  fflush ( ): ប្រើសំរាប់ clear stdin

 VII.  បញ្ជូន parameter ជា   file ទៅអោយ  function :

Ex:  copy file ពីរៈ

# include <stdio.h>

main  (int argc, char  *argv[ ])

{  FILE  *fp;

void filecopy (FILE  *, FILE  *);

if (argc == 1)

filecopy (stdin, stdout);

else

while  ( — argc > 0)

if ((fp = open (* ++ argv, “r”)) == NULL)

{  printf (“Cannot open %s \n”, *argv);

return 1;

}  else  {     filecopy (fp, stdout);

fclose (fp);

}

return 0;

}

void filecopy (FILE  *fpi, FILE  *fpo)

{  int c;

while ((c = getc (fpi)) != EOF)

}

 

យើងអាចសរសេរដោយរបៀបម្យ៉ាងទៀតគឺ ៖

# include <stdio.h>

# include <stdlib.h>

main (int argc, char *argv[ ])

{  FILE *in, *out;

char ch;

if (argc != 3)     { printf (“\n fore got namefile:”);

exit (1);

}

if  ((in = fopen (argv[1], “rb”)) == NULL)

{  printf (“Cannot open source file \n”);

exit (1);

}

if ((out = fopen (argv[2], “wb”)) == NULL)

{    printf (“cannot open destination file.\n”);

exit (1);

}

while (!feof (in))  { ch = getc (in);

if (!feof (in)) putc(ch,out);

}

fclose (in);

fclose (out); gatch ( );

return 0;

}

# include <stdio.h>

# include <stdlib.h>

main (int argc, char *argv[ ])

{  int ch;

FILE *fp;

long count = 0;

if (argc != 2)     {  printf (“use :%s name file, argv[0]);

exit (1);

}

if ((fp = fopen (argv[1], “r”)) == NULL)

{  printf (“Cannot open %s”, argv[1]);

exit (1);

}

while ((ch = getc(fp) != EOF)

{ putc (ch, stdout);

count ++;

}

fclose (fp);

printf (“file% have %ld charaacter”, argv[1], count);

return 0;

}

 

សំនួរ

 1).  តើអាចប្រើ Function gets (fp,…) ដើម្បី Read បណ្ដាចំនួនគត់ក្នុង file F: int *F ?

2).  អាចប្រើកមμវិធី text Editor ដើម្បីមើលអត្ថន័យបណ្ដា file int *F, float *F មានឬអត់ ? ព្រោះអ្វី?
3).  command TYPE, PRINT របស់ Dos អនុវត្ដន៍ជាមួយ file ប្រភេទណា ?

 

លំហាត់

 1).  សរសេរកមμវិធី create file F3, ផ្ទុកបណ្ដាចំនួនគត់, ដោយរបៀបភ្ជាប់ 2 file នៃចំនួនគត់ F1 និង F2ជាមួយគ្នា ។

2).  សរសេរកមμវិធីរាប់ចំនួន character ក្នុង text File មួយឈេμាះ F ។

3).  គូសឬសរសេរកមμវិធីបង្កើត file នៃចំនួនមួយ, ដោយ Read បណ្ដាចំនួនគត់ពី text File មួយទៀត ។

បន្ទាត់ នីមួយៗរបស់ text file អាចមានផ្ទុក ឬគμានផ្ទុក ចំនួនគត់, ឬមានផ្ទុកបណ្ដាចំនួនគត់មួយចំនួន ។

5).   សរសេរកមμវិធីបង្កើត  text file ផ្ទុកឈេμាះ,  អាយុ, អាស្រ័យដ្ឋាន របស់អ្នក ។ ក្រោយមកកមμវិធីនឹង

Read file នេះឡើងវិញដើម្បី print ទៅ printer អត្ថន័យខាងលើ (ដោយមនុស្សម្នាក់នៅលើបន្ទាត់តែ១)។

6).     ក្នុងពេល   open    file    ថμីយើងកំពុង open,   នោះ   file     ចាស់ត្រូវបានលប់ចោល        ។

ចូររកវិធានណាដើម្បីបើជួប   ករណី      នេះអោយវាប្រាប់យើងថា,fileនេះមានស្រាប់នៅលើ   Disk ហើយ,អ្នកក៏ចង់លុបវាចោល ដើម្បីបង្កើត ថμី ឬអត់ ?

7).  សរសេរកមμវិធីគណនាចំនួនបន្ទាត់ដែលមានក្នុង text file មួយ ។

8).  សរសេរកមμវិធី   Display    បណ្ដា  file    ទាំងអស់  ។    ក្រោយ មក យើងអាចលុប  file ណាមួយដែលយើងចង់លុប ។

9).   សរសេរកមμវិធីប្ដូរឈេμាះ file ។ មានន័យថា ត្រូវសរសេរ rename មាន Read parameter ។

10). ឧបមាមាន file text, ដែលបណ្ដាបន្ទាត់នីមួយផ្ទុកពី ១ដល់ ១០០ character ចូរសរសេរកមμវិធីបង្កើត

file ថμីមួយដែលបណ្ដាបន្ទាត់របស់វាផ្ទុកត្រូវ 100 character, បណ្ដា character Read from keyboard