Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction to Programming

Similar presentations


Presentation on theme: "Introduction to Programming"— Presentation transcript:

1 Introduction to Programming
Lecture 19

2 Random Access Files

3 Files open ( file_name , mode ) ; close ( ) ;

4 ifstream myFilePtr ; myFilePtr.open ( “myFile” , ios :: in ) ;

5 Output File Stream ios :: app ios :: trunc ios :: ate

6 Read/write a character
get ( ) Read a character put ( ) Write a character

7 Number of characters to read
getline(str,10, ‘\n’) ; Number of characters to read Delimiter Storage Requirements for Text and Binary Modes Storage Requirements for Text and Binary Modes for an Integer: for an Integer: Page 32 Page 32 The fwrite() Function The fwrite() Function size_t fwrite (void *ptr, size_t size, size_t nmemb, size_t fwrite (void *ptr, size_t size, size_t nmemb, FILE *fp); FILE *fp); fwrite() writes, from the address pointed to by ptr, fwrite() writes, from the address pointed to by ptr, up to nmemb elements whose size is specified by up to nmemb elements whose size is specified by size, to the file pointed by fp size, to the file pointed by fp fwrite() returns the number of elements fwrite() returns the number of elements successfully written, which will be less than nmemb successfully written, which will be less than nmemb only if a write error is encountered. only if a write error is encountered. double earnings[10]; double earnings[10]; fwrite(earnings,sizeof(double),10,fp); fwrite(earnings,sizeof(double),10,fp); 32 32 Page 33 Page 33 The fread() Function The fread() Function size_t fread(void *ptr, size_t size, size_t nmemb, size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp); FILE *fp); fread() reads, into the array pointed to by ptr, up to fread() reads, into the array pointed to by ptr, up to nmemb elements whose size is specified by size, nmemb elements whose size is specified by size, form the file pointed to by fp. form the file pointed to by fp. fread() returns the number of elements fread() returns the number of elements successfully read, which may be less than nmemb successfully read, which may be less than nmemb is a read error or end-of-file is encountered. is a read error or end-of-file is encountered. 33 33 Page 34 Page 34 Writing file data using block I/O functions Writing file data using block I/O functions #include <stdio.h> #include <stdio.h> typedef struct { typedef struct { char name[20]; char name[20]; int serial_code; int serial_code; int amount; int amount; float float cost; cost; } component; } component; main(void) main(void) { component comp_data; { component comp_data; FILE FILE *fp; *fp; char char filename[80]; filename[80]; int numofcomp; int numofcomp; int i; int i; printf("Enter the file name: "); printf("Enter the file name: "); gets(filename); gets(filename); 34 34 Page 35 Page 35 if ((fp = fopen(filename, "wb")) == NULL) { if ((fp = fopen(filename, "wb")) == NULL) { printf("can't open file \n"); printf("can't open file \n"); exit(1); exit(1); }printf("Enter the number of components: "); }printf("Enter the number of components: "); scanf("%d", &numofcomp); scanf("%d", &numofcomp); for (i=0; i<numofcomp; i++) { for (i=0; i<numofcomp; i++) { printf("Name of the component: "); printf("Name of the component: "); gets(comp_data.name); gets(comp_data.name); printf("Serial code of the component: "); printf("Serial code of the component: "); scanf("%d", &comp_data.serial_code); scanf("%d", &comp_data.serial_code); printf("Amount of the component: "); printf("Amount of the component: "); scanf("%d", &comp_data.amount); scanf("%d", &comp_data.amount); printf("Cost of each component: "); printf("Cost of each component: "); scanf("%f", &comp_data.cost); scanf("%f", &comp_data.cost); fwrite(&comp_data, sizeof(comp_data), 1, fp); fwrite(&comp_data, sizeof(comp_data), 1, fp); }fclose(fp); }fclose(fp); return 0; return 0; } } 35 35 Page 36 Page 36 12.5 Random Access 12.5 Random Access Random Access: fseek() and ftell() Random Access: fseek() and ftell() fseek, ftell: All the previous I/O functions do reading fseek, ftell: All the previous I/O functions do reading and writing sequentially, i.e. read the 1st datum, 2rd and writing sequentially, i.e. read the 1st datum, 2rd datum, 3rd datum ..., etc. datum, 3rd datum ..., etc. fseek fseek and and ftell ftell help doing help doing I/O in non-sequential manner, i.e. read the 10th I/O in non-sequential manner, i.e. read the 10th datum, then go back and read the 2nd datum. datum, then go back and read the 2nd datum. 36 36 Page 37 Page 37 File position pointer File position pointer The system keeps a file position pointer for The system keeps a file position pointer for each open file. each open file. It indicates the location in the file at It indicates the location in the file at which data will be read or written. which data will be read or written. file position marker file position marker ...... ...... Disk Disk 37 37 Page 38 Page 38 The fseek() Function The fseek() Function The function prototype of The function prototype of fseek() fseek() is is int fseek(FILE *fp, long int offset, int mode); int fseek(FILE *fp, long int offset, int mode); * * fseek() fseek() returns returns if OK, and if OK, and -1 -1 if there is an error. if there is an error. * * offset offset tells how far to move from the starting point tells how far to move from the starting point (depending on the mode). It can be +ve (move (depending on the mode). It can be +ve (move forward) or -ve (move backward) or 0. forward) or -ve (move backward) or 0. * * mode mode identifies the starting point. In stdio.h, the identifies the starting point. In stdio.h, the following constants can be assigned to mode: following constants can be assigned to mode: Mode Mode Measure offset from Measure offset from SEEK_SET SEEK_SET Beginning of file Beginning of file SEEK_CUR SEEK_CUR Current position Current position SEEK_END SEEK_END End of file End of file 38 38 Page 39 Page 39 The ftell() Function The ftell() Function The function prototype of The function prototype of ftell() ftell() is is long int ftell(FILE *fp); long int ftell(FILE *fp); returns the current file location. returns the current file location. The rewind() Function The rewind() Function The function prototype of The function prototype of rewind() rewind() is is void rewind(FILE *fp); void rewind(FILE *fp); Resets the file position marker to the beginning of Resets the file position marker to the beginning of the file. This is equivalent to the file. This is equivalent to fseek(fp, 0L, SEEK_SET); fseek(fp, 0L, SEEK_SET); 39 39 Page 40 Page 40 /* reverse.c - displays a file in reverse order */ /* reverse.c - displays a file in reverse order */ #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <stdlib.h> #define CNTL_Z '\032' #define CNTL_Z '\032' /* eof marker in DOS textfiles */ /* eof marker in DOS textfiles */ { int main(int argc, char *argv[]) { int main(int argc, char *argv[]) char ch; char ch; FILE *fp; FILE *fp; long count, last; long count, last; if ((fp=fopen(argv[1],"rb"))== NULL) { if ((fp=fopen(argv[1],"rb"))== NULL) { printf("reverse can't open %s\n", argv[1]); printf("reverse can't open %s\n", argv[1]); exit(1); exit(1); } } fseek(fp,0L, SEEK_END); fseek(fp,0L, SEEK_END); /* goto eof */ /* goto eof */ last=ftell(fp); last=ftell(fp); for (count=1L; count<=last; count++) { for (count=1L; count<=last; count++) { fseek(fp,-count,SEEK_END); fseek(fp,-count,SEEK_END); ch=getc(fp); ch=getc(fp); if (ch!=CNTL_Z && ch!= '\r') if (ch!=CNTL_Z && ch!= '\r') putchar(ch); putchar(ch); }fclose(fp); }fclose(fp); return(0); return(0); 40 40 } }

