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;
}
我正在从一个 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;
}