cseb114: principle of programming chapter 11: data files & file processing

22
CSEB114: Principle of programming Chapter 11: Data Files & File Processing

Upload: shonda-reed

Post on 05-Jan-2016

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

CSEB114: Principle of programming

Chapter 11: Data Files & File Processing

Page 2: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

Objectives

prepared by NI, edited by MAF

In this chapter, you will learn about Files and streams Creating a sequential access file Reading data from a sequential access file Using fgetc() and fputc() Using fgets() and fputs() Using fprintf() and fscanf() Using fopen() and fclose()

Page 3: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

Files and Streams

prepared by NI, edited by MAF

C views a file as a sequential stream of bytes. A file ends either with an EOF (end-of-file)

marker or at a specified byte number specified by the system.

When a file is opened, a stream is associated with a file.

Streams provide communication channels between files and the programs.

0 1 2 3 4 5 6 7 8 . . . . . n-1

Page 4: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

Files and Streams

prepared by NI, edited by MAF

In addition to providing access to a file, a stream can also be used to access devices.

For example, when a program (any program) is executed, 3 streams are automatically opened: standard input (stdin)

enable the program to read data from keyboard standard output (stdout)

enable the program to print data on the screen standard error (stderr)

enable program to print errors on the screen They are all manipulated using file pointers.

Page 5: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

Declaring a file

prepared by NI, edited by MAF

The standard library <stdio.h> provides some of the file manipulation function.

Declaring file:FILE *the_file;

States that thefile is a pointer to a file structure If there is more than one file, each file needs to

have its own FILE pointer. thefile is an internal file name used by the

program to refer to the external file name (the actual physical file stored on disk).

Page 6: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

File operation: fopen ()

prepared by NI, edited by MAF

Before we can process a file, we must either open or create it.

Syntax for fopen( ):internal_file_name = fopen(external_file_name, OpenMode);

The fopen() function takes 2 arguments: the file name and the file mode.

Page 7: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

File operation: fopen ()

prepared by NI, edited by MAF

Example:

thefile = fopen(“my_file.txt”,”r”);

This statement will try to open a file called “my_file.txt”.

my_file.txt is the external file name referring to a phisycal file on the disk.

If the file is to be placed in a different directory than the program directory, the full path need to be specified. For example: “D:/my_file.txt”

The function returns a pointer to the successfully opened file. But if the file cannot be opened, a NULL is returned.

Page 8: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

File OpenMode:

prepared by NI, edited by MAF

The following is the list of open mode that can be associated with fopen( ). “r” : to open existing file in input mode so data can be

read from it. The file to be opened must exist phisically on disk for this open mode to be successful.

“w” : the file is intended to be an output file and we are planning to write data to it.

“a” : to append data to the end of existing file. “r+” : to open existing file for update (both in input and

output mode). If the file already exist, the content is not destroy.

“w+” : destroy the file if already exist and open a new file for update.

“a+” : open file for update (adding data at the end of the file.

Page 9: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fopen( )

prepared by NI, edited by MAF

You could also ask the users to specify the name of the file s/he want to open.

Example:char filename[50];

printf("Enter file name: ");

gets(filename);

thefile = fopen(filename,"r");

The users must enter the full filename, including the extension (.txt, .doc etc) and path.

Page 10: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

File operation: fail fopen( )

prepared by NI, edited by MAF

If fopen( ) is returning a NULL value, this means that the fopen( ) has failed.

This is due to any of the following reasons: Opening a non-existing file for reading Opening a file for reading or writing without having

granted the appropriate access to the file by the operating system.

Opening a file for writing when no disk space is available.

Therefore, in our program, we need to write statements that would handle this failure.

Page 11: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fputc( )

prepared by NI, edited by MAF

fputc( ) is a function that would write a character value to the file.

Syntax: Using character variable, ch:

fputc(ch, internal_file_name); Example:

char m = ‘c’;fputc(m, theFile);

Using character constant:fputc(‘a’,internal_file_name);

Examplefputc(‘c’, theFile);

Page 12: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fputc() example

prepared by NI, edited by MAF

#include <stdio.h>int main(void){

char ch; FILE *thefile;if ((thefile = fopen("file_putc.txt","w")) == NULL){

printf("File fail to open\n");}else{

printf("Enter a character: ");scanf("%c", &ch);

fputc(ch, thefile);}fclose(thefile);return 0;}

