我正在做一个项目,我需要读入一个数组,一些180x360的数字网格。所以我试图将它们放入一个类似于180x360x(~5)的3D数组vector<vector<vector<float> > > array;
。
到目前为止,我一直在处理的数据是以空格分隔的,所以我一直在使用这样的代码来做到这一点:
char infileName[] = ".../nasadata/180x360_CLD_FR.dat";
ifstream inFile(infileName);
if (!inFile.is_open()){
cerr<<"Opening failed"<<endl;
exit(1);
}
while (!inFile.eof()){
for(int k=0; k<=360; k++){
for(int j=0; j<=180; j++){
inFile >> array[j][k][3];
cout << array[j][k][3]; // so I can see what it's putting into the array
}
}
}
inFile.close();
之前这个工作正常,但是现在变量用逗号分隔(并且在每行360之后换行)它根本无法读取它们。我一直在尝试使用getline
函数,但其他人提出的问题都不足以让我能够弄明白,因为它们都使用字符串而不是3D数组。
我一直在尝试的另一种方法如下:
string line;
int col = 0;
int row = 0;
while( getline( inFile, line ) )
{
istringstream iss( line );
string result;
while( std::getline( iss, result, ',' ) )
{
array[row][col][3] = atoi( result.c_str() );
cout << array[row][col][3] << " ";
col++;
}
row++;
col = 0;
}
这似乎成功读入了文件,但无法将正确的值放入数组中。它使第一行和最后一行正确,但每隔一行只输入零。
编辑:我需要为一个菜鸟/白痴道歉。这两个代码中的第二个实际上有效,但函数atoi
(我不熟悉)解析字符串并返回整数。改变atof
使其返回适当精确的数字。
希望我的思维过程对任何有类似问题的人都有帮助!