|||
通常我们在处理数据时,会遇到不同格式的的文本文件,那么数据的行数和列数就是变化的,就需要用自动识别的方式找出该文本文件的行数和列数。我大概查看了网上的一些资料,现在把所总结出来的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]);
}
}
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2025-1-8 14:46
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社