Page 13: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fgetc( )

prepared by NI, edited by MAF

fgetc( ) is a function that would read a character from a file.

Syntax:variable = fgetc(internal_file_name);

Where: variable is a character variable to hold the value

returned by fgetc( ). Internal_file_name is the pointer to an open file.

Example:char c;

fgetc(theFile);

Page 14: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fgetc( ): Example

prepared by NI, edited by MAF

#include <stdio.h>int main(void){

char ch; FILE *thefile;

if ((thefile = fopen("file_getc.txt","r")) == NULL){

printf("File fail to open\n");}else{

ch = fgetc(thefile); /*read a character from the file */printf("%c\n",ch);/* print the value of ch to the screen */

}fclose(thefile);return 0;}

Page 15: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fprintf( )

prepared by NI, edited by MAF

fprintf( ) is a function that would print values to the file

Syntax:fprintf(internal_name, variable expression);

Example 1:fprintf(theFile, “This is an example”);

Example 2:char name[50] = “Ahmad”

fprintf(theFile, name);

Example 3:char name[50] = “Ahmad”;

fprintf(theFile, “My name is” name);

Page 16: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fprintf( ): Example

prepared by NI, edited by MAF

#include<stdio.h>int main(){

int i, power;

FILE *thefile;if((thefile = fopen("file_fprintf.txt","w"))==NULL)

printf("File could not be open\n");else{

for(i=1;i<=100;i++){power=i*i;fprintf(thefile,"%d\n",power);}

printf("End of operations");}fclose(thefile);return 0;}

Page 17: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fscanf( )

prepared by NI, edited by MAF

fscanf( ) is a function that read a value, or values of mix data type from a file.

Syntax:fscanf(internal_name,formatControl,

variableList);

Example:char name[50];

int age;

fscanf(theFile, “%s %d”, name, &age);

Page 18: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fscanf( ): Example

prepared by NI, edited by MAF

#include<stdio.h>void main(){

int i, bil, matrik;char grade[2];char name[10];FILE *thefile;

if((thefile = fopen("file_fscanf.txt","r")) == NULL)printf("File could not be open");else{

fscanf(thefile,"%d",&bil);printf("%-10s%-10s%s\n","Matrik","Name","Grade");for(i=0;i<bil;i++){

fscanf(thefile,"%d%s%s",&matrik,name,&grade);printf("%-10d%-10s%s\n",matrik,name,grade);

}fclose(thefile);

}}

Page 19: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fputs()

prepared by NI, edited by MAF

Writes the string to the file. The function begins outputting the string until

it reaches the terminating null character ('\0'). Syntaxfputs (string variable, internal name);

Example:char str [20] = “gummy bear”;fputs (str, theFile);

Page 20: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fputs( ): Example

prepared by NI, edited by MAF

#include<stdio.h>int main(){

char str[20]= "let's picnic!";FILE *thefile;

if((thefile = fopen("file_fputs.txt","w"))==NULL)printf("File could not be open\n");

elsefputs(str, thefile);

fclose(thefile);return 0;}

Page 21: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fgets( )

prepared by NI, edited by MAF

fgets( ) read a string of characters from a file.

Syntax:fgets(stringVariable, size, internal_name);

Example:char content[50];

fgets(content, 50, theFile);

fgets( ) will read size – 1 character from the file pointed by theFile, and saves the string into variable content.

Page 22: CSEB114: Principle of programming Chapter 11: Data Files & File Processing

fgets( ): Example

prepared by NI, edited by MAF

#include<stdio.h>int main(){

char str[30]= {'\0'};FILE *thefile;

if((thefile = fopen("file_fgets.txt","r"))==NULL)printf("File could not be open\n");

else{fgets(str, 30, thefile);puts(str);

}fclose(thefile);return 0;}