fancyliujing的个人博客分享 http://blog.sciencenet.cn/u/fancyliujing

博文

VC之读取任意格式的文本文件

已有 9146 次阅读 2009-11-18 19:12 |个人分类:未分类|系统分类:科研笔记| 读取文本文件

   通常我们在处理数据时,会遇到不同格式的的文本文件,那么数据的行数和列数就是变化的,就需要用自动识别的方式找出该文本文件的行数和列数。我大概查看了网上的一些资料,现在把所总结出来的VC代码及要注意的地方写出来,方便以后使用!

  首先我们利用VC的CStdioFile 类来按行读入,利用CString类对象的Find方法找出分隔符,那么利用空格的个数就可以计算出列数,具体代码如下:

CReadFile_Gen::ReadFile(CString str_Open_FilePath,int iSelectRow)
{  
 CString   str_Read;//按行读入的字符串
 CString msg; //无法打开文件时的消息
 CStringArray  strArray;//是个数组
 int i=0,size,pos,return_pos=0;//size:文件的总行数 pos:分隔符号的索引值,从0开始
    CStdioFile fileinput;
 if(!fileinput.Open(str_Open_FilePath, CFile::modeRead|CFile::typeText))
 {  
  msg.Format("无法打开选定文件"+str_Open_FilePath+"!");
  AfxMessageBox(msg);
 }
 
 while(fileinput.ReadString(str_Read)) 
 {
  strArray.Add(str_Read); 
 } 
    fileinput.Close();//一定要关闭文件
    size=strArray.GetSize();  //得到总行数   
    str_Select=strArray[iSelectRow-1];//得到指定的字符串,StrArry索引值从0开始
    iRow=size-iSelectRow+1;//得到指定位置开始到结束的总行数
       str_Select.TrimLeft();
    str_Select.TrimRight();
    while(return_pos!=-1)//没有找到该分隔符时返回值为-1;
    {  
     pos=str_Select.Find(' '); //返回字符串中该符号的索引值,从0开始索引
     if (pos!=-1)
  
     {
     strArray_Data.Add(str_Select.Left(pos)); //提取左边开始读入POS个的字符
     str_Select=str_Select.Right(str_Select.GetLength()-pos);//注意:提取最右边的N个字符
     str_Select.TrimLeft(); //去掉左边的空格                 //每次字符串的长度都在改变,变小
     str_Select.TrimRight();//去掉右边空格
    
     }

         else
   {
    str_Select.TrimLeft(); //去掉左边的空格                  //这里需要读进最后一个字符串,每次需要去掉左右的空格
       str_Select.TrimRight();//去掉右边空格
          strArray_Data.Add(str_Select);
 
   } 
   return_pos=pos;
   iColumn++;
 //AfxMessageBox(strArray_Data[iColumn-1]);
 
    }

}



https://blog.sciencenet.cn/blog-272367-271988.html

上一篇:研究生学习之我见
下一篇:在对话框窗体上创建视图
收藏 IP: .*| 热度|

1 陈儒军

发表评论 评论 (3 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 06:32

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部