⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readini.cpp

📁 湖北水文黄石试点集中器代码
💻 CPP
字号:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright (C), 2005, TopBond Tech. Co., Ltd.
* File name:       READINI.CPP
* Module name:     读取配置文件内容的函数的模块
* Author/Date:     WuHuan  06/02/14 
* Version:         Ver 1.0
* Description:     读取配置文件内容的函数的.CPP文件
* Others:          如有改动,请在下面的历史记录登记,谢谢合作!

------------------History-----------------------------
* Modifier/Date:    //修订人及修订日期
* Modify Reason:    //修订原因
* Modification:     //修订的内容和位置的简要说明
------------------------------------------------------
* Modifier/Date:    //修订人及修订日期
* Modify Reason:    //修订原因
* Modification:     //修订的内容和位置的简要说明
------------------------------------------------------
 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>

#include "readini.h"

READINI ReadIni;     //定义一个READINI类的对象

void READINI::GetZero( char *Buf )
{
   int i=0, j=0;
   int Len=strlen( Buf );
   for( i=0; i<Len; i++ )
   {
      if( Buf[i]==' ' )   
      { 
      	  j++;
      	  continue;   //寻找第一个非空的字符
      }
      else
	    {
	        for( i=0; i<strlen(Buf)-j; i++ )
	        Buf[i]=Buf[i+j];  //让Buf首地址存储非空字符
	        Buf[i]='\0';
	        break;
	    }
   }

   if( j==Len )      //如果最后Buf地址的最后一个字节为空
      Buf[0]='\0';   //则把Buf字符串看作空字符串

   for( i=0; i<strlen( Buf ); i++ )
   if( Buf[i]=='\n' )  //如果遇到换行字符
   { 
   	   Buf[i]='\0';    //则把其置为结束标志字符
   	   break;
   }     	
}


// 0: OK
//-1: Can not open file
//-2: No match field found
int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, char *OutStr )
{
   char Buf[300];      //存储配置文件字符串的数组
   int i=0, FLAG=0;
   char *ptr;          
   FILE *Ptr;
   if(( Ptr=fopen(FileName, "rt"))==NULL )
      return -1;

   while( !FLAG )
   {  
   	  /* 从打开的文件中取256个字符存放在Buf地址中,若遇到回车,则取字符动作结束,
   	     文件指针保持在当前位置。*/
      if( fgets( Buf, 256, Ptr )==NULL ) 
	    {                                  
	    	  FLAG=2;                        
	    	  break; 
	    }

      GetZero( Buf );    //把Buf地址最前列的空字符清除掉

      if( !stricmp( Buf, Group ) ) //找到符合要求的组
	    {
	        for( ; ; )
	        {
	            if( fgets( Buf, 256, Ptr )==NULL )
	             break;

	            GetZero( Buf );
	            
              //单元名中不能有'[','<','('等字符 
	            if( Buf[i]=='[' ) { FLAG=2; break; }
	            else if( Buf[i]=='<' ) { FLAG=2; break; }
	            else if( Buf[i]=='(' ) { FLAG=2; break; }

	            ptr=strtok( Buf,"=" );  //取"="号前面的字符到Buf地址中

	            GetZero( ptr );	            

	            if( !stricmp( Item, ptr ) )  //找到符合要求的单元
	            {
	                for( i=0; i<Postion+1; i++ )
		              {
		                  ptr=strtok( NULL,";" ); //遇到";" 字符取字符串动作结束
		                  GetZero( ptr );		                  
		              
		                  if(ptr==NULL)   //"="号后面没字符
		                  { 
		             	       if( FLAG!=1 ) FLAG=2;  
		             	       break; 
		                  }
		                  else
		                  { 
		             	       strcpy( OutStr, ptr );  //把"="号后面的字符传给函数的输出参数
		             	       FLAG=1;   //成功的标志
		                  }
		              }
	             }
	             
	          if( FLAG==1 || FLAG==2 )   break;
	       }
	    }
   }

   GetZero( ptr );

   fclose( Ptr );  //关闭配置文件

   if( FLAG==1 )
      return 0;
   else
      return -2;
}


/**********************************************************************
  
  下列函数是对函数GetField( FileName, Group, Item, Postion, Out_Str );
  的重用,关于函数重用的知识详情请参考C++方面有关文档。
  
**********************************************************************/

// 0: OK
//-1: Can not open file
//-2: No match field found
int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, int &OutStr )
{
   char Out_Str[300];
   int i=GetField( FileName, Group, Item, Postion, Out_Str );

   OutStr = atoi( Out_Str ); //把字符型转换成整形

   return i;
}

// 0: OK
//-1: Can not open file
//-2: No match field found
int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, float &OutStr )
{
   char Out_Str[300];
   int i=GetField( FileName, Group, Item, Postion, Out_Str );

   OutStr = atof( Out_Str ); //把字符型转换成浮点型

   return i;
}