8 File Positions

9 File Position Pointer

10 myFile.tellg ( ) ; tellg ( ) Function
Returns a whole number which tell you the position of the next character to be read from the file

11 tellp ( ) Function myFile.tellp ( ) ;
Returns a whole number which tell you the position of the next character to be written in a file

12 For Positioning in the file
seekg ( ) ; seekp ( ) ;

13 filePtr.seekg ( long Num , ios :: origin ) ;
Number of characters to move to Starting point filePtr.seekg ( long Num , ios :: origin ) ;

14 seekg ( ) seekg ( 10L , ios :: beg ) ; seekg (10L , ios :: cur ) ;
seekg ( 10L , ios :: end ) ;

15 Example 1 #include<fstream.h> main ( ) { int length ;
ifstream inFile ( “myFile.txt” ) ; inFile.seekg ( 0L , ios :: end ) ; length = inFile.tellg ( ) ; }

16 File Name city Date-of-Birth : : : Jamil Ahmed Sukkur 10-10-1982 : : :
: : : Jamil Ahmed Sukkur : : : Rawalpindi

17 Merge Method Original file Empty file This is a text data And needs
To be replaced NOT

18 seekg ( ) seekg ( 2201L , ios :: beg ) ;

19 fstream myFile ( “Sample.txt” , ios :: in | ios :: out ) ;

20 OR Function A B Output

21 Example 2 This is an Apple This is a Sample

22 get ( ) and put ( ) character in a file
myInputFile.get ( c ) ; myOutputFile.put ( c ) ;

23 read ( ) and write ( ) Functions
Area in memory Number of bytes to be read read ( char *buff , int count ) ; write ( char *buff , int count ) ; Area in memory Number of bytes to be written

24 Example 3 char str [ 10000 ] ; myInputFile.read ( str , 10000 ) ;
myOuputFile.write ( str , ) ;

25 seekg ( ) seekg ( 0L , ios :: end ) ;

26 seekg ( ) seekg ( -1L , ios :: end ) ;

27 seekg ( ) seekg ( -2L , ios :: cur ) ;

28 myOutputFile.write ( &i , 4 ) ;
Address of the integer ‘i’ Number of bytes to be written myOutputFile.write ( &i , 4 ) ;

29 sizeof ( ) ;

30 myOutputFile.write ( &i , sizeof ( i ) ) ;
Address of the integer ‘i’ Size of integer myOutputFile.write ( &i , sizeof ( i ) ) ;

31 for ( i = 0 ; i < 100 ; i ++ ) { myOutputFile.write ( &i , sizeof ( i ) ) ; } myOutputFile.close ( ) ;


Download ppt "Introduction to Programming"

Similar presentations


Ads by Google