Download presentation
Presentation is loading. Please wait.
Published byJeffry Stone Modified over 9 years ago
1
Streams, Files, and Formatting Chapter 8
2
2 8.1 Standard Input/Output Streams t Stream is a sequence of characters t Working with cin and cout t Streams convert internal representations to character streams t >> input operator (extractor) t << output operator (inserter) t Streams have no fixed size
3
3 Reading Data >> t Leading white space skipped t also skipped t Until first character is located cin >> ch; t Also read character plus white space as a character –get and put functions
4
4 CountChars.cpp // File: CountChars.cpp // Counts the number of characters and lines in // a file #include using namespace std; #define ENDFILE "CTRL-Z"
5
5 CountChars.cpp int main() { const char NWLN = '\n'; // newline character char next; int charCount; int totalChars; int lineCount; lineCount = 0; totalChars = 0;
6
6 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
7
7 CountChars.cpp cout.put(NWLN); lineCount++; cout << "Number of characters in line " << lineCount << " is " << charCount << endl; cout << "Enter a line or press " << ENDFILE << ": "; } // end outer while cout << endl << endl << "Number of lines processed is " << lineCount << endl;
8
8 CountChars.cpp cout << "Total number of characters is " << totalChars << endl; return 0; }
9
9 8.2 External Files t 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 t Interactive –Real time systems –Ok for smaller programs –Programs that complete quickly
10
10 Files t Naming –.cpp.dat.out.in t How to attach files to the stream –stream object –external file name –internal name –open t Additional functions as part of fstream.h class
11
11 Files t Declare the stream to be processed need to #include fstream ifstreamins;// input stream ofstream outs;// output stream t Need to open the files ins.open (inFile); outs.open (outFile);
12
12 Files t #define associates the name of the stream with the actual file name t fail() function - returns true if file fails to open t Program CopyFile.cpp demonstrates the use of the other fstream functions –get, put, close and eof –discuss program
13
13 CopyFile.cpp // File: CopyFile.cpp // Copies file InData.txt to file OutData.txt #include using namespace std; // Associate stream objects with external file // names #define inFile "InData.txt" #define outFile "OutData.txt"
14
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
15 CopyFile.cpp // Open input and output file, exit on any // error. ins.open(inFile); if (ins.fail ()) { cerr << "*** ERROR: Cannot open " << inFile << " for input." << endl; return EXIT_FAILURE;// failure return } // end if
16
16 CopyFile.cpp outs.open(outFile); if (outs.fail()) { cerr << "*** ERROR: Cannot open " << outFile << " for output." << endl; return EXIT_FAILURE;// failure return } // end if // Copy each character from inData to outData. lineCount = 0; do {
17
17 CopyFile.cpp if (copyLine(ins, outs) != 0) lineCount++; } while (!ins.eof()); // Display a message on the screen. cout << "Input file copied to output file." << endl; cout << lineCount << " lines copied." << endl; ins.close(); outs.close(); return 0; // successful return }
18
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 ; // the last character written to outs // is. // Returns: The number of characters copied. int copyLine (ifstream& ins, ofstream& outs) {
19
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
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
21 CopyFile.cpp Program Output Input file copied to output file. 37 lines copied.
22
22 File Processing t Loop processing –for loops –while loops t Newline character –eof() function returns a False if file is not empty while ( ! ins.eof()) { do stuff }
23
23 8.3 Using External File Functions t Payroll Case Study t Two programs process the payroll t Design Process –Problem Analysis –Program Design –Program Implementation –Program Verification and Test
24
24 Payroll Case Structure Chart processEmp
25
25 ProcessEmp Structure Chart
26
26 Payroll.cpp // File: Payroll.cpp // Creates a company employee payroll file // computes total company payroll amount #include #include "money.h" #include "money.cpp" using namespace std;
27
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
28 Payroll.cpp // Prepare files. eds.open(inFile); if (eds.fail ()) { cerr << "*** ERROR: Cannot open " << inFile << " for input." << endl; return EXIT_FAILURE;// failure return } pds.open(outFile); if (pds.fail()) {
29
29 Payroll.cpp cerr << "***ERROR: Cannot open " << outFile << " for output." << endl; eds.close(); return EXIT_FAILURE; // failure return } // Process all employees and compute total // payroll. totalPayroll = processEmp(eds, pds); // Display result. cout << "Total payroll is " << totalPayroll << endl;
30
30 Payroll.cpp // Close files. eds.close(); pds.close(); return 0; }
31
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
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 >> firstName >> lastName >> hours >> rate;
33
33 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
34
34 PayrollFile.cpp Program Output Total payroll is $677.38
35
35 8.4 More on Reading String Data t Getline - could be used to process an entire line of data t Use # as a delimiter character getline (eds, name, ‘#’); t Advance the newline getline (eds, name, ‘\n’); t Use care when choosing cin, get or getline
36
36 8.5 Input/Output Manipulators t Chapter 5 covered setf, unsetf, precision and width t Can be used with the cout and << t Table 8.3 lists various manipulator functions (setiosflags, setprecision, setw) t #include iomanip when using t Can be used with external files like stdout and stdin
37
37 Formatting with State Flags t Depending on the setiosflags or unsetiosflags –Output can be controlled by other format state flag –Flags are enumerated types t ios::flagname t Table 8.3 lists some flags –boolalpha, fixed, left, right, showpoint etc
38
38 8.6 Common Programming Errors t Connecting streams and external files –Declare stream object and open the file t Watch use of while loops when processing –Test values see what you actually have t Reading past the eof t White space t Newline character t Formatting via flags
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.