lecture 27: file input/output processing. 2 lecture contents: t input/output files t text files and...

73
Lecture 27: File Input/Output Processing

Upload: cameron-carr

Post on 18-Jan-2018

234 views

Category:

Documents


0 download

DESCRIPTION

3 File basics File definition: Collection of related information stored on a disk. t File may contain the source text of a C++ program. t File may contain data to be processed (input data file). t File may contain results generated by a program (output data file).

TRANSCRIPT

Page 1: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

Lecture 27: File Input/Output Processing

Page 2: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

2

Lecture Contents:

Input/Output files Text files and Binary files File access Standard Input/Output Demo programs Exercises

Page 3: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

3

File basics

File definition: Collection of related information stored on a disk.

File may contain the source text of a C++ program. File may contain data to be processed (input data

file). File may contain results generated by a program

(output data file).

Page 4: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

4

File classification

- Text mode files

- Binary mode files

Page 5: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

5

File classification

Text mode filesA named collection of characters saved on a disk having the

following structure:

<line1> nl <line2> nl … <linen> nl eof

The newline character nl(‘\n’) partitions a file or a stream into a sequence of lines/records. Each line/record is a sequence of characters. This is called logical partition.

The eof indicates the physical end of the file.

Page 6: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

6

File classification

Text mode filesA common way to store data in a text file is to place

each record on a single line with the fields separated by commas. This design is known as CSV format (Comma Separated Values).

Example:Barbara,1942Deborah,1940Julia,1945

Page 7: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

7

File classificationText mode files

An alternate design of text file is known as LSV format (Line Separated Values) where each field is placed on a single line.

Example:Barbara1942Deborah1940Julia1945

Page 8: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

8

File classification

Binary mode filesA file containing binary numbers that are the

computer’s internal representation of each file component.

Page 9: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

9

Input/Output stream

I/O stream – continuous sequence of character codes representing textual input(output) data.

I/O stream – sequence of characters for program input or for program output

C++ (supported by #include <iostream>)Standard input stream: cinStandard output stream: cout

C (supported by #include <stdio.h>)Standard file pointer for keyboard input: stdinSystem file pointer for screen output: stdout

Page 10: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

10

Input/Output stream

I/O stream – an abstraction intended to serveas a handle or

as a link, oras a connection, oras a binding between

the physically existing external file andthe program that intends to operate on it.

Page 11: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

11

Input/Output stream

Three activities must perform in order to implement effective I/O processing:

Open file. To establish connection btw stream defined in program and external file.

Read/Write data. Essential I/O processing.

Close file. To destroy connection established during file opening.

Page 12: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

12

No I/O statements in C. I/O based on run time functions

Open a file fopen( )================================================

Input/Output processing (reading/writing data) Text mode filesGeneral I/O streams: putc(), getc( )fputs( ), fgets( )fprintf( ), fscanf( )Standard I/O streams: putchar( ), getchar( )puts( ), gets( )printf( ), scanf( ) Binary mode filesfwrite( ), fread( )

================================================Close a file fclose( ), fcloseall( )

Page 13: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

13

No I/O statements in C++. I/O based on OO streams:

Before we can read or write an external file in a program, we must first declare a stream object for each stream/file to be processed by our program. Declarations #include <fstream>ifstream inf; ofstream outf;

involve two new data types:ifstream (input file stream) and ofstream (output file stream).

Once the stream objects have been declared, we can open the files:inf.open(“Test.txt”); outf.open(“Test1.txt”);

After the files are opened, real input/output activities may be processed.inf >> . . . ; outf << . . . ;

After all input/output is done, files must be closed:inf.close(); outf.close();

Page 14: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

14

No I/O statements in C++. I/O based on OO streams:

Before we can read or write an external file in a program, we must first declare a stream object for each stream/file to be processed by our program. Declarations

#include <fstream>ifstream inf; ofstream outf;

involve two new data types: ifstream (input file stream) and ofstream (output file stream).

Page 15: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

15

No I/O statements in C++. I/O based on OO streams:

Once the stream objects have been declared, we can open the files:

inf.open(“Test.txt”);

outf.open(“Test1.txt”);

Page 16: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

16

No I/O statements in C++. I/O based on OO streams:

After the files are opened, efective input/output activities may be processed.

inf >> . . . ; // extract from input stream

outf << . . . ; // insert into output stream

Page 17: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

17

No I/O statements in C++. I/O based on OO streams:

After all input/output is done, files must be closed:

inf.close();

outf.close();

Page 18: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

18

No I/O statements in C++. I/O based on OO streams:

fs.open(fname) Opens stream fs for input or output. Connects the stream fs to the external file fname.

fs.get(ch)Extracts the external char from input stream fs and places it into var ch

fs.put(ch)Inserts (writes or displays) char ch into stream fs. fs.close() Disconnects stream fs from associated external file. fs.eof() Tests for end-of-file condition on stream fs fs.fail() Returns true if an operation on stream fs, such as open

failed to execute properly.

Page 19: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

19

Demo programs illustrating different versions of end-of-file controlled loop reading characters from keyboard and copying them on the screen

// file probaf1.cpp#include <iostream>using namespace std;void main(){ char ch; while ( !cin.eof() ) { cin.get(ch); cout << "\n>>>>>>>>>>>> " << ch; }}

Page 20: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

20

Demo programs illustrating different versions of end-of-file controlled loop reading characters from keyboard and copying them on the screen

// file probaf2.cpp#include <iostream>using namespace std;void main(){ char ch; while ( cin ) { cin.get(ch); cout << "\n>>>>>>>>>>>> " << ch; }}

Page 21: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

21

Demo programs illustrating different versions of end-of-file controlled loop reading characters from keyboard and copying them on the screen

// file probaf3.cpp#include <iostream>using namespace std;void main(){ char ch; while ( cin.get(ch)!= 0 ) {

cout << "\n>>>> " << ch; }}

Page 22: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

22

Demo program how to create output file test.txt

// file probaf4.cpp#include <fstream>using namespace std;void main(){ char *t1 = "Sofia - Capital city of BULGARIA\n"; char *t2 = “Berlin - Capital city of GERMANY\n"; ofstream outf; outf.open("TEST.TXT", ios::out);  outf << t1; outf << t2;  outf.close();}

Page 23: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

23

Demo program illustrating how to read the same file “Test.txt” (created by demo probaf4.exe) using 3 different end-of-file controlled loops (same style as the first demo presented)

// file probaf5.cpp#include <fstream>using namespace std;void main(){ char ch; ifstream inf; inf.open(“TEST.TXT”, ios::in); while ( !inf.eof() ) {

inf.get(ch); cout << ch; } inf.close();}

Page 24: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

24

Demo program illustrating how to read the same file “Test.txt” (created by demo probaf4.exe) using 3 different end-of-file controlled loops (same style as the first demo presented)

// file probaf6.cpp // ‘ ‘ space serves as a separator#include <fstream>using namespace std;void main(){ char ch; char tin[80]; ifstream inf; inf.open(“TEST.TXT”, ios::in); while ( inf ) {

inf >> tin; cout << tin; } inf.close();}

Page 25: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

25

Demo program illustrating how to read the same file “Test.txt” (created by demo probaf4.exe) using 3 different end-of-file controlled loops (same style as the first demo presented)

// file probaf6a.cpp#include <fstream>#include <iostream>using namespace std;void main(){

char ch; char tin[80]; ifstream inf;inf.open("TEST.txt");while ( inf ){ // reading file line by line into C style stringinf.getline(tin,80,'\n');

cout << endl << tin;}inf.close();

}

Page 26: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

26

Demo program illustrating how to read the same file “Test.txt” (created by demo probaf4.exe) using 3 different end-of-file controlled loops (same style as the first demo presented)

// file probaf6b.cpp#include <fstream>#include <iostream>#include <string>using namespace std;void main(){

char ch; string tin; ifstream inf;inf.open("TEST.txt");while ( inf ){// reading file line by line into C++ STL style stringgetline(inf,tin,'\n');

cout << endl << tin;}inf.close();

}

Page 27: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

27

Demo program illustrating how to read the same file “Test.txt” (created by demo probaf4.exe) using 3 different end-of-file controlled loops (same style as the first demo presented)

