parmfile.cpp
上传用户:jtjnyq9001
上传日期:2014-11-21
资源大小:3974k
文件大小:12k
源码类别:

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = parmfile.cpp
  3. //
  4. #include <stdlib.h>
  5. #include <fstream>
  6. #include <string.h>
  7. #include <direct.h>
  8. #include "parmfile.h"
  9. bool isnumeric(char* str_ptr)
  10. {
  11.    char* c_ptr;
  12.    for(c_ptr=str_ptr; c_ptr<str_ptr+strlen(str_ptr);c_ptr++) {
  13.       if( !isdigit(*c_ptr) 
  14.          && *c_ptr != '.'
  15.          && *c_ptr != '-') {
  16.          return(false);
  17.          }
  18.    }
  19.    return(true);
  20. }
  21. //======================================================
  22. ParmFile::ParmFile( const char* input_file_name )
  23. {
  24. //Input_File = new ifstream(input_file_name, ios::in);
  25.   Input_File_Name = new char[strlen(input_file_name)+2];
  26.   Input_File = NULL;
  27.   strcpy(Input_File_Name, input_file_name);
  28.   Block_Name = new char[50];
  29. }
  30. //======================================================
  31. ParmFile::~ParmFile( void ){ };
  32. //======================================================
  33. void ParmFile::FindBlock(const char* block_nam)
  34. {
  35.   char linebuf[80];
  36.   strcpy(Block_Name, block_nam);
  37.   
  38.    char buffer[_MAX_PATH];
  39.    /* Get the current working directory: */
  40.    if( _getcwd( buffer, _MAX_PATH ) == NULL )
  41.       cout << "_getcwd error" << endl;
  42.    else
  43.       cout << "%sn" << buffer << endl;
  44.   if(Input_File != NULL) Input_File->close();
  45.   Input_File = new ifstream(Input_File_Name, ios::in);
  46.   //
  47.   // find block
  48.   //
  49.   for(;;)
  50.     {
  51.     Input_File->getline(linebuf,80);
  52.     cout << linebuf << endl;
  53.     if(!strcmp("$EOF",linebuf))
  54.       {
  55.       cout << "Error- block '" << block_nam << "' not found" << endl;
  56.       exit(0);
  57.       }
  58.     if(!strcmp(block_nam, linebuf)) break;
  59.     }
  60.   cout << "matched " << block_nam << endl;
  61. }
  62. //======================================================
  63. void ParmFile::RestartBlock(void)
  64. {
  65.   FindBlock(Block_Name);
  66. }
  67. //======================================================
  68. void ParmFile::GetPlotSpec( char *sig_name,
  69.                             double *start_time,
  70.                             double *stop_time,
  71.                             int *plot_decim_rate,
  72.                             bool *count_vice_time,
  73.                             bool *file_header_req)
  74. {
  75.   char linebuf[80], scanbuf[80];
  76.   char *token;
  77.   Input_File->getline(linebuf,80);
  78.   cout << linebuf << endl;
  79.   strcpy(scanbuf,linebuf);
  80.   token = strtok( scanbuf, " ,n");
  81.   strcpy(sig_name, token);
  82.   token = strtok( NULL, " ,n");
  83.   *start_time = atof(token);
  84.   token = strtok( NULL, " ,n");
  85.   *stop_time = atof(token);
  86.   token = strtok( NULL, " ,n");
  87.   *plot_decim_rate = atoi(token);
  88.   token = strtok( NULL, " ,n");
  89.   int temp = atoi(token);
  90.   if(temp == 1)
  91.     *count_vice_time = true;
  92.   else
  93.     *count_vice_time = false;
  94.   token = strtok( NULL, " ,n");
  95.   temp = atoi(token);
  96.   if(temp == 1)
  97.     *file_header_req = true;
  98.   else
  99.     *file_header_req = false;
  100.   return;
  101. }
  102. //===========================================================
  103. int ParmFile::GetParmStr(const char* parm_nam, char* ret_str)
  104. {
  105.   char linebuf[80], scanbuf[80];
  106.   char *pCpos, *token;
  107.   char *scan_ptr;
  108.   for(;;)
  109.     {
  110.     Input_File->getline(linebuf,80);
  111.     cout << linebuf << endl;
  112.     pCpos = strstr(linebuf,"$");
  113.     if(pCpos != NULL)
  114.       {
  115.       // this is the end of the block and parm has not been found
  116.       cout << "Warning: parameter '" << parm_nam << "' not found in block '" 
  117.             << Block_Name << "'" << endl;
  118.       BasicResults << "Warning: parameter '" << parm_nam << "' not found in block '"
  119.             << Block_Name << "'" << endl;
  120.       return(-1);
  121.       }
  122.     strcpy(scanbuf,linebuf);
  123.     token = strtok( scanbuf, " =n");
  124.     if(strcmp(token,parm_nam)) continue;
  125.       cout << "matched " << parm_nam << endl;
  126.       scan_ptr = linebuf+strlen(parm_nam);
  127.       strcpy(scanbuf,scan_ptr);
  128.       scan_ptr = strstr(scanbuf, "=");
  129.       //token = strtok( scanbuf, "=");
  130.       //token = strtok( scanbuf, " 0123456789-+ft");
  131.       cout << "xfound " << token << endl;
  132. //      if(strcmp(token,"="))
  133.         if(scan_ptr==NULL)
  134.         {
  135.         // error- expected equals sign not found
  136.         cout << "error- expected equals sign not found" << endl;
  137.         exit(0);
  138.         }
  139.         else
  140.         {
  141.       scan_ptr += 1;
  142. //      strcpy(scanbuf, scan_ptr);
  143.       memmove(scanbuf, scan_ptr, strlen(scan_ptr)+1);
  144.       token = strtok( scanbuf," ;n");
  145.       cout << "token = " << token << endl;
  146.       cout << "breaking" << endl;
  147.       break;
  148.       }
  149.     }
  150.   //cout << "num = " << num << endl;
  151.   cout << "token = " << token << endl;
  152.   strcpy(ret_str, token);
  153.   return(0);
  154. }
  155. //======================================================
  156. int ParmFile::GetParmArrayStr(const char* parm_nam, char* ret_str)
  157. {
  158.   char linebuf[80], scanbuf[80];
  159.   char *pCpos, *token;
  160.   for(;;)
  161.     {
  162.     Input_File->getline(linebuf,80);
  163.     cout << linebuf << endl;
  164.     pCpos = strstr(linebuf,"$");
  165.     if(pCpos != NULL)
  166.       {
  167.       // this is the end of the block and parm has not been found
  168.       cout << "Warning: parameter '" << parm_nam << "' not found" << endl;
  169.       BasicResults << "Warning: parameter '" << parm_nam << "' not found" << endl;
  170.       return(-1);
  171.       }
  172.     strcpy(scanbuf,linebuf);
  173.     token = strtok( scanbuf, " =n");
  174.     if(strcmp(token,parm_nam)) continue;
  175.       cout << "matched " << parm_nam << endl;
  176.       strcpy(scanbuf,linebuf+strlen(parm_nam));
  177.       token = strtok( scanbuf, " 0123456789-+");
  178.       cout << "xfound " << token << endl;
  179.       if(strcmp(token,"="))
  180.         {
  181.         // error- expected equals sign not found
  182.         cout << "error- expected equals sign not found" << endl;
  183.         exit(0);
  184.         }
  185.       //token = strtok( NULL," ;n");
  186.       //cout << "token = " << token << endl;
  187.       cout << "breaking" << endl;
  188.       break;
  189.     }
  190.   //cout << "num = " << num << endl;
  191.   //cout << "token = " << token << endl;
  192.   strcpy(ret_str, linebuf+strlen(parm_nam)+3);
  193.   return(0);
  194. }
  195. //======================================================
  196. int ParmFile::GetIntParm(const char* parm_nam)
  197. {
  198.   int num;
  199.   char parm_str[20];
  200.   if(GetParmStr(parm_nam, parm_str)!=0)
  201.     {
  202.     FindBlock(Block_Name);
  203.     if(GetParmStr(parm_nam, parm_str) !=0)
  204.       {
  205.       ErrorStream <<  "Error: parameter '" << parm_nam 
  206.                   << "' not found after 2 attempts" << endl;
  207.       exit(-1);
  208.       }
  209.     }
  210.   cout << "str = " << parm_str << endl;
  211. //  for(c_ptr=parm_str; c_ptr<parm_str+strlen(parm_str);c_ptr++) {
  212. //   if(!isdigit(*c_ptr)) {
  213. //      ErrorStream << "Error: non-numeric data where numeric expected" << endl;
  214. //      exit(-1);
  215. //      }
  216. //   }
  217.    if(!isnumeric(parm_str)) {
  218.       ErrorStream << "Error: non-numeric data where numeric expected" << endl;
  219.       exit(-1);
  220.       }
  221.   num = atoi(parm_str);
  222.   cout << "num = " << num << endl;
  223.   return(num);
  224. }
  225. //======================================================
  226. int* ParmFile::GetIntParmArray( const char* parm_nam, 
  227.                                 int* array_ptr, 
  228.                                 const int array_len)
  229. {
  230.   int num;
  231.   int idx;
  232.   char *token;
  233.   char parm_str[80];
  234.   if(GetParmArrayStr(parm_nam, parm_str)!=0)
  235.     {
  236.     FindBlock(Block_Name);
  237.     if(GetParmArrayStr(parm_nam, parm_str) !=0)
  238.       {
  239.       ErrorStream <<  "Error: parameter '" << parm_nam 
  240.                   << "' not found after 2 attempts" << endl;
  241.       exit(-1);
  242.       }
  243.     }
  244.   cout << "xxstr = " << parm_str << endl;
  245.   token = strtok(parm_str," ,n");
  246.    if(!isnumeric(token)) {
  247.       ErrorStream << "Error: non-numeric data where numeric expected" << endl;
  248.       exit(-1);
  249.       }
  250.   num = atoi(token);
  251.   cout << "num = " << num << endl;
  252.   array_ptr[0] = num;
  253.   for(idx=1; idx<array_len; idx++)
  254.     {
  255.     token = strtok( NULL, " ,n");
  256.    if(!isnumeric(token)) {
  257.       ErrorStream << "Error: non-numeric data where numeric expected" << endl;
  258.       exit(-1);
  259.       }
  260.     array_ptr[idx] = atoi(token);
  261.     }
  262.   return(array_ptr);
  263. }
  264. //======================================================
  265. double* ParmFile::GetDoubleParmArray(  const char* parm_nam, 
  266.                                 double* array_ptr, 
  267.                                 const int array_len)
  268. {
  269.   double num;
  270.   int idx;
  271.   char *token;
  272.   char parm_str[80];
  273.   if(GetParmArrayStr(parm_nam, parm_str)!=0)
  274.     {
  275.     FindBlock(Block_Name);
  276.     if(GetParmArrayStr(parm_nam, parm_str) !=0)
  277.       {
  278.       ErrorStream <<  "Error: parameter '" << parm_nam 
  279.                   << "' not found after 2 attempts" << endl;
  280.       exit(-1);
  281.       }
  282.     }
  283.   cout << "xxstr = " << parm_str << endl;
  284.   token = strtok(parm_str," ,n");
  285.    if(!isnumeric(token)) {
  286.       ErrorStream << "Error: non-numeric data where numeric expected [GetDoubleParmArray(1)]" << endl;
  287.       exit(-1);
  288.       }
  289.   num = atof(token);
  290.   cout << "num = " << num << endl;
  291.   array_ptr[0] = num;
  292.   for(idx=1; idx<array_len; idx++)
  293.     {
  294.     token = strtok( NULL, " ,n");
  295.    if(!isnumeric(token)) {
  296.       ErrorStream << "Error: non-numeric data where numeric expected [GetDoubleParmArray(2)]" << endl;
  297.       exit(-1);
  298.       }
  299.     array_ptr[idx] = atof(token);
  300.     }
  301.   return(array_ptr);
  302. }
  303. //======================================================
  304. char* ParmFile::GetStringParm(const char* parm_nam)
  305. {
  306.   //int num;
  307.   char parm_str[30];
  308.   char *ret_str;
  309.   if(GetParmStr(parm_nam, parm_str)!=0)
  310.     {
  311.     FindBlock(Block_Name);
  312.     if(GetParmStr(parm_nam, parm_str) !=0)
  313.       {
  314.       ErrorStream <<  "Error: parameter '" << parm_nam 
  315.                   << "' not found after 2 attempts" << endl;
  316.       exit(-1);
  317.       }
  318.     }
  319.   cout << "str = " << parm_str << endl;
  320.   ret_str = new char[strlen(parm_str)+20];
  321.   strcpy(ret_str, parm_str);
  322.   return(ret_str);
  323. }
  324. //======================================================
  325. long ParmFile::GetLongParm(const char* parm_nam)
  326. {
  327.   long num;
  328.   char parm_str[20];
  329.   if(GetParmStr(parm_nam, parm_str)!=0)
  330.     {
  331.     FindBlock(Block_Name);
  332.     if(GetParmStr(parm_nam, parm_str) !=0)
  333.       {
  334.       ErrorStream <<  "Error: parameter '" << parm_nam 
  335.                   << "' not found after 2 attempts" << endl;
  336.       exit(-1);
  337.       }
  338.     }
  339.   cout << "str = " << parm_str << endl;
  340.    if(!isnumeric(parm_str)) {
  341.       ErrorStream << "Error: non-numeric data where numeric expected" << endl;
  342.       exit(-1);
  343.       }
  344.   num = atol(parm_str);
  345.   cout << "num = " << num << endl;
  346.   return(num);
  347. }
  348. //======================================================
  349. float ParmFile::GetFloatParm(const char* parm_nam)
  350. {
  351.   float num;
  352.   char parm_str[20];
  353.   if(GetParmStr(parm_nam, parm_str)!=0)
  354.     {
  355.     FindBlock(Block_Name);
  356.     if(GetParmStr(parm_nam, parm_str) !=0)
  357.       {
  358.       ErrorStream <<  "Error: parameter '" << parm_nam 
  359.                   << "' not found after 2 attempts" << endl;
  360.       exit(-1);
  361.       }
  362.     }
  363.   cout << "str = " << parm_str << endl;
  364.    if(!isnumeric(parm_str)) {
  365.       ErrorStream << "Error: non-numeric data where numeric expected" << endl;
  366.       exit(-1);
  367.       }
  368.   num = float(atof(parm_str));
  369.   cout << "num = " << num << endl;
  370.   return(num);
  371. }
  372. //======================================================
  373. double ParmFile::GetDoubleParm(const char* parm_nam)
  374. {
  375.   double num;
  376.   char parm_str[20];
  377.   if(GetParmStr(parm_nam, parm_str)!=0)
  378.     {
  379.     FindBlock(Block_Name);
  380.     if(GetParmStr(parm_nam, parm_str) !=0)
  381.       {
  382.       ErrorStream <<  "Error: parameter '" << parm_nam 
  383.                   << "' not found after 2 attempts" << endl;
  384.       exit(-1);
  385.       }
  386.     }
  387.    if(!isnumeric(parm_str)) {
  388.       ErrorStream << "Error: non-numeric data where numeric expected" << endl;
  389.       exit(-1);
  390.       }
  391.   num = atof(parm_str);
  392.   cout << "num = " << num << endl;
  393.   return(num);
  394. }
  395. //======================================================
  396. bool ParmFile::GetBoolParm(const char* parm_nam)
  397. {
  398.   bool num;
  399.   char parm_str[20];
  400.   if(GetParmStr(parm_nam, parm_str)!=0)
  401.     {
  402.     FindBlock(Block_Name);
  403.     if(GetParmStr(parm_nam, parm_str) !=0)
  404.       {
  405.       ErrorStream <<  "Error: parameter '" << parm_nam 
  406.                   << "' not found after 2 attempts" << endl;
  407.       exit(-1);
  408.       }
  409.     }
  410.   if(!strcmp(parm_str,"true"))
  411.     num = true;
  412.   else
  413.     num = false;
  414.   cout << "num = " << num << endl;
  415.   return(num);
  416. }