// 0: OK
//-1: Can not open file
//-2: No match field found
int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, long &OutStr )
{
   char Out_Str[300];
   int i=GetField( FileName, Group, Item, Postion, Out_Str );

   OutStr = atol( Out_Str ); //把字符型转换成长整形

   return i;
}


int READINI::GetGroupNum( char *FileName, int &GroupNum )
{
   char Buf[300];      //存储配置文件字符串的数组
   int  FLAG=0;
   char *ptr;          
   FILE *Ptr;
   if(( Ptr=fopen(FileName, "rt"))==NULL )
      return -1;

   while( !FLAG )
   {  
   	  /* 从打开的文件中取256个字符存放在Buf地址中,若遇到回车,则取字符动作结束,
   	     文件指针保持在当前位置。*/
      if( fgets( Buf, 256, Ptr )==NULL ) 
	    {                                  
	    	  FLAG=2;                        
	    	  break; 
	    }

      GetZero( Buf );    //把Buf地址最前列的空字符清除掉
    	   	       
	            ptr=strtok( Buf,"=" );  //取"="号前面的字符到Buf地址中

	            GetZero( ptr );	            
	           	            	              		              
		                  ptr=strtok( NULL,";" ); //遇到";" 字符取字符串动作结束
		                  GetZero( ptr );		                  
		              
		                  if(ptr==NULL)   //"="号后面没字符
		                  { 
		             	       if( FLAG!=1 ) FLAG=2;  
		             	       break; 
		                  }
		                  else
		                  { 
		             	       GroupNum = atoi(ptr ); //把字符型转换成整形
		             	       FLAG=1;   //成功的标志
		                  }
      
	    }   

   GetZero( ptr );

   fclose( Ptr );  //关闭配置文件

   if( FLAG==1 )
      return 0;
   else
      return -2;
}


/////////////////////////////////////////////////////////////////////////////////////////////////
//add by wuhuan on 2006.03.03

int READINI:: WriteField( char *FileName, char *Group, char *Item, char *InStr )
{
   char Buf[300];      //存储配置文件字符串的数组
   int i=0, FLAG=0;
   long len, len1;
   char *ptr;          
   FILE *Ptr;
   if(( Ptr=fopen(FileName, "rt+"))==NULL )
      return -1;
   
   while( !FLAG )
   {  
   	  /* 从打开的文件中取256个字符存放在Buf地址中,若遇到回车,则取字符动作结束,
   	     文件指针保持在当前位置。*/
      if( fgets( Buf, 256, Ptr )==NULL ) 
	    {                                  
	    	  FLAG=2;                      
	    	  break; 
	    }

      GetZero( Buf );    //把Buf地址最前列的空字符清除掉

      if( !stricmp( Buf, Group ) ) //找到符合要求的组
	    {
	        for( ; ; )
	        {
	            if( fgets( Buf, 256, Ptr )==NULL ) 
	             break;
	             
              len = strlen( Buf );
              
	            GetZero( Buf );
	            
              //单元名中不能有'[','<','('等字符 
	            if( Buf[i]=='[' ) { FLAG=2; break; }
	            else if( Buf[i]=='<' ) { FLAG=2; break; }
	            else if( Buf[i]=='(' ) { FLAG=2; break; }

	            ptr=strtok( Buf,"=" );  //取"="号前面的字符到Buf地址中

	            GetZero( ptr );	            

	            if( !stricmp( Item, ptr ) )  //找到符合要求的单元
	            {
	                   	                   
		                  ptr=strtok( NULL,";" ); //遇到";" 字符取字符串动作结束
		                
		                  //GetZero( ptr );		
         
		                  if(ptr==NULL)   //"="号后面没字符
		                  { 
		             	       if( FLAG!=1 ) FLAG=2;  
		             	       break; 
		                  }
		                  else
		                  { 
		                  	 //len2 = strlen( ptr );
		                  	 
		                  	 //len = strlen( Buf );
		                  	 len1 = strlen( Item );
		                  	 
		                  	 //printf("len = %d\n",len);
		                  	 //printf("len1 = %d\n",len1);
		                  	 //printf("ptr=%s\n",ptr);					               
					               fseek(Ptr,-(len-len1),1);
		                  	 fprintf(Ptr,"%s;      ",InStr);             	      
		             	       FLAG=1;   //成功的标志
		                  }
		           }
	             
	          if( FLAG==1 || FLAG==2 )   break;
	       }
	    }
   }

  // GetZero( ptr );

   fclose( Ptr );  //关闭配置文件

   if( FLAG==1 )
      return 0;
   else
      return -2;
}


int READINI::WriteField( char *FileName, char *Group, char *Item,  int InStr )
{  
	 int  i;
   char In_Str[10];
   
   sprintf(In_Str,"%d",InStr);
   
   i = WriteField( FileName, Group, Item, In_Str);

   return i;
}

int READINI::WriteField( char *FileName, char *Group, char *Item,  long InStr )
{  
	 int  i;
   char In_Str[10];
   
   sprintf(In_Str,"%d",InStr);
   
   i = WriteField( FileName, Group, Item, In_Str);

   return i;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -