home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_11_07 / 1107110b < prev    next >
Text File  |  1993-05-04  |  2KB  |  68 lines

  1. // records.cpp: Illustrate file positioning
  2. #include <iostream.h>
  3. #include <fstream.h>
  4. #include <strstream.h>
  5. #include <stddef.h>
  6.  
  7. struct record
  8. {
  9.     char last[16];
  10.     char first[11];
  11.     int age;
  12. };
  13.  
  14. main()
  15. {
  16.     const size_t BUFSIZ = 81;
  17.     int nrecs = 0;
  18.     char buf[BUFSIZ];
  19.     struct record recbuf;
  20.     int mode = ios::bin | ios::trunc | ios::out | ios::in;
  21.     fstream f("recs.dat",mode);
  22.  
  23.     for (;;)
  24.     {
  25.         // Prompt for input line
  26.         cout << "Enter LAST,FIRST,AGE: ";
  27.         if (!cin.getline(buf,BUFSIZ))
  28.             break;
  29.  
  30.         // Extract fields
  31.         istrstream line(buf);
  32.         line.getline((char *)&recbuf.last,sizeof recbuf.last,',');
  33.         line.getline((char *)&recbuf.first,sizeof recbuf.first,',');
  34.         line >> recbuf.age;
  35.  
  36.         // Write to file
  37.         f.write((char *) &recbuf, sizeof recbuf);
  38.         ++nrecs;
  39.     }
  40.  
  41.     /* Position at last record */
  42.     f.seekg((nrecs-1)*sizeof(struct record),ios::beg);
  43.     if (f.read((char *) &recbuf,sizeof recbuf))
  44.         cout << "last: " << recbuf.last
  45.              << ", first: " << recbuf.first
  46.              << ", age: " << recbuf.age
  47.              << endl;
  48.  
  49.     /* Position at first record */
  50.     f.seekg(0,ios::beg);
  51.     if (f.read((char *) &recbuf,sizeof recbuf))
  52.         cout << "last: " << recbuf.last
  53.              << ", first: " << recbuf.first
  54.              << ", age: " << recbuf.age
  55.              << endl;
  56.  
  57.     return 0;
  58. }
  59.  
  60. // Sample execution
  61. // Enter LAST,FIRST,AGE: Lincoln,Abraham,188
  62. // Enter LAST,FIRST,AGE: Bach,Johann,267
  63. // Enter LAST,FIRST,AGE: Tze,Lao,3120
  64. // Enter LAST,FIRST,AGE: ^Z
  65. // last: Tze, first: Lao, age: 3120
  66. // last: Lincoln, first: Abraham, age: 188
  67.  
  68.