📄 readini.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 + -