str[1].trimleft();
str[1].trimright();
//确认键值和内容数据为空,否则可能是键值和内容中的符号
if(str[0]==""&&str[1]=="")
{
pstrmap=null;
istate=2;
str[2]="";
}else
{
str[istate]+=ch;
}
break;
//处理']'组字符串读入完毕
case ']':
//确认读入的是组的字符串数据
str[2].trimleft();
str[2].trimright();
if(istate==2&&str[2]!="")
{
istate=0;
//新建一个组下的键值-->内容映射,放入该组
pstrmap=new cmapstringtostring;
m_strmapmap.setat(str[2],pstrmap);
}else
{
str[istate]+=ch;
}
break;
case '=':
//开始读入内容
istate=1;
str[1]="";
break;
//处理回车和注释
case ';':
case 0x0d:
case 0x0a:
istate=0;
//键值非空
str[0].trimleft();
str[0].trimright();
str[1].trimleft();
str[1].trimright();
if(str[0]!=""&&pstrmap!=null)
{
pstrmap->setat((lpctstr)str[0],(lpctstr)str[1]);
}
//处理完清空数据
str[0]="";
str[1]="";
//注释的话继续读入直到文件结束或者碰到回车符号
if(ch==';')
{
while((ireadlen=file.read(&ch,1))>0)
{
//如果遇到回车符号,终止,并且将当前位置退回
if(ch==0x0d||ch==0x0a)
{
file.seek(-1,cfile::current);
break;
}
}
}
break;
default:
//普通字符,添加进入相应位置
str[istate]+=ch;
break;
}
}
}
}while(ireadlen!=0);
file.close();
}
//设置当前读取的组
/*
参数: 当前组名称
返回值:无
*/
void ccfgdata::setgroup(lpctstr strgroup)
{
m_strgroup=strgroup;
}
//得到当前组中对应键值中字符串类型的数据
/*
参数: lpctstr strkey 要得到的数据的键值
lpctstr strvalue要得到的数据的内容
返回值:找到数据返回true,否则返回false
*/
bool ccfgdata::getstrdata(lpctstr strkey, cstring &strvalue)
{
cmapstringtostring* pstrmap=null;
//寻找当前组
if(m_strmapmap.lookup(m_strgroup,(void*&)pstrmap))
{
if(pstrmap->lookup(strkey,strvalue))
return true;
return false;
}
return false;
}
//得到long型的数据
/*
参数: lpctstr strkey 要得到的数据的键值
long lvalue 要得到的数据的值
返回值:找到数据返回true,否则返回false
*/
bool ccfgdata::getlongdata(lpctstr strkey, long &lvalue)
{
cstring str;
//得到对应的字符串数据
if(ccfgdata::getstrdata(strkey, str))