从tet读取数值数据(MFC)
来源:互联网 发布:兄弟连李强强网络 编辑:程序博客网 时间:2024/06/05 14:27
今天,小菜在练习中需要从txt格式中读取数据以字符串的形式显示在CListCtrl中,小菜花费了数小时查看很多技术博客都没有很好的结果!由于编码格式的不同,以字符串格式输出的时候,出现乱码,后来发现牛牛写了CFileToArray类用于处理从txt中读取数据到数组中(非常感谢各位牛牛们的无私奉献),小菜进行测试,运行结果可以处理数值数据的读取,现在推荐给大家,希望对大家有用,解除大家的困扰。由于实际应用情况有所差别,小菜至少做了稍小的更改(所以这篇是转载的)
FileToArray.h
class CFileToArray
{
public:
int GetLengthOfData();
int GetNumOfArray();
double GetDataArray(int num); // 读取数组中的数据
CFileToArray();
void Work(CString filename); // 带TXT文件路径参数的构造函数
virtual ~CFileToArray();
private:
CFile DataFile; // TXT文件
int NumOfArray; // TXT文件中包含的数值数据个数
int LengthOfData; // 数值数据字符串的最大长度
double *DataArray; // 存放数值数据的数据,这里用的是DOUBLE型,可以根据自己需要改变
};
FileToArray.cpp
CFileToArray::CFileToArray()
{
}
CFileToArray::~CFileToArray()
{
delete DataArray;
}
void CFileToArray::Work(CString filename)
{
char buf; // 读取文件时的临时变量
int num=0; // 数组元素个数记数
int maxlength=0; // 数组元素的最大长度
int length=0;
char *Temp; // 截取到的每个数据的字符串
DataFile.Open(filename,CFile::modeRead);// 打开文件
while(DataFile.Read(&buf,sizeof(char))) // 读取文件,每次读取一个字节存在buf变量中
{
if((buf>=48&&buf<=57)||buf==46||buf==45)
{
length++; // 统计数据长度
}
else if(buf==13)// 遇到换行跳过无效字节
{
num++; // 统计数据个数
DataFile.Seek(1,CFile::current);
if(length>maxlength)
{
maxlength=length; // 设定数据最大长度
}
length=0;
}
else
{
num++;
if(length>maxlength)// 遇到数据间的分隔符统计数据个数,数据最大长度
{
maxlength=length;
}
length=0;
}
}
LengthOfData=maxlength; // 为类中数据长度变量赋值
NumOfArray=num; // 为类中数据个数变量赋值
DataArray=new double[num]; // 为类中存储数据的数组申请内存空间
Temp=new char[maxlength]; // 为临时存储串申请内存空间
int NumOfTemp=0; // 临时串记的数变量
int IniNumOfDA=0; // 存储数据数组的记数变量
DataFile.SeekToBegin(); // 设定文件读取位置,重新从头读取
while(DataFile.Read(&buf,sizeof(char)))
{
if((buf>=48&&buf<=57)||buf==46||buf==45)
{
Temp[NumOfTemp]=buf;
if(NumOfTemp<maxlength)
{
NumOfTemp++;
}
}
else if(buf==13)
{
DataFile.Seek(1,CFile::current);
if(IniNumOfDA<num)
{
for(int i=NumOfTemp;i<maxlength;i++)
{
Temp[NumOfTemp]=NULL;
}
DataArray[IniNumOfDA]=atof(Temp);
IniNumOfDA++;
NumOfTemp=0;
}
}
else
{
if(IniNumOfDA<num)
{
for(int i=NumOfTemp;i<maxlength;i++)
{
Temp[NumOfTemp]=NULL;
}
DataArray[IniNumOfDA]=atof(Temp);
IniNumOfDA++;
NumOfTemp=0;
}
}
}
DataFile.Close();
delete Temp;
}
double CFileToArray::GetDataArray(int num)
{
return DataArray[num];
}
int CFileToArray::GetNumOfArray()
{
return NumOfArray + 1; // 返回数据个数,并非数组下标
}
int CFileToArray::GetLengthOfData()
{
return LengthOfData;
}
- 从tet读取数值数据(MFC)
- MFC 从文件中读取整数数据
- MFC 利用 CHttpFile类从网页读取 数据
- MFC读取串口数据
- MFC读取文件数据
- MFC读取串口数据
- tet
- tet
- tet
- tet
- tet
- tet
- tet
- MFC从文件中读取数据和向文件中写入数据
- 从命令行读取数据
- 从控制台读取数据
- 从SocketChannel读取数据
- 从SocketChannel读取数据
- HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型
- 【转】定制Eclipse的Content assist(代码补全),比如空格键不上屏
- http协议
- Sevlet概述
- Cookie的优先级,你可能误解的
- 从tet读取数值数据(MFC)
- HTTP协议详解
- [Windowns C]递归遍历指定目录下的子目录和文件
- Servlet
- HTTP请求的细节
- 2012各大公司的C++试题
- 杂谈:淘宝商城“暴动”事件
- CakePHP: 使用Flickr创建定制的相册和增值服务
- WinForm 分屏 [ WinForm | Panel | 视频监控分屏 ]