使用C ++将CSV文件读入3D数组

时间:2013-11-26 15:30:24

标签: c++ arrays csv vector

我正在做一个项目,我需要读入一个数组,一些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使其返回适当精确的数字。

希望我的思维过程对任何有类似问题的人都有帮助!

0 个答案:

没有答案