`
whusl
  • 浏览: 101162 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

实例:读取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);
<style type="text/css"> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }</style>

<style type="text/css"> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }</style>

在标准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));//得到第三行数据中的第一项 作为测试
<style type="text/css"> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }</style>
     
说明:
    如果文件不是很大的话,用CStdioFile类比较好;若文件很大,如100M左右的txt,则得考虑其他的方法。
 sscanf函数的用法: sscanf(源字符串数据,转换格式,转换后的数据……)--->目的是将字符串按“空格”解析出来
,分别存贮。
与之差不多的是sprintf函数: sprintf(目的字符串数据,转换格式,要转换的数据……)---->目的是把单个的数据
按照转换格式变成一个字符串
测试数据: 第一行(三个整数);第二行(两个小数);第三行(两个字符串)

image

源程序:openfile_MFC.rar

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics