ifstream:跳过包含 NaN 的阅读行
ifstream: Skip reading lines containing NaN
我正在 VS2012 C++ 上使用 ifstream 读取文本文件。有没有一种简单的方法可以跳过包含 "NaN"?
的阅读行
ifstream loadFile;
loadFile.open("data.txt", ios::in);
double x;
int numLine = 3;
int numCol = 4;
vector< vector<int> > data(numLine, vector<int> numCol);
for( int i=0; i< numLine; i++){
for ( int j=0; j< numCol; j++){
loadFile >> x ;
data[i][j] = x;
}
}
文件示例:
2.4 4.6 6.8 0.34
5.34 3.4 NaN 1.1
2 -4 -6 5
您可以使用isnan
函数:http://en.cppreference.com/w/cpp/numeric/math/isnan
很难检测到输入字符串是字面上的 "NaN"
但你可以做到
if (!(loadFile>>x)) // Read might fail on "NaN"
{
loadFile.clear(); // Reset error state
loadFile.ignore(3); // This assumes we only fail on NaN.
}
这只忽略单个输入。当然,如果您的输入可以包含 -NaN
或其他长度为 !=3 的输入,那么您需要更聪明一些。而如果你需要忽略整行,那么你需要在坏行之后重新设置i
。
我正在 VS2012 C++ 上使用 ifstream 读取文本文件。有没有一种简单的方法可以跳过包含 "NaN"?
的阅读行ifstream loadFile;
loadFile.open("data.txt", ios::in);
double x;
int numLine = 3;
int numCol = 4;
vector< vector<int> > data(numLine, vector<int> numCol);
for( int i=0; i< numLine; i++){
for ( int j=0; j< numCol; j++){
loadFile >> x ;
data[i][j] = x;
}
}
文件示例:
2.4 4.6 6.8 0.34
5.34 3.4 NaN 1.1
2 -4 -6 5
您可以使用isnan
函数:http://en.cppreference.com/w/cpp/numeric/math/isnan
很难检测到输入字符串是字面上的 "NaN"
但你可以做到
if (!(loadFile>>x)) // Read might fail on "NaN"
{
loadFile.clear(); // Reset error state
loadFile.ignore(3); // This assumes we only fail on NaN.
}
这只忽略单个输入。当然,如果您的输入可以包含 -NaN
或其他长度为 !=3 的输入,那么您需要更聪明一些。而如果你需要忽略整行,那么你需要在坏行之后重新设置i
。