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

时间:2018-04-17 23:21:10

标签: c++ c++11 parsing stdstring istringstream

我正在读取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”。谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

Input:
0.01 0.02 0.01
0.02      0.02
0.04      0.08

这是输出: enter image description here

#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;
}