C++ 如何格式化读取txt文本文档

有以下txt文档:

a, b, c, d,
1, 2, 3, 4
2, 4, 6, 8
3, 6, 6, 9
......
4, 5, 6, 9

注:文本文档中a代表一列的标题,它对应与1,2,3;b对应于2,4,6。
d,之后有一个回车换行符号。各个逗号之后有几个空格。
要求把以上数据以double读入数组中,关键问题是我不能预先知道到底有几组数据需要读入。
所以程序要求自动判断有几组数据,然后a,b,c,d就分别对应几组数据。
最后一组数据的最后一个数后面有一个回车。
要求用ifstream读入C++
并且在VC++中能工作。因为我试了一下,在C++中可以运行,但是到了VC++中就挂了。

(在VC++中做一个简单的button,按一下,就读入数据)......

高手帮忙~
数据是这样的:
Time, V, Ppj, Pps, Pj, Ps, deltaPj, deltaPs, Tj, Ts, Gj, Gs,
3.86, 0, 129.395, -15.2265, 101.833, -25.6052, 25.8532, 0, 14.0808, -82.3029, 42.5309, 0
3.85, 0, 129.948, -20.7693, 106.083, -34.7796, 25.6663, 0, 13.8123, -89.7308, 42.4872, 0
ifstream fin;
ofstream fout;
double temp[1000][13];
int num=0;
int i=0,j=0,u=0;
char ch[20];
fin.open(m_pathin);
fin.getline(ch,1000,'\n');
for(i=1;1;i++)
{
if(!fin.eof())
for(j=1;j<=12;j++)
{
if(j!=12)
{
fin.getline(ch,200,',');
temp[i][j]=atof(ch);
}
if(j==12)
{
fin.getline(ch,200,'\n');
temp[i][j]=atof(ch);
}
}
else
break;
}
u=i-2;
u是读入的数据的行数

问题:为什么u=i-2呢?为什么不是i或者i-1?按道理应该是i-1的......
高手请直接给各VC++的解答,我不关心第一行的字母,只关心下面的数据值。再详细解释一下eof的用法。。。。。。谢谢~

第1个回答  2009-04-03
这道题应该有一个隐藏前提,每一行的数据一样多
你的思路有问题,不必非要用n个数组来存
你先double shuzu[1000]={0};然后读取第一行数据,判断有多少个数,
是a或是b不用管,数出数来存入shuzu[0],然后从第二行你依次读入数据,按次序存入shuzu,就行了,

以后读时,得到第一个数,然后间隔取,就可以还原了。
第2个回答  2009-04-03
fstream 比ifstream好用点,我一般都用它~

char* strFileName = "file.text";
fstream fs;
fs.open(strFileName, ios_base::binary | ios_base::out | ios_base::trunc);

if (fs.is_open())
{
fs.seekp(0, ios::end);
int size = fs.tellg();//获取文件大小
char * buf = new char[size];
fs.seekg(2,ios::beg);//有一个short是文件格式标识
fs.read(buf, size);//数据都在buf里了
char** data = (char**)buf;//强制转换为二维数组,比较好看些
//data[x][0],是a的数据
//data[x][1],是b的数据,再转换成double吧
delete buf;
}本回答被网友采纳
第3个回答  2009-04-03
利用文件读取流就可以了。#include<fstream>
第4个回答  2009-04-03
把程序贴出来看看

C++ 如何格式化读取txt文本文档
你先double shuzu[1000]={0};然后读取第一行数据,判断有多少个数,是a或是b不用管,数出数来存入shuzu[0],然后从第二行你依次读入数据,按次序存入shuzu,就行了,以后读时,得到第一个数,然后间隔取,就可以还原了。

C++中如何读取txt文档中的坐标数据?
std::cout << num << " " << x << " " << y << " " << z << "\\n"; } } std::cout << "总共" << cnt << "个坐标满足条件\\n"; return 0;}输入文件test.txt1 -0.3 0.4 0.82 0.4 1.2 0.93 0.8 0.4 -0.54 1.2 0.5 0.25 0.2 0.75...

相似回答