实例:读取txt文件并解析

来源:互联网 发布:淘宝怎么批量发货 编辑:程序博客网 时间:2024/05/22 23:11

     一、我们得看看,在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);
.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; }
.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; }

             在标准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));//得到第三行数据中的第一项 作为测试
.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; }
     
说明:
    如果文件不是很大的话,用CStdioFile类比较好;若文件很大,如100M左右的txt,则得考虑其他的方法。
    sscanf函数的用法: sscanf(源字符串数据,转换格式,转换后的数据……)--->目的是将字符串按“空格”解析出来
,分别存贮。
    与之差不多的是sprintf函数: sprintf(目的字符串数据,转换格式,要转换的数据……)---->目的是把单个的数据
按照转换格式变成一个字符串
    测试数据: 第一行(三个整数);第二行(两个小数);第三行(两个字符串)

         image

        源程序:openfile_MFC.rar

 

原创粉丝点击