// file probaf7.cpp#include <fstream>using namespace std;void main(){ char ch; char tin[80]; ifstream inf; inf.open(“TEST.TXT”, ios::in); while ( inf.get(ch)!=0 ) { cout << ch; } inf.close();}

Page 28: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

28

Demo program illustrating how to create an output file and to read it from same program

// file probaf8.cpp#include <fstream>using namespace std;void main(){

char ch; ofstream outf; ifstream inf;  outf.open("TEST1.TXT", ios::out);  for (ch=‘ ‘; ch<= ‘z’; ch++) outf.put(ch);  outf.close(); cout << "\n\n\nPause\n\n"; inf.open("TEST1.TXT", ios::in); while ( inf )

{ inf.get(ch); cout << ch; } inf.close();}

Page 29: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

29

Demo program illustrating how to create output file containing data for objects of user defined class Person

// file probaf11.cpp

See handout page 4 for details

Page 30: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

30

More on files

Extract from Friedman/Koffman, chapter 8

Page 31: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

Streams, Files, and Formatting

Chapter 8

Page 32: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

32

8.1 Standard Input/Output Streams

Stream is a sequence of characters Working with cin and cout Streams convert internal representations to

character streams >> input operator (extractor) << output operator (inserter) Streams have no fixed size

Page 33: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

33

Reading Data >>

Leading white space skipped <nwln> also skipped Until first character is located

cin >> ch; Also read character plus white space as a

character– get and put functions

Page 34: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

34

Reading Data >>

When reading data from a stream using >>, any leading white space (‘ ‘, ‘\t’, ‘\n’) is skipped until the first non-white space character is found. This is the case when reading data into predefined data types char, int, float, bool, double, or into type string objectcin >> ch;

Also read character plus white space as a characterget and put functions

Page 35: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

35

Reading one Character at a time

Function get is used to read one character at a time.

Function put is used to display one character at a time.

The following program processes individual characters in a stream

Page 36: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

36

CountChars.cpp

// File: CountChars.cpp// Counts the number of characters and lines in a file#include <iostream>#include <string>using namespace std;#define ENDFILE "CTRL-Z“int main(){ const char NWLN = '\n'; // newline character

char next; int charCount;

int totalChars = 0; int lineCount = 0;

Page 37: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

37

CountChars.cpp

cout << "Enter a line or press " << ENDFILE << ": "; while (cin.get(next)) { charCount = 0; while (next != NWLN && !cin.eof()) { cout.put(next); charCount++; totalChars++; cin.get(next); } // end inner while

cout.put(NWLN); lineCount++; cout << "Number of characters in line " << lineCount << " is " << charCount << endl; cout<<"Enter a line or press " <<ENDFILE << ": "; } // end outer while

Page 38: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

38

CountChars.cpp

cout << “\n\nNumber of lines processed is " << lineCount << endl; cout << "Total number of characters is " <<

totalChars << endl; return 0;}

Page 39: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

39

8.2 External Files

Interactive– Interactive programs read their input from the cin

stream associated with the keyboard and they display their output to the cout stream associated with a display

Batch– After a data file is saved on disk, you can instruct your

program to read data from the file rather than from the keyboard or to write its output to a disk rather than to display on the screen. This mode of execution is called batch processing.

Page 40: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

40

8.2 External Files

Batch– Requires use of data files (save to disk)– Batch can be run during off peak use– allows things to be complete at start of day

Interactive– Real time systems– Ok for smaller programs– Programs that complete quickly

Page 41: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

41

Files

Naming– .cpp .dat .out .in

How to attach files to the stream– stream object– external file name– internal name– open

Additional functions as part of <fstream> class

Page 42: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

42

Files

Declare the stream to be processed need to #include <fstream>ifstreamins; // input streamofstream outs; // output stream

Need to open the filesins.open(inFile);outs.open(outFile);

Page 43: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

43

Files

#define associates the name of the stream with the actual file name

fail() function - returns true nonzero if file fails to open

Program CopyFile.cpp demonstrates the use of the other <fstream> functions– get , put, close and eof– discuss program

Page 44: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

44

CopyFile.cpp

// File: CopyFile.cpp// Copies file InData.txt to file OutData.txt

#include <cstdlib> #include <fstream>

using namespace std;

// Associate stream objects with external file names#define inFile "InData.txt"#define outFile "OutData.txt"

Page 45: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

45

CopyFile.cpp

// Functions used ...// Copies one line of textint copyLine(ifstream&, ofstream&);

int main(){

// Local data ... int lineCount; ifstream ins; ofstream outs;

Page 46: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

46

CopyFile.cpp

// Open input and output file, exit on any error. ins.open(inFile); if ( ins.fail() ) { cerr << "*** ERROR: Cannot open " << inFile ; return EXIT_FAILURE;// failure return } // end if

outs.open(outFile); if (outs.fail()) { cerr << "*** ERROR: Cannot open " << outFile ; return EXIT_FAILURE;// failure return } // end if

Page 47: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

47

CopyFile.cpp

// Copy each character from inData to outData. lineCount = 0; do { if (copyLine(ins, outs) != 0) lineCount++; } while (!ins.eof());

// Display a message on the screen. cout << "Input file copied to output file.\n"; cout << lineCount << " lines copied.\n" ; ins.close(); outs.close(); return 0; // successful return}

Page 48: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

48

CopyFile.cpp

// Copy one line of text from one file to another// Pre: ins is opened for input and outs for output.// Post: Next line of ins is written to outs.// The last char processed from ins is <nwln>;// The last char written to outs is <nwln>.// Returns: The number of characters copied.int copyLine (ifstream& ins, ofstream& outs){ // Local data ... const char NWLN = '\n';

char nextCh; int charCount = 0;

Page 49: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

49

CopyFile.cpp

// Copy all data chars from stream ins to stream outs. ins.get(nextCh); while ((nextCh != NWLN) && !ins.eof()) { outs.put(nextCh); charCount++; ins.get (nextCh); } // end while// If last character read was NWLN write it to outs. if (!ins.eof()) { outs.put(NWLN); charCount++; } return charCount;} // end copyLine

Page 50: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

50

CopyFile.cpp

Program Output

Input file copied to output file.37 lines copied.

Page 51: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

51

Using getline with a file stream

Instead of writing own function copyline, you can use function getline to read each line of the file stream

into a string object string line; linecount = 0; getline(ins, line); while (line.length() != 0) { linecount++;

getline(ins, line);}

Page 52: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

52

File Processing

Loop processing– for loops– while loops

Newline character– eof() function returns a False if file is not emptywhile ( ! ins.eof()){

do stuff}

Page 53: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

53

Program Style: Reading a File Name

In previous programs, file name specified in #define – #define inFile “Indata.txt”– ins.open(inFile);

Sometimes, user needs to enter interactively file name – string filename;– cout<<“Enter fname:”: cin>>filename;– ins.open(filename.c_str() );

c_str() converts the string in filename to a C-style string which has a different format than a C++ string. The open statement has a C-style string as an argument

Page 54: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

54

8.3 Using External File Functions

Payroll Case Study Two programs process the payroll Design Process

– Problem Analysis– Program Design– Program Implementation– Program Verification and Test

Page 55: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

55

Payroll Case Structure Chart

P re pa refi les

P roce ss a lle m p lo yees

D isp layp ay ro ll

W r i te thep ayro ll f i le

processEmp

Page 56: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

56

ProcessEmp Structure Chart

R e ad e m p loy eefirs t a n d la st

n a m es

R e ad e m p loyeesa la ry d a ta (h ou rs

a n d ra te )

C o m p u tesa la ry

A ddsa la ry to

to ta l p ay ro ll

W r i te f ir sta n d la st n am es

a nd sa la ry

P roce ss a lle m p lo yees

Page 57: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

57

Payroll.cpp

// File: Payroll.cpp// Creates a company employee payroll file// computes total company payroll amount

#include <fstream>#include <cstdlib>#include "money.h"#include "money.cpp"

using namespace std;

Page 58: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

58

Payroll.cpp

// Associate streams with external file names#define inFile "EmpFile.txt" // employee file#define outFile "Salary.txt" // payroll file// Functions used ...// PROCESS ALL EMPLOYEES AND COMPUTE TOTALmoney processEmp(istream&, ostream&);

int main(){ ifstream eds; ofstream pds; money totalPayroll;

Page 59: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

59

Payroll.cpp

// Prepare files. eds.open(inFile); if (eds.fail ()) { cerr << "*** ERROR: Cannot open " << inFile ; return EXIT_FAILURE;// failure return } pds.open(outFile); if (pds.fail()) {

cerr << "***ERROR: Cannot open " << outFile ; eds.close(); return EXIT_FAILURE; // failure return }

Page 60: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

60

Payroll.cpp

// Process all employees and compute total payroll. totalPayroll = processEmp(cin, cout);

// Display result. cout << "Total payroll is " << totalPayroll <<‘\n’;

// Close files.

eds.close(); pds.close(); return 0;}

Page 61: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

61

Payroll.cpp

// Insert processEmp here.// Process all employees and compute total// payroll amount// Pre: eds and pds are prepared for// input/output.// Post: Employee names and salaries are // written from eds to pds// and the sum of their salaries is returned.// Returns: Total company payrollmoney processEmp (istream& eds, ostream& pds){

Page 62: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

62

Payroll.cpp

string firstName; string lastName; float hours; // input: hoursWorked money rate; // input: hourly rate money salary; // output: gross salary money payroll; // return value - total

company payroll

payroll = 0.0; // Read first employee's data record. eds >> firstName >> lastName >> hours >> rate;

Page 63: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

63

Payroll.cpp

while (!eds.eof()){ salary = hours * rate; pds << firstName << lastName << salary << endl; payroll += salary;

// Read next employee's data record. eds >> firstName >> lastName >> hours >> rate; } // end while return payroll;} // end processEmp

Page 64: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

64

PayrollFile.cpp

Program Output

Total payroll is $677.38

Page 65: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

65

8.4 More on Reading String Data

Getline - could be used to process an entire line of data

Use # as a delimiter charactergetline (eds, name, ‘#’);

Advance the newlinegetline (eds, name, ‘\n’);

Use care when choosing cin, get or getline

Page 66: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

66

8.4 More on Using getline

getline(istream& ins, string& str)– Reads all chars from ins up to the first newline into

string str. The newline char extracted but not stored. getline(istream& ins, string& str, char delimiter)

– Reads all chars from ins up to the first occurrence of delimiter into string str. Delimiter extracted but not stored.

ins.ignore(int n, char delimiter)– Extract (but not store) up to n chars from ins through

the first occurrence of the delimiter char.

Page 67: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

67

Input/output manipulators

endl Inserts the newline character into an output stream.

setw(n) Controls the width of an output field. dec, hex, oct Controls the numeric system base (10, 16, 8)

used to display values. fixed, scientific Causes real numbers to display in decimal

or in scientific notation. showpoint Ensures decimal point and trailing zeros if

necessary always to appear setprecision(n) Sets the precision to n decimal places. left, right Left-adjust or right-adjust output in field.

Page 68: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

68

8.5 Input/Output Manipulators

Chapter 5 covered setf, unsetf, precision and width

Can be used with the cout and << Table 8.3 lists various manipulator

functions (setiosflags, setprecision, setw) #include <iomanip> when using Can be used with external files like stdout

and stdin

Page 69: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

69

Formatting with State Flags

Depending on the setiosflags or unsetiosflags– Output can be controlled by other format state

flag– Flags are enumerated types

ios::flagname Table 8.3 lists some flags

– boolalpha, fixed, left, right, showpoint etc

Page 70: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

70

8.6 Common Programming Errors

Connecting streams and external files– Declare stream object and open the file

Watch use of while loops when processing– Test values see what you actually have

Reading past the eof White space Newline character Formatting via flags

Page 71: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

71

Exercise 27.1

Build programs to illustrate file I/O processingWrite programs to create(write) and read files using the

following couples of functions:Text modeCharacter I/O: putc( ), getc( )String I/O: fputs( ), fgets( )Formatted I/O: fprintf( ), fscanf( )Binary modefwrite( ), fread( )Demo programs: IOFile1.cpp, IOFile2.cpp.

Page 72: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

72

Before lecture end

Lecture:File Input/Output processing

More to read:Friedman/Koffman, Chapter 08

Page 73: Lecture 27: File Input/Output Processing. 2 Lecture Contents: t Input/Output files t Text files and Binary files t File access t Standard Input/Output

73

Thank You For

Your Attention!