Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 8 Streams and Files Lecture Notes Prepared By: Blaise W. Liffick, PhD Department of Computer Science Millersville University Millersville, PA 17551.

Similar presentations


Presentation on theme: "Chapter 8 Streams and Files Lecture Notes Prepared By: Blaise W. Liffick, PhD Department of Computer Science Millersville University Millersville, PA 17551."— Presentation transcript:

1 Chapter 8 Streams and Files Lecture Notes Prepared By: Blaise W. Liffick, PhD Department of Computer Science Millersville University Millersville, PA 17551 bliffick@millersville.edu

2 © 2004 Pearson Addison-Wesley. All rights reserved8-2 8.1 Standard Input/Output Streams A stream is a sequence of characters Standard input stream (cin) and standard output stream (cout) of the iostream library Streams convert internal representations to character streams or vice versa >> input (extraction) operator << output (insertion) operator Any character (printable or not) A stream has no fixed size

3 © 2004 Pearson Addison-Wesley. All rights reserved8-3 Input Stream, >> Operator Last character read is kept track using an input stream buffer pointer Each new input attempt begins at current pointer position Leading white space (blanks, tab, nwln) skipped until first non-white-space character is located cin >> ch; For numeric value, all characters that are part of the numeric value are processed until a character that’s not legally part of a C++ number is read.

4 © 2004 Pearson Addison-Wesley. All rights reserved8-4 Reading One Character at a Time Can also read/write white space –iostream functions get and put

5 © 2004 Pearson Addison-Wesley. All rights reserved8-5 Listing 8.2 Processing individual characters in a stream

6 © 2004 Pearson Addison-Wesley. All rights reserved8-6 Listing 8.2 Processing individual characters in a stream (continued)

7 © 2004 Pearson Addison-Wesley. All rights reserved8-7 Table 8.1 The File Manipulation Member Functions

8 © 2004 Pearson Addison-Wesley. All rights reserved8-8 Using a Stream in a Condition cout << “Enter a line or press “ << ENDFILE << “: “; while (cin.get(next))// get first char of new line { // insert loop body including inner while loop... cout << “Enter a line or press “ << ENDFILE << “: “; }// end outer while

9 © 2004 Pearson Addison-Wesley. All rights reserved8-9 8.2 External Files Interactive –Expect user input from keyboard –Ok for smaller programs Batch –Requires use of data files (save to disk) –Don’t expect input from keyboard, so no prompts –Often uses echo printing of input –Input file can be read many times –Can also write output to file –Output file from one program can be input to another

10 © 2004 Pearson Addison-Wesley. All rights reserved8-10 Directory Names for External Files Must know location of file within directory structure (pathname) Directories are system dependent File names usually follow system and local conventions –how file is named –use of extensions.cpp.dat.doc.txt

11 © 2004 Pearson Addison-Wesley. All rights reserved8-11 Attaching Streams to External Files Declaring a stream object ifstream ins; ofstream outs; External (physical) file name linked to internal (logical) name by open function #define inFile “InData.txt”... ins.open(inFile);

12 © 2004 Pearson Addison-Wesley. All rights reserved8-12 Reading a File Name string fileName; cout << “Enter the input file name: “; cin >> fileName; ins.open(fileName.c_str( ));

13 © 2004 Pearson Addison-Wesley. All rights reserved8-13 Case Study: Preparing a Payroll File Write a program that reads a data file consisting of employee salary data, and computes the employee’s gross salary. It writes the employee’s name and gross salary to an output file and accumulates the gross salary amount in the total company payroll, which it also displays.

14 © 2004 Pearson Addison-Wesley. All rights reserved8-14 Case Study: Sample Files Input Jim Baxter35.57.25 Adrian Cybriwsky 40.06.50 Ayisha Mertens20.08.00 Output Jim Baxter257.38 Adrian Cybriwsky260.00 Ayisha Mertens160.00

15 © 2004 Pearson Addison-Wesley. All rights reserved8-15 Case Study: Problem Analysis Streams Used –ifstream eds// employee data info –ofstream pds// payroll data info Problem Input (from stream eds) –for each employee string firstName string lastName float hoursWorked float hourlyRate

16 © 2004 Pearson Addison-Wesley. All rights reserved8-16 Case Study: Problem Analysis Problem Output (to stream pds) –for each employee string firstName string lastName float salary Problem Output (to stream cout) –float totalPayroll// total company payroll

17 © 2004 Pearson Addison-Wesley. All rights reserved8-17 Case Study: Program Design Algorithm for function main 1. Prepare streams and associated files for processing 2. Process all employees and compute payroll total (function processEmp). 3. Display the payroll total.

18 © 2004 Pearson Addison-Wesley. All rights reserved8-18 Case Study: Interface for processEmp Input Arguments –ifstream eds// input stream - employee data –ofstream pds// output stream - payroll data Output Arguments –none Function Return Value –float totalPayroll// total company payroll

19 © 2004 Pearson Addison-Wesley. All rights reserved8-19 Case Study: Algorithm for processEmp 1. Initialize payroll total to 0.0 2. While there are more employees 2.1 Read employee’s first and last names and salary data from eds 2.2 Compute employee’s salary 2.3 Write employee’s first and last names and salary to pds; add it to payroll total

20 © 2004 Pearson Addison-Wesley. All rights reserved8-20 Listing 8.5 Implementation of processEmp

21 © 2004 Pearson Addison-Wesley. All rights reserved8-21 Listing 8.5 Implementation of processEmp (continued)

22 © 2004 Pearson Addison-Wesley. All rights reserved8-22 8.4 More on Reading String Data getline (istream& ins, string& str) getline (istream& ins, string& str, char delimiter) ins.ignore (int n, char delimiter)

23 © 2004 Pearson Addison-Wesley. All rights reserved8-23 Using getline getline - could be used to process an entire line of data E.g. for data file containing Jim Andrew Baxter# 35.57.25 Adrian Cybriwsky# 40.06.50 Ayisha W. Mertens# 20.08.00 Use # as a delimiter character getline (eds, name, ‘#’);

24 © 2004 Pearson Addison-Wesley. All rights reserved8-24 Using ignore getline does not skip leading white space, so if a newline character is encountered at the beginning of the characters to be extracted, getline will stop immediately and won’t perform the expected task E.g. data file contains Jim Andrew Baxter 35.57.25 Adrian Cybriwsky 40.06.50

25 © 2004 Pearson Addison-Wesley. All rights reserved8-25 payroll = 0.0; getline(eds, name); while (!eds.eof( )) { eds >> hours >> rate; salary = hours * rate; pds << name << “ “ << salary << endl; payroll += salary; eds.ignore(100, ‘\n’); getline(eds, name); }

26 © 2004 Pearson Addison-Wesley. All rights reserved8-26 Table 8.3 Input/Output Manipulators

27 © 2004 Pearson Addison-Wesley. All rights reserved8-27 Manipulators Example cout << “The value of x is “ << fixed << showpoint << setprecision(4) << x << endl;

28 © 2004 Pearson Addison-Wesley. All rights reserved8-28 8.6 Common Programming Errors Connecting streams and external files Using input and output streams incorrectly Reading past the end of a file Matching data in an input stream to input data stores White space and input Proper handling of the newline character Input and output settings


Download ppt "Chapter 8 Streams and Files Lecture Notes Prepared By: Blaise W. Liffick, PhD Department of Computer Science Millersville University Millersville, PA 17551."

Similar presentations


Ads by Google