Streams, Files, and Formatting - PowerPoint PPT Presentation

1 / 38
About This Presentation
Title:

Streams, Files, and Formatting

Description:

Stream is a sequence of characters. Working with cin and cout. Streams convert internal representations to character streams input operator (extractor) ... – PowerPoint PPT presentation

Number of Views:35
Avg rating:3.0/5.0
Slides: 39
Provided by: michae1314
Category:

less

Transcript and Presenter's Notes

Title: Streams, Files, and Formatting


1
Streams, Files, and Formatting
  • Standard Input/Output Streams
  • External Files
  • More on Reading String Data
  • Input/Output Manipulators
  • Common Programming Errors

2
8.1 Standard Input/Output Streams
  • Stream is a sequence of characters
  • Working with cin and cout
  • Streams convert internal representations to
    character streams
  • gtgt input operator (extractor)
  • ltlt output operator (inserter)
  • Streams have no fixed size

3
Reading Data gtgt
  • Leading white space skipped
  • ltnwlngt also skipped
  • Until first character is located
  • cin gtgt ch
  • Also read character plus white space as a
    character
  • get and put functions

4
CountChars.cpp
  • // File CountChars.cpp
  • // Counts the number of characters and lines in
  • // a file
  • include ltiostreamgt
  • include ltstringgt
  • using namespace std
  • define ENDFILE "CTRL-Z"

5
CountChars.cpp
  • int main()
  • const char NWLN '\n' // newline character
  • char next
  • int charCount
  • int totalChars
  • int lineCount
  • lineCount 0
  • totalChars 0

6
CountChars.cpp
  • cout ltlt "Enter a line or press " ltlt ENDFILE ltlt
  • " "
  • while (cin.get(next))
  • charCount 0
  • while (next ! NWLN !cin.eof())
  • cout.put(next)
  • charCount
  • totalChars
  • cin.get(next)
  • // end inner while

7
CountChars.cpp
  • cout.put(NWLN)
  • lineCount
  • cout ltlt "Number of characters in line " ltlt
  • lineCount ltlt " is " ltlt charCount ltlt endl
  • cout ltlt "Enter a line or press " ltlt
  • ENDFILE ltlt " "
  • // end outer while
  • cout ltlt endl ltlt endl ltlt
  • "Number of lines processed is " ltlt
  • lineCount ltlt endl

8
CountChars.cpp
  • cout ltlt "Total number of characters is " ltlt
  • totalChars ltlt endl
  • return 0

9
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

10
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.h class

11
Files
  • Declare the stream to be processed need to
    include fstream
  • ifstream ins // input stream
  • ofstream outs // output stream
  • Need to open the files
  • ins.open (inFile)
  • outs.open (outFile)

12
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

13
CopyFile.cpp
  • // File CopyFile.cpp
  • // Copies file InData.txt to file OutData.txt
  • include ltcstdlibgt
  • include ltfstreamgt
  • using namespace std
  • // Associate stream objects with external file
  • // names
  • define inFile "InData.txt"
  • define outFile "OutData.txt"

14
CopyFile.cpp
  • // Functions used ...
  • // Copies one line of text
  • int copyLine(ifstream, ofstream)
  • int main()
  • // Local data ...
  • int lineCount
  • ifstream ins
  • ofstream outs

15
CopyFile.cpp
  • // Open input and output file, exit on any
  • // error.
  • ins.open(inFile)
  • if (ins.fail ())
  • cerr ltlt " ERROR Cannot open " ltlt
  • inFile ltlt " for input." ltlt endl
  • return EXIT_FAILURE // failure return
  • // end if

16
CopyFile.cpp
  • outs.open(outFile)
  • if (outs.fail())
  • cerr ltlt " ERROR Cannot open " ltlt
  • outFile ltlt " for output." ltlt endl
  • return EXIT_FAILURE // failure return
  • // end if
  • // Copy each character from inData to outData.
  • lineCount 0
  • do

17
CopyFile.cpp
  • if (copyLine(ins, outs) ! 0)
  • lineCount
  • while (!ins.eof())
  • // Display a message on the screen.
  • cout ltlt "Input file copied to output file." ltlt
  • endl
  • cout ltlt lineCount ltlt " lines copied." ltlt endl
  • ins.close()
  • outs.close()
  • return 0 // successful return

18
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 character processed from
  • // ins is ltnwlngt
  • // the last character written to outs
  • // is ltnwlngt.
  • // Returns The number of characters copied.
  • int copyLine (ifstream ins, ofstream outs)

19
CopyFile.cpp
  • // Local data ...
  • const char NWLN '\n'
  • char nextCh
  • int charCount 0
  • // Copy all data characters from stream ins to
  • // stream outs.
  • ins.get(nextCh)
  • while ((nextCh ! NWLN) !ins.eof())
  • outs.put(nextCh)
  • charCount

20
CopyFile.cpp
  • 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

21
CopyFile.cpp
  • Program Output
  • Input file copied to output file.
  • 37 lines copied.

22
File Processing
  • Loop processing
  • for loops
  • while loops
  • Newline character
  • eof() function returns a False if file is not
    empty
  • while ( ! ins.eof())
  • do stuff

23
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

24
Payroll Case Structure Chart
processEmp
25
ProcessEmp Structure Chart
26
Payroll.cpp
  • // File Payroll.cpp
  • // Creates a company employee payroll file
  • // computes total company payroll amount
  • include ltfstreamgt
  • include ltcstdlibgt
  • include "money.h"
  • include "money.cpp"
  • using namespace std

27
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 TOTAL
  • money processEmp(istream, ostream)
  • int main()
  • ifstream eds
  • ofstream pds
  • money totalPayroll

28
Payroll.cpp
  • // Prepare files.
  • eds.open(inFile)
  • if (eds.fail ())
  • cerr ltlt " ERROR Cannot open " ltlt inFile
  • ltlt " for input." ltlt endl
  • return EXIT_FAILURE // failure return
  • pds.open(outFile)
  • if (pds.fail())

29
Payroll.cpp
  • cerr ltlt "ERROR Cannot open " ltlt outFile
  • ltlt " for output." ltlt endl
  • eds.close()
  • return EXIT_FAILURE // failure return
  • // Process all employees and compute total
  • // payroll.
  • totalPayroll processEmp(cin, cout)
  • // Display result.
  • cout ltlt "Total payroll is " ltlt totalPayroll ltlt
  • endl

30
Payroll.cpp
  • // Close files.
  • eds.close()
  • pds.close()
  • return 0

31
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 payroll
  • money processEmp (istream eds, ostream pds)

32
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 gtgt firstName gtgt lastName gtgt hours gtgt rate

33
Payroll.cpp
  • while (!eds.eof())
  • salary hours rate
  • pds ltlt firstName ltlt lastName ltlt salary ltlt
  • endl
  • payroll salary
  • // Read next employee's data record.
  • eds gtgt firstName gtgt lastName gtgt hours gtgt
  • rate
  • // end while
  • return payroll
  • // end processEmp

34
PayrollFile.cpp
  • Program Output
  • Total payroll is 677.38

35
8.4 More on Reading String Data
  • Getline - could be used to process an entire line
    of data
  • Use as a delimiter character
  • getline (eds, name, )
  • Advance the newline
  • getline (eds, name, \n)
  • Use care when choosing cin, get or getline

36
8.5 Input/Output Manipulators
  • Chapter 5 covered setf, unsetf, precision and
    width
  • Can be used with the cout and ltlt
  • Table 8.3 lists various manipulator functions
    (setiosflags, setprecision, setw)
  • include iomanip when using
  • Can be used with external files like stdout and
    stdin

37
Formatting with State Flags
  • Depending on the setiosflags or unsetiosflags
  • Output can be controlled by other format state
    flag
  • Flags are enumerated types
  • iosflagname
  • Table 8.3 lists some flags
  • boolalpha, fixed, left, right, showpoint etc

38
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
Write a Comment
User Comments (0)
About PowerShow.com