一个手工读写INI文件的类(二)[3]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 bluebohe 的 blog

     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))

本文关键:ini CMap CMapStringToPtr
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top