520 likes | 538 Views
11. C File Processing. 11.1 Introduction. Data files Can be created, updated, and processed by C programs Are used for permanent storage of large amounts of data Storage of data in variables and arrays is only temporary. 11.2 Data Hierarchy. Data Hierarchy: Bit – smallest data item
E N D
11 • C File Processing
11.1 Introduction • Data files • Can be created, updated, and processed by C programs • Are used for permanent storage of large amounts of data • Storage of data in variables and arrays is only temporary
11.2 Data Hierarchy • Data Hierarchy: • Bit – smallest data item • Value of 0 or 1 • Byte – 8 bits • Used to store a character • Decimal digits, letters, and special symbols • Field – group of characters conveying meaning • Example: your name • Record – group of related fields • Represented by a struct or a class • Example: In a payroll system, a record for a particular employee that contained his/her identification number, name, address, etc.
11.2 Data Hierarchy • Data Hierarchy (continued): • File – group of related records • Example: payroll file • Database – group of related files
11.3 Files and Streams • C views each file as a sequence of bytes • File ends with the end-of-file marker • Or, file ends at a specified byte • Stream created when a file is opened • Provide communication channel between files and programs • Opening a file returns a pointer to a FILE structure • Example file pointers: • stdin - standard input (keyboard) • stdout - standard output (screen) • stderr - standard error (screen)
11.3 Files and Streams • FILE structure • File descriptor • Index into operating system array called the open file table • File Control Block (FCB) • Found in every array element, system uses it to administer the file
11.3 Files and Streams • Read/Write functions in standard library • fgetc • Reads one character from a file • Takes a FILE pointer as an argument • fgetc( stdin )equivalent to getchar() • fputc • Writes one character to a file • Takes a FILE pointer and a character to write as an argument • fputc( 'a', stdout )equivalent to putchar( 'a' ) • fgets • Reads a line from a file • fputs • Writes a line to a file • fscanf / fprintf • File processing equivalents of scanf and printf
11.4 Creating a Sequential-Access File • C imposes no file structure • No notion of records in a file • Programmer must provide file structure • Creating a File • FILE *cfPtr; • Creates a FILE pointer called cfPtr • cfPtr = fopen(“clients.dat", “w”); • Function fopen returns a FILE pointer to file specified • Takes two arguments – file to open and file open mode • If open fails, NULL returned
11.4 Creating a Sequential-Access File • fprintf • Used to print to a file • Like printf, except first argument is a FILE pointer (pointer to the file you want to print in) • feof( FILE pointer ) • Returns true if end-of-file indicator (no more data to process) is set for the specified file • fclose(FILE pointer ) • Closes specified file • Performed automatically when program ends • Good practice to close files explicitly • Details • Programs may process no files, one file, or many files • Each file must have a unique name and should have its own pointer
Outline fig11_03.c (1 of 2 ) FILE pointer definition creates new file pointer fopen function opens a file; w argument means the file is opened for writing
Outline feof returns true when end of file is reached fprintf writes a string to a file fig11_03.c (2 of 2 ) fclose closes a file
Write a program read information of 10 students (id , name) to be save in a text file one student in a line
void main(){ int cnt=0, i; int id; char name[30]; FILE *fp; fp = fopen(“c:\\studentinfo.txt”, “w”); if(fp != NULL){ printf(“Enter: ID, NAME”); for(i=0; i<10; i++){ printf(“\nID: ”); scanf(“%d”, &id); printf(“\nName: “ ); gets(name); fprintf( fp, “%d %s\n”, id, name); } } else { printf(“the file cant be open”); } }
void main(){ int cnt=0, i; int id; char name[30]; FILE *fp; fp = fopen(“c:\\studentinfo.txt”, “w”); if(fp != NULL){ printf(“Enter: ID, NAME”); for(i=0; i<10; i++){ fprintf(stdout, “\nID: ”); fscanf(stdin, “%d”, &id); fprintf (stdout, “\nName: “ ); fgets(name, 30, stdin); fprintf( fp, “%d %s\n”, id, name); } } else { printf(“the file cant be open”); } }
Fig. 11.4|End-of-file key combinations for various popularoperating systems.
11.5 Reading Data from a Sequential-Access File • Reading a sequential access file • Create a FILE pointer, link it to the file to read cfPtr = fopen( “clients.dat", "r" ); • Use fscanf to read from the file • Like scanf, except first argument is a FILE pointer fscanf( cfPtr, "%d%s%f", &accounnt, name, &balance ); • Data read from beginning to end • File position pointer • Indicates number of next byte to be read / written • Not really a pointer, but an integer value (specifies byte location) • Also called byte offset • rewind( cfPtr ) • Repositions file position pointer to beginning of file (byte 0)
Outline fig11_07.c (1 of 2 ) fopen function opens a file; r argument means the file is opened for reading
Outline fscanf function reads a string from a file fig11_07.c (2 of 2 )
Outline fig11_08.c (1 of 4 )
Outline fig11_08.c (2 of 4 )
Outline fig11_08.c (3 of 4 )
Outline fig11_08.c (4 of 4 ) rewind function moves the file pointer back to the beginning of the file
11.5 Reading Data from a Sequential-Access File • Sequential access file • Cannot be modified without the risk of destroying other data • Fields can vary in size • Different representation in files and screen than internal representation • 1, 34, -890 are all ints, but have different sizes on disk
11.6 Random-Access Files • Random access files • Access individual records without searching through other records • Instant access to records in a file • Data can be inserted without destroying other data • Data previously stored can be updated or deleted without overwriting • Implemented using fixed length records • Sequential files do not have fixed length records
11.7 Creating a Random-Access File • Data in random access files • Unformatted (stored as "raw bytes") • All data of the same type (ints, for example) uses the same amount of memory • All records of the same type have a fixed length • Data not human readable
11.7 Creating a Random-Access File • Unformatted I/O functions • fwrite • Transfer bytes from a location in memory to a file • fread • Transfer bytes from a file to a location in memory • Example: fwrite( &number, sizeof( int ), 1, myPtr ); • &number – Location to transfer bytes from • sizeof( int ) – Number of bytes to transfer • 1 – For arrays, number of elements to transfer • In this case, "one element" of an array is being transferred • myPtr – File to transfer to or from
11.7 Creating a Random-Access File • Writing structs fwrite( &myObject, sizeof (struct myStruct), 1, myPtr ); • sizeof– returns size in bytes of object in parentheses • To write several array elements • Pointer to array as first argument • Number of elements to write as third argument
Outline fig11_11.c (1 of 2 )
Outline fopen function opens a file; wb argument means the file is opened for writing in binary mode fig11_11.c (2 of 2 ) fwrite transfers bytes into a random-access file
11.8 Writing Data Randomly to a Random-Access File • fseek • Sets file position pointer to a specific position • fseek(pointer, offset, symbolic_constant ); • pointer– pointer to file • offset– file position pointer (0 is first location) • symbolic_constant– specifies where in file we are reading from • SEEK_SET– seek starts at beginning of file • SEEK_CUR– seek starts at current location in file • SEEK_END– seek starts at end of file
Outline fig11_12.c (1 of 2 )
Outline fig11_12.c (2 of 2 ) fseek searches for a specific location in the random-access file
Fig. 11.14|File position pointer indicating an offset of 5 bytes fromthe beginning of the file.
11.9 Reading Data from a Random-Access File • fread • Reads a specified number of bytes from a file into memory fread( &client, sizeof (struct clientData), 1, myPtr ); • Can read several fixed-size array elements • Provide pointer to array • Indicate number of elements to read • To read multiple elements, specify in third argument
Outline fig11_15.c (1 of 2 )
Outline fig11_15.c (2 of 2 ) fread reads bytes from a random-access file to a location in memory
Outline fig11_16.c (1 of 10 )
Outline fig11_16.c (2 of 10 )
Outline fig11_16.c (3 of 10 ) Function textFile creates a text file containing all account data
Outline fig11_16.c (4 of 10 ) Function updateRecord changes the balance of a specified account
Outline fig11_16.c (5 of 10 )
Outline fig11_16.c (6 of 10 ) Function deleteRecord removes an existing account from the file
Outline fig11_16.c (7 of 10 )
Outline Function newRecord adds a new account to the file fig11_16.c (8 of 10 )