home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cslio205.zip / EXAMPLES / 1 / EXAMPLE.CPP next >
Text File  |  1996-10-11  |  4KB  |  206 lines

  1. #include "fstream.h"
  2. #include "ctype.h"
  3. #include "csa.h"
  4. #include "csdb.h"
  5.  
  6.  
  7.  
  8.  
  9. ////////////////////////////////////////////////////////////////////////
  10. ///////////////  Global declarations ///////////////////////////////////
  11. ////////////////////////////////////////////////////////////////////////
  12.  
  13.  
  14. #define MAXWORDLENGTH  20
  15.  
  16.  
  17.  
  18. char   WordBuffer[MAXWORDLENGTH+1];
  19. BTREEa bt;  // An instance of the BTREEa (strings) class.
  20.  
  21.  
  22.  
  23. ////////////////////////////////////////////////////////////////////////
  24. ///////////////  Insert Words in BTREE    ////////////////////////////////
  25. ////////////////////////////////////////////////////////////////////////
  26.  
  27. int InsertWord(char *p)
  28. {
  29.  
  30.   long count;
  31.  
  32.  
  33.   if(bt.search(p,&count))
  34.   {
  35.     // The word is already in the btree. Increase counter.
  36.     count++;
  37.   }
  38.   else
  39.   {
  40.     // A new word.
  41.     count=1;
  42.   }
  43.  
  44.  
  45.   return bt.insert(p,&count); // Returns TRUE on success.
  46.  
  47. }
  48.  
  49.  
  50.  
  51. ////////////////////////////////////////////////////////////////////////
  52. ///////////////  Process input file ////////////////////////////////////
  53. ////////////////////////////////////////////////////////////////////////
  54.  
  55.  
  56. int CountWords(char *fina)
  57. {
  58.  
  59.  
  60.   char     c;
  61.   char    *cp;
  62.   int     len;
  63.  
  64.   ifstream ins(fina);
  65.   if(!ins)
  66.   {
  67.  
  68.       cout<<"Error, can't open "<<fina<<'.'<<endl;
  69.       return FALSE;
  70.   }
  71.  
  72.  
  73.  
  74.   len=0;
  75.   cp=WordBuffer;
  76.  
  77.   while(!ins.eof())
  78.   {
  79.  
  80.     ins.get(c);
  81.  
  82.  
  83.     if(isalnum(c) && len<MAXWORDLENGTH)
  84.     {
  85.      *cp++=c;
  86.       len++;
  87.     }
  88.     else
  89.     {
  90.       if(len>0)
  91.       {
  92.     *cp=0;
  93.      InsertWord(WordBuffer);
  94.      cp=WordBuffer;
  95.      if(isalnum(c)) { len=1; *cp++=c; }
  96.      else          len=0;
  97.       }
  98.     }
  99.  
  100.   }
  101.  
  102.   if(len>0) { *cp=0; InsertWord(WordBuffer); }
  103.  
  104.   return TRUE;
  105.  
  106.  
  107. }
  108.  
  109.  
  110. ////////////////////////////////////////////////////////////////////////
  111. ///////////////  Display results ///////////////////////////////////////
  112. ////////////////////////////////////////////////////////////////////////
  113.  
  114. int DisplayCount(void)
  115. {
  116.  
  117.   long counter;
  118.  
  119.   if(bt.first(WordBuffer,&counter))  // Read the first key.
  120.   {                     // Fails only if the btree is empty.
  121.  
  122.     do
  123.     {
  124.       cout.width(24);
  125.       cout.fill('.');
  126.       cout.setf(ios::left, ios::adjustfield);
  127.       cout<<WordBuffer<<"  "<<counter<<endl;
  128.     }
  129.     while(bt.next(1,WordBuffer,&counter));     // Next key.
  130.   }
  131.  
  132.   return TRUE;
  133. }
  134.  
  135.  
  136.  
  137. ////////////////////////////////////////////////////////////////////////
  138. ///////////////  Display Intro screen //////////////////////////////////
  139. ////////////////////////////////////////////////////////////////////////
  140.  
  141. void help(void)
  142. {
  143.       cout<<endl<<endl;
  144.       cout<<"EXAMPLE version 1.0 for "<<_CP_PLATFORM<<endl;
  145.       cout<<"  Reads an ASCII input file and displays an"<<endl;
  146.       cout<<"  alphabetical list with word frequencies."<<endl<<endl;
  147.       cout<<"Copyright (c) ComBits, 1996"<<endl;
  148.       cout<<"Compiled: "<<__DATE__<<",  "<<__TIME__<<endl<<endl;
  149.       cout<<"SYNTAX:  demo <filename>     "<<endl;
  150.       cout<<"  filename: The name of the input file.  "<<endl<<endl;
  151.       cout<<"EXAMPLE: demo input.txt     "<<endl;
  152. }
  153.  
  154. ////////////////////////////////////////////////////////////////////////
  155. ///////////////  Main program //////////////////////////////////////////
  156. ////////////////////////////////////////////////////////////////////////
  157.  
  158.  
  159.  
  160. int main(int argc,char *argv[])
  161. {
  162.  
  163.  
  164.   if(argc!=2)
  165.   {
  166.     help();
  167.     return 1;
  168.   }
  169.  
  170.  
  171.  
  172.  
  173.   if(!bt.define("demo.dbf",MAXWORDLENGTH,sizeof(long)))
  174.   {
  175.      cout<<"Error, can't create btree "<<"demo.dbf"<<'.'<<endl;
  176.      return 8;
  177.   }
  178.  
  179.  
  180.  
  181.   if(!bt.open("demo.dbf",100))  // Open with 100Kb buffers.
  182.   {
  183.      cout<<"Error, can't open btree "<<"demo.dbf"<<'.'<<endl;
  184.      return 8;
  185.   }
  186.  
  187.  
  188.   // Process input file and count the words.
  189.   CountWords(argv[1]);
  190.  
  191.  
  192.   // Display Results.
  193.   DisplayCount();
  194.  
  195.  
  196.   bt.close();
  197.  
  198.   bt.display_error(); //Display errors IF ANY! Otherwise nothing is displayed.
  199.  
  200.  
  201. //  remove("demo.dbf");  // Remove btree file.
  202.  
  203.   return 0;
  204.  
  205. }
  206.