我正在读取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”。谢谢!
答案 0 :(得分:0)
您可以执行以下操作。
逐行获取输入并使用(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;
}