C ++从读取数据中确定空单元格

C++ Determining empty cells from reading in data

我正在从一个 csv 文件中读取数据,该文件的某些列在其他列之前结束,即:

0.01 0.02 0.01
0.02      0.02

我正试图弄清楚如何捕捉这些空位置以及如何处理它们。我当前的代码如下所示:

#include <iostream>
#include <fstream>
#include <sstream>
int main(){

//Code that reads in the data, determines number of rows & columns

//Set up array the size of all the cells (including empty):
double *ary = new double[cols*rows]; //Array of pointers
double var;
std::string s;
int i = 0, j = 0;

while(getline(data,line))
{
    std::istringstream iss(line);    //Each line in a string
    while(iss >> var)                //Send cell data to placeholder
    {
        ary[i*cols+j] = var;
        j+=1;
    }
    i+=1;
}

如何判断单元格是否为空?我想以某种方式将它们转换为 "NaN"。谢谢!

您可以执行如下操作。 逐行获取输入并使用 (std::getline(sstr, word, ' ')),您可以将分隔符设置为 ' ',剩下的就是检查扫描的单词是否为空。

如果为空,我们将其设置为NaN(仅一次)。

Input:
0.01 0.02 0.01
0.02      0.02
0.04      0.08

这是输出:

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>

int main()
{
    std::fstream file("myfile.txt");
    std::vector<std::string> vec;

    if(file.is_open())
    {
        std::string line;
        bool Skip = true;

        while(std::getline(file, line))
        {
            std::stringstream sstr(line);
            std::string word;

            while (std::getline(sstr, word, ' '))
            {
                if(!word.empty())
                    vec.emplace_back(word);

                else if(word.empty() && Skip)
                {
                    vec.emplace_back("NaN");
                    Skip = false;
                }
            }
            Skip = true;
        }
        file.close();
    }

    for(size_t i = 0; i < vec.size(); ++i)
    {
        std::cout << vec[i] << " ";
        if((i+1)%3 ==0) std::cout << std::endl;
    }
    return 0;
}