home *** CD-ROM | disk | FTP | other *** search
/ NEXT Generation 27 / NEXT27.iso / pc / demos / emperor / dx3.exe / SDK / SAMPLES / IKLOWNS / STRREC.CPP < prev   
C/C++ Source or Header  |  1996-08-28  |  2KB  |  87 lines

  1. /*===========================================================================*\
  2. |
  3. |  File:        strrec.cpp
  4. |
  5. |  Description: 
  6. |       string record parser class implementation
  7. |       
  8. |-----------------------------------------------------------------------------
  9. |
  10. |  Copyright (C) 1995-1996 Microsoft Corporation.  All Rights Reserved.
  11. |
  12. |  Written by Moss Bay Engineering, Inc. under contract to Microsoft Corporation
  13. |
  14. \*===========================================================================*/
  15.  
  16. #include <windows.h>
  17. #include <string.h>
  18. #include "strrec.h"
  19.  
  20. /*---------------------------------------------------------------------------*\
  21. |
  22. |       Class CStringRecord
  23. |
  24. |  DESCRIPTION:
  25. |       parses a delimited string into fields
  26. |
  27. |
  28. \*---------------------------------------------------------------------------*/
  29. CStringRecord::CStringRecord(
  30.     char* pString,
  31.     char* pDelims
  32.     ) : mpFields( NULL ),
  33.         mNumFields( 0 )
  34. {
  35.     char* tempFields[MAX_FIELDS];
  36.  
  37.     char* pWork = new char[lstrlen(pString)+1];
  38.     lstrcpy(pWork, pString);
  39.  
  40.     char* pLook = strtok( pWork, pDelims );
  41.  
  42.     while (pLook && mNumFields < MAX_FIELDS)
  43.     {
  44.         tempFields[mNumFields] = new char[lstrlen(pLook)+1];
  45.         lstrcpy(tempFields[mNumFields], pLook);
  46.  
  47.         pLook = strtok( NULL, pDelims);
  48.         ++mNumFields;
  49.     }
  50.  
  51.     // now save the fields array
  52.     mpFields = new char*[mNumFields];
  53.  
  54.     for (int i=0; i<mNumFields; i++)
  55.     {
  56.         mpFields[i] = new char[lstrlen(tempFields[i])+1];
  57.         lstrcpy(mpFields[i], tempFields[i]);
  58.     }
  59. }
  60.  
  61. CStringRecord::~CStringRecord()
  62. {
  63.     if (mpFields)
  64.     {
  65.         for (; mNumFields > 0; mNumFields--)
  66.         {
  67.             delete[] mpFields[mNumFields-1];
  68.         }
  69.  
  70.         delete[] mpFields;
  71.     }
  72. }
  73.  
  74. char*
  75. CStringRecord::operator[](int field)
  76. {
  77.     char* pResult = NULL;
  78.  
  79.     if (field < mNumFields)
  80.     {
  81.         pResult = mpFields[field];
  82.     }
  83.  
  84.     return pResult;
  85. }
  86.  
  87.