Presentation is loading. Please wait.

Presentation is loading. Please wait.

Streams, Files, and Formatting Chapter 8. 2 8.1 Standard Input/Output Streams t Stream is a sequence of characters t Working with cin and cout t Streams.

Similar presentations


Presentation on theme: "Streams, Files, and Formatting Chapter 8. 2 8.1 Standard Input/Output Streams t Stream is a sequence of characters t Working with cin and cout t Streams."— Presentation transcript:

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


Download ppt "Streams, Files, and Formatting Chapter 8. 2 8.1 Standard Input/Output Streams t Stream is a sequence of characters t Working with cin and cout t Streams."

Similar presentations


Ads by Google