Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2118802
  • 博文数量: 333
  • 博客积分: 10161
  • 博客等级: 上将
  • 技术积分: 5238
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-19 08:59
文章分类

全部博文(333)

文章存档

2017年(10)

2014年(2)

2013年(57)

2012年(64)

2011年(76)

2010年(84)

2009年(3)

2008年(37)

分类: C/C++

2010-12-06 00:23:05

实例:读取txt文件并解析 

     一、我们得看看,在C++中如何打开一个文件:

    1、得到打开文件的绝对路径:

         MFC中,一般做法如下:

   1:  char  szFilter[] = "文本文件 (*.txt)|*.txt|All Files (*.*)|*.*||";
   2:  CString filePath("");
   3:  CFileDialog fileOpenDlg(TRUE, "txt", NULL,OFN_HIDEREADONLY,szFilter);
   4:  if (fileOpenDlg.DoModal() == IDOK) 
   5:  {
   6:      VERIFY(filePath = fileOpenDlg.GetPathName());
   7:  }
   8:  m_TXTPath=filePath;//得到文件路径
   9:  UpdateData(false);

             在标准C++中,可能只能手动写入(控制台中)

     二、打开文件

      例如:

CString m_FilePath = fileDlg.GetPathName(); //取得文件路径及文件名
CStdioFile f;
f.Open(m_FilePath,CFile::modeRead);
 
CString data;
int count=1;//行号
 
while (f.ReadString(data))    //从文件中读取一行数据,暂存在data变量中
{        
    if(count==1)    //第一行为数值行
    {    
    //将一行中的各个部分存到数组中,%d 表示“十进制数”
        sscanf(data,"%d %d %d",&(MyStruct.t_int[0]),&(MyStruct.t_int[1]),&(MyStruct.t_int[2]));    
    }
    else if(count==2)
    {
    //%lf 表示“双精度浮点数,也就是double”,%f表示“单精度浮点数,float”
        sscanf(data,"%lf %lf",&(MyStruct.t_double[0]),&(MyStruct.t_double[1]));    
    }
    else if(count==3)
    {
        memset(MyStruct.t_ch_1,'\0',10);    //初始化数组,并赋值为'\0'
        memset(MyStruct.t_ch_2,'\0',10);
   //将分隔开的字符串 存到字符数组中
        sscanf(data,"%s%s",&(MyStruct.t_ch_1),&(MyStruct.t_ch_2));    
    }
    count++;
}    
 
 
GetDlgItem(IDC_STATIC)->SetWindowText(_T(MyStruct.t_ch_1));//得到第三行数据中的第一项 作为测试
     
说明:
    如果文件不是很大的话,用CStdioFile类比较好;若文件很大,如100M左右的txt,则得考虑其他的方法。
    sscanf函数的用法: sscanf(源字符串数据,转换格式,转换后的数据……)--->目的是将字符串按“空格”解析出来
,分别存贮。
    与之差不多的是sprintf函数: sprintf(目的字符串数据,转换格式,要转换的数据……)---->目的是把单个的数据
按照转换格式变成一个字符串
    测试数据: 第一行(三个整数);第二行(两个小数);第三行(两个字符串)

         image

        源程序:

阅读(6985) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-07 09:53:50

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com