home *** CD-ROM | disk | FTP | other *** search
- // File from page 266 in "Thinking in C++" by Bruce Eckel
- //////////////////////////////////////////////////
- // From the compressed package ECKELT01.ZIP 2/21/95
- // Copyright (c) Bruce Eckel, 1995
- // Source code file from the book "Thinking in C++",
- // Prentice Hall, 1995, ISBN: 0-13-917709-4
- // All rights reserved EXCEPT as allowed by the following
- // statements: You may freely use this file for your own
- // work, including modifications and distribution in
- // executable form only. You may copy and distribute this
- // file, as long as it is only distributed in the complete
- // (compressed) package with the other files from this
- // book and you do not remove this copyright and notice.
- // You may not distribute modified versions of the source
- // code in this package. This package may be freely placed
- // on bulletin boards, internet nodes, shareware disks and
- // product vendor disks. You may not use this file in
- // printed media without the express permission of the
- // author. Bruce Eckel makes no
- // representation about the suitability of this software
- // for any purpose. It is provided "as is" without express
- // or implied warranty of any kind. The entire risk as to
- // the quality and performance of the software is with
- // you. Should the software prove defective, you assume
- // the cost of all necessary servicing, repair, or
- // correction.
- // If you think you've found an error, please
- // email all modified files with loudly commented changes
- // to: eckel@aol.com (please use the same
- // address for non-code errors found in the book).
- //////////////////////////////////////////////////
-
- //: DATASCAN.CPP -- Verify and view logged data
- #include <fstream.h>
- #include <strstrea.h>
- #include <iomanip.h>
- #include <assert.h>
- #include "..\5\datalog.h"
-
- main() {
- ifstream bindata("data.bin", ios::binary);
- assert(bindata); // Make sure it exists
- // Create comparison file to verify data.txt:
- ofstream verify("data2.txt");
- datapoint d;
- while(bindata.read((unsigned char*)&d,
- sizeof d))
- d.print(verify);
- bindata.clear(); // Reset state to "good"
- // Display user-selected records:
- int recnum = 0;
- // Left-align everything:
- cout.setf(ios::left, ios::adjustfield);
- // Fixed precision of 4 decimal places:
- cout.setf(ios::fixed, ios::floatfield);
- cout.precision(4);
- for(;;) {
- bindata.seekg(recnum* sizeof d, ios::beg);
- cout << "record " << recnum << endl;
- if(bindata.read((unsigned char*)&d,
- sizeof d)) {
- cout << asctime(&(d.Time()));
- cout << setw(11) << "Latitude"
- << setw(11) << "Longitude"
- << setw(10) << "Depth"
- << setw(12) << "Temperature"
- << endl;
- // Put a line after the description:
- cout << setfill('-') << setw(43) << '-'
- << setfill(' ') << endl;
- cout << setw(11) << d.latitude()
- << setw(11) << d.longitude()
- << setw(10) << d.depth()
- << setw(12) << d.temperature()
- << endl;
- } else {
- cout << "invalid record number" << endl;
- bindata.clear(); // Reset state to "good"
- }
- cout << endl
- << "enter record number, x to quit:";
- char buf[10];
- cin.getline(buf, 10);
- if(buf[0] == 'x') break;
- istrstream input(buf, 10);
- input >> recnum;
- }
- }
-