c programming session 08

37
Slide 1 of 37 Ver. 1.0 Programming in C In this session, you will learn to: Read and write contents in a file Use random access in files Objectives

Upload: dushmanta-nath

Post on 16-Apr-2017

1.270 views

Category:

Education


0 download

TRANSCRIPT

Page 1: C programming session 08

Slide 1 of 37Ver. 1.0

Programming in C

In this session, you will learn to:Read and write contents in a fileUse random access in files

Objectives

Page 2: C programming session 08

Slide 2 of 37Ver. 1.0

Programming in CReading and Writing Contents in a File

File inputs-outputs is similar to input from/to the terminal.Files are treated as streams of characters.Function are available for single character as well as multiple character input-output from/to files.

Page 3: C programming session 08

Slide 3 of 37Ver. 1.0

Programming in COpening Files

A file needs to be opened to read or to write contents in it.The fopen() function is used to open a file.The fopen() function returns a pointer of the FILE type data.The fopen() function opens a file in a specific access mode.The various modes in which a file can be opened are:

r - Read-Only Modew - Write-Only Modea - Append Moder+ - Read + Write Modew+ - Write + Read Modea+ - Read + Append Mode

Page 4: C programming session 08

Slide 4 of 37Ver. 1.0

Programming in C

The FILE type pointer is:Returned when a file is opened by using the fopen() function.Used to manipulate a file.Used to check whether a file has opened successfully.

The stdin, stdout, and stderr FILE pointers refer to the standard input device (keyboard) and standard output and error device (VDU).

FILE Type Pointers

Page 5: C programming session 08

Slide 5 of 37Ver. 1.0

Programming in CThe exit() Function

The exit() Function:Is used to terminate a program execution.Is used as shown in the following code snippet:

if (argc ! = 3){

print (“invalid arguments \n”);exit ();

}

Page 6: C programming session 08

Slide 6 of 37Ver. 1.0

Programming in CCharacter Input-Output with Files

The functions used for character input-output with files are:fgetc(): Reads one character at a time from a file, assigns it to a character variable, and moves the file pointer to the next character. It returns an integer type of value.fputc(): Writes one character at a time in a file.

Page 7: C programming session 08

Slide 7 of 37Ver. 1.0

Programming in CClosing Files

The fclose() function is used to close files.Closing the file release the resources.The syntax of the fclose() function is:

fclose (ptr1);Where ptr1 is a FILE pointer.

Page 8: C programming session 08

Slide 8 of 37Ver. 1.0

Programming in CPractice: 6.1

1. What does the following code do?while((c = fgetc (fp)) != EOF) {if ((c >= ‘a’) && (c <= ‘z’))c -= 32;fputc(c, stdout); }

2. Write a program called append, which appends the contents of the first file to the second file specified on the command line. The program should also terminate in the following situations:a. 2 arguments are not specified on the command line. In this case,

the following message must be displayed:Usage: append file1 file2

b. In case the file to be read cannot be opened, the following message may be displayed:

Cannot open input file

Page 9: C programming session 08

Slide 9 of 37Ver. 1.0

Programming in C

Solution:

Microsoft Word Document

Practice: 6.1 (Contd.)

Page 10: C programming session 08

Slide 10 of 37Ver. 1.0

Programming in CPractice: 6.2

1. Point out the errors in the following code:a. /* this program creates the file emp.dat */

main() {FILE point;fopen(“w”, “emp.dat”);:fclose(emp.dat);}

b. /* this program reads the file emp.dat */main() {#include<stdio.h>file*ptr;ptr = fopen(emp.dat);:ptr= fclose();}

Page 11: C programming session 08

Slide 11 of 37Ver. 1.0

Programming in CPractice: 6.2 (Contd.)

2. Given the following statements of a C program:fopen(“man.txt”, “r”);fclose(fileptr);

What will the FILE declaration statement of this program be?3. Point out the error(s) in the following code:

#include<stdio.h>main() {char emp;FILE *pointer1;pointer1= fopen(“man1.txt”,”w”);while((inp = fgetc(pointer1)) != eof) {printf(“?%c”, inp);} }

Page 12: C programming session 08

Slide 12 of 37Ver. 1.0

Programming in CPractice: 6.2 (Contd.)

4. The copy command of DOS copies the contents of the first file named on the command line to the second file. Make appropriate changes to the file-copy program so that it works identical to the copy command.

Page 13: C programming session 08

Slide 13 of 37Ver. 1.0

Programming in C

Solution:

Microsoft Word Document

Practice: 6.2 (Contd.)

Page 14: C programming session 08

Slide 14 of 37Ver. 1.0

Programming in CLine Input and Output with Files

The functions used for line input and output with files are:fgets():

Is used to read number of specified characters from a stream.Reads number of characters specified – 1 characters.Has the following syntax:fgets(str, 181, ptr1);

Str – Character array for storing the string 181 – Length of the string to be read ptr1- FILE pointer

fputs():Is used to output number of specified characters to a stream.Has the following syntax:fputs(str, ptr1);

Str – Character array to be written ptr1- FILE pointer

Page 15: C programming session 08

Slide 15 of 37Ver. 1.0

Programming in CPractice: 6.3

1. State whether True or False:Files created using the fputs() function will always have records of equal length.

2. Consider the following C statement to input a record from a file called number-list:fgets (line, MAXLEN, file_ind);

Given that MAXLEN is a #define and that all lines in the file number-list are 25 characters long what will the declaration statements for the parameters of fgets() be?

3. Assume that the file number_list contains the following records:1201305

Page 16: C programming session 08

Slide 16 of 37Ver. 1.0

Programming in CPractice: 6.3 (Contd.)

Given that the file has been opened and the first input statement executed is as follows:fgets(line, 3, file_ind);

Which of the following will the array called line contain?a. 1 followed by \0.b. 12 followed by \0.c. 120 followed by \0.

4. Match the following functions with the values they can return:a. fgets() 1. NULLb. fgetc() 2. EOFc. fopen() 3. FILE type pointer

Page 17: C programming session 08

Slide 17 of 37Ver. 1.0

Programming in CPractice: 6.3 (Contd.)

If a function can return more than one type of these values, state the conditions under which the values are returned.

5. A utility called hprint has to be written in C, which will allow a user to display, on screen, any number of lines from the beginning of any file. The user has to specify both the number of lines and the file name on the command line in the following format:

hprint number file-nameThe maximum line length is 80 characters. The program should handle possible errors.

Page 18: C programming session 08

Slide 18 of 37Ver. 1.0

Programming in C

Solution:1. False. fputs() writes the contents of a string onto a file. So

even if a string has size 100, but contains only 20 characters before a \0, only 20 characters get written.

2. The declarations are: #define MAXLEN 26/* macro definition outside main() */char line[26];

3. b. fgets() will read either 3 - 1 characters , i.e. 2 characters, or until it comes across a newline character. Since the newline occurs after the third character, it will read in 2 characters from the first record.

Practice: 6.3 (Contd.)

Page 19: C programming session 08

Slide 19 of 37Ver. 1.0

Programming in C

4. a. 1 b. 2 c. 1 and 3. (NULL in case file cannot be opened; FILE type

pointer in case of successful open) 5. The answer to this practice will be discussed in class. Work

out your solution.

Practice: 6.3 (Contd.)

Page 20: C programming session 08

Slide 20 of 37Ver. 1.0

Programming in CFormatted Input and Output with Files

The functions for formatted input and output with files are:fscanf():

Scans and formats input from a stream.Is similar to scanf().Has the following syntax:

int fscanf(FILE *Stream, const char *format[,address,..]);

fprintf():Sends formatted output to a stream.Is similar to printf().Has the following syntax:

int fprintf(FILE *Stream, const char *format[,address,..]);

Page 21: C programming session 08

Slide 21 of 37Ver. 1.0

Programming in CPractice: 6.4

1. Rewrite the following printf() statement using the function fprintf(): printf(“The test value is %d”, x);

2. The following statement is written to input 2 fields from the keyboard: scanf(“ %6s%d”, array, &num);It is rewritten as: fscanf(“%6s%d”, array, &num);This statement is erroneous. Give the correct fscanf() statement.

Page 22: C programming session 08

Slide 22 of 37Ver. 1.0

Programming in CPractice: 6.4 (Contd.)

3. Write the appropriate statements to input fields from a record of a file called alpha-doc, the first field being a float value, and the second field a string of size 10. In case the file does not have he required data, and the end-of-file occurs, the following message should be displayed: End of file encountered.

Page 23: C programming session 08

Slide 23 of 37Ver. 1.0

Programming in CPractice: 6.4 (Contd.)

4. A utility called format is required to create a formatted report from a file called manufact. This report is also to be stored on disk with suitable report headings. The name of the file to be created should be accepted during program execution. The program should also ask for a report title, which should appear after every 60 record of the file manufact.The file manufact contains the following 3 fields separated by space. Field Size Manufacturer Code 4 Name 20 Address 60In the output file, the fields should be separated by one tab character.

Page 24: C programming session 08

Slide 24 of 37Ver. 1.0

Programming in C

Solution:

Microsoft Word Document

Practice: 6.4 (Contd.)

Page 25: C programming session 08

Slide 25 of 37Ver. 1.0

Programming in CUsing Random Access in Files

A file can be accessed using sequential access or random access.In sequential access, the file is always accessed from the beginning.In random access the file can be accessed arbitrarily from any position.

Page 26: C programming session 08

Slide 26 of 37Ver. 1.0

Programming in CThe fseek () Function

The fseek() function:Is used for repositioning the current position on a file opened by the fopen() function.Has the following syntax:

rtn = fseek (file-pointer, offset, from-where);

Here:int rtn is the value returned by fseek()(0 if successful and 1 if unsuccessful).file-pointer is the pointer to the file.

offset is the number of bytes that the current position will shift on afile.

from-where is the position on the file from where the offset would be effective.

Page 27: C programming session 08

Slide 27 of 37Ver. 1.0

Programming in CThe rewind () Function

The rewind() function:Is used to reposition the current position to the beginning of a file.Is useful for reinitializing the current position on a file.Has the following syntax:rewind(file-pointer);

Here:file-pointer is the pointer returned by the function fopen().After rewind() is executed, current position is always 1, i.e. beginning of file.

Page 28: C programming session 08

Slide 28 of 37Ver. 1.0

Programming in CPractice: 6.5

1. Write the equivalent of the function rewind() using fseek().

2. Assume the following representation of the first 30 bytes of a file.

Page 29: C programming session 08

Slide 29 of 37Ver. 1.0

Programming in CPractice: 6.5 (Contd.)

What will the current position on the file be after the following instructions are performed in sequence?a. fp = fopen ("FOR DEMO.DAT", “r”);b. fseek(fp, 29L, 1);c. rewind(fp);d. fgets(buffer, 20L, fp);e. fseek(fp, 4L, 1);

Page 30: C programming session 08

Slide 30 of 37Ver. 1.0

Programming in C

Solution:1. fseek(fp, 0L, 0);2. The following current positions are relative to the beginning of

the file:a. 1b. 30c. 1d. 20e. 24

Practice: 6.5 (Contd.)

Page 31: C programming session 08

Slide 31 of 37Ver. 1.0

Programming in CPractice: 6.6

1. Write a function to update the field balance in the file SAVINGS.DAT based on the following information.If balance is Increment balance by< Rs 2000.00 Rs 150.50Between Rs. 2000.00 Rs 200.00and Rs 5000.00 <Rs 5000.00 Rs 300.40

The structure of the file SAVINGS.DAT is as follows.

Account number Account holder's name Balance(5 bytes) (20 bytes) (5 bytes)

Page 32: C programming session 08

Slide 32 of 37Ver. 1.0

Programming in C

Solution:

Microsoft Word Document

Practice: 6.6 (Contd.)

Page 33: C programming session 08

Slide 33 of 37Ver. 1.0

Programming in CPractice: 6.7

1. Go through the following program called inpcopy.c and its error listing on compilation and then correct the program:1 #include <stdio.h>2 main()3 {4 file fp;5 char c;6 7 fp = fopen(“file”, w);8 9 while (( c = fgetc(stdin)) != EOF)10 fputc(c,fp);1112 fclose(fp);13 }

Page 34: C programming session 08

Slide 34 of 37Ver. 1.0

Programming in CPractice: 6.7 (Contd.)

Error listing:

"inpcopy/.c", line 4: file undefined"inpcopy/.c". line 4: syntax error"inpcopy/.c", line 7: fp undefined"inpcopy/.c", line 7: w undefined"inpcopy/.c", line 7: learning: illegal

pointer/integer combination, op = "inpcopy/.c", line 9: c undefined

Page 35: C programming session 08

Slide 35 of 37Ver. 1.0

Programming in CPractice: 6.7 (Contd.)

Solution:1. Work out for your answer. The solution will be discussed in the

classroom session.

Page 36: C programming session 08

Slide 36 of 37Ver. 1.0

Programming in CSummary

In this session, you learned that:C treats file input-output in much the same way as input-output from/to the terminal.A file needs to be opened to read or to write contents in it.The fopen() function is used to open a file.C allows a number of modes in which a file can be opened.When a file is opened by using the fopen() function, it returns a pointer that has to be stored in a FILE type pointer.This FILE type pointer is used to manipulate a file.The exit() function is used to terminate program execution.The fgetc() and fputc() functions are used for character input-output in files.After completing the I/O operations on the file, it should be closed to releases the resources.

Page 37: C programming session 08

Slide 37 of 37Ver. 1.0

Programming in CSummary (Contd.)

The fclose() function is used to close a file.The fgets() and fputs() functions are used for string input-output in files.The fscanf() and fprintf() functions are used for formatted input-output in files.In sequential access, the file is always accessed from the beginning.In random access the file can be accessed arbitrarily from any position.C provides the fseek() function for random access.The function rewind() is used to reposition the current position to the beginning of a file.