VC++,读取txt文件数据,并存入数组中。

我有一个txt文件,里面每行8个数据,用逗号隔开的。一共近2万行。每一行的第i个数据都是对应的同一类型数据,比如说的角度的变化,温度变化之类的。
所以分别读出后的操作是,比如把每一行第一个数据赋值同一个一维数组里面,m[0]等于第一行第一个数据,m[1]等于第二行第一个数据。。。n[0]等于第一行第二个数据,n[1]等于第二行第二个数据。。。以此类推。。。
下面放出我的txt的文件的其中几行作为例子:
90,86,-89,0,-3145,0,5,5
90,77,-90,0,-3149,0,5,5
90,72,-90,0,-3153,0,5,5
90,67,-90,0,-3156,0,5,5
90,60,-90,0,-3160,0,5,5
90,65,-90,0,-3163,0,5,5
90,62,-90,0,-3167,0,5,5
90,59,-90,0,-3170,0,5,5
90,51,-90,0,-3174,0,5,5
90,57,-90,0,-3177,0,5,5
90,57,-90,0,-3181,0,5,5
90,65,-90,0,-3185,0,5,5
90,60,-90,0,-3188,0,5,5
90,62,-90,0,-3192,0,5,5
90,69,-90,0,-3195,0,5,5
90,64,-90,0,-3199,0,5,5
90,69,-90,0,-3202,0,5,5
......
.....
....

我是C++刚接触一周的菜鸟。。请写出详细的代码。。万分感谢。。新人分不多,各位高手帮帮忙!!感谢!!!

#include <iostream>
using namespace std;
#define FRISTCLM 30000
#define SECONDCLM 8
//参数 Filename 为要读的文件名,如:readdd.txt 。
int ReadFileToBUF(char * Filename,int bufdd[][SECONDCLM],int len)
{
FILE *fp=fopen(Filename,"r");
if(fp == NULL)
return 0;
char buf[256],numberbuf[10];
char * cur,* p;
int index,index1;
int temp[SECONDCLM];
int allcount=0;
while(!feof(fp))
{
memset(buf, 0, 256);
fgets(buf, 256, fp);

//去掉最后一个字符,可能是换行符
index=strlen(buf);
if(index>0)
{
if(buf[index-1]=='\n' || buf[index-1]=='\r')
buf[index-1]=0x00;
}
else
continue;
cur=buf;
if(!cur)
break;
while(*cur==' ')//去右边空格
cur++;
p=cur;
cur=strstr(cur,",");

index=cur-p;
memset(numberbuf,0,10);
memcpy(numberbuf,p,index);
temp[0]=atoi(numberbuf);
index1=1;
cur++;
while(*cur)
{//开始分析
// ctrlCombox.AddString(strcom);
p=cur;
cur=strstr(cur,",");
if(!cur)
{
if(index1 <SECONDCLM)
temp[index1]=atoi(p);
index1++;
break;
}
index=cur-p;
memset(numberbuf,0,10);
memcpy(numberbuf,p,index);
if(index1 <8)
temp[index1]=atoi(numberbuf);
cur++;
index1++;
}
if(index1==SECONDCLM)//读出来有误的不保存,缺少,或多了的也不保存
{
if(len>allcount)
{
for(int i=0;i<SECONDCLM;i++)
bufdd[allcount][i]=temp[i];
}
allcount++;
}
}

fclose(fp);
return allcount;
}
void showallbuf(int buf[][SECONDCLM],int len)
{
for(int k=0;k<len;k++)
{
for(int i=0;i<8;i++)
{
std::cout<<buf[k][i]<<" ";
}
std::cout<<std::endl;
}
}
int main()
{
int buf[FRISTCLM][SECONDCLM]={0};
int count=ReadFileToBUF("readdd.txt",buf,FRISTCLM);
showallbuf(buf,count);
return 0;
}追问

谢谢你,我这个问题自己已经解决了,再追问一个,能不能把一个已经是基于对话框的MFC程序转换成 基于多文档 的呢?? 如果新建了一个单文档的MFC,怎么让它点了菜单项之后弹出一个我之前编好的对话框。

追答

不能直接导。你可以在多文档中再新建一个对话框。然后把对话框的ID改成你之前 对话框的ID。在多文档工程中,打开原来对话框的.rc资源文件,复制.rc资源文件中你要的对话框上面的控件。然后把 对话框的.h .cpp文件夹复制到多文档工程下,在多文档工程中添加这两个文件,就行了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-21
#include <iostream>
using namespace std;
int main()

int a1[];int a2[];int a3[];int a4[];int a4[];int a5[];
int a6[];int a7[];int a8[];
cout<<"请依次输入每行的数据"<<endl;
for(int i=0;i<200000;i++)
{
cin>>a1[i]>>a2[i]>>a3[i]>>a4[i]>>a5[i]>>a6[i]>>a7[i]>>a8[i];
cout<<endl;
}
for(int i=0;i<200000;i++)
{
cout<<"你的输入是:"
cout<<a1[i]<<" ,"<<a2[i]<<'',"<<a3[i]<<“,"<<a4[i]<<","<<a5[i]<<","<<a6[i]<<","<<a7[i]<<","<<a8[i]<<endl;
}
return ;0

这个程序实现了你的要求,并且输出的结果和你的文档排版一样!
上机运行通过,望采纳!
第2个回答  2012-03-21
#include <iostream>
#include <fstream>

using namespace std;

#define MAXLINES 20000
#define NUMDATA 8

int main() {
int a[MAXLINES][NUMDATA],n = 0;
ifstream fin("data.txt");
if(!fin.is_open()) {
cout << "打开文件data.txt错误!\n";
exit(1);
}
while(fin >> a[n][n % NUMDATA]) n++;
if(fin.good()) cout << "数据读取完毕!\n";
else if(fin.fail()) cout << "读入数据错误。\n";
else cout << "未知错误。\n";
// ...........................
// 处理数据代码
// ...........................
fin.close();
return 0;
}
相似回答