我已尝试在以下情况下使用此选项(temp ==“N/A”||temp=="\0”)函数,但在抛出“std::invalid_argument”what()的示例后,我一直收到调用终止的错误:斯托伊
istream & operator >>(istream & input, wLogVec & data) //overloaded input string op
{
WindLog windLog;
string line;
int count = 0;
while(getline(input, line))
{
if(count!=0)
{
stringstream ss(line);
string temp;
Date date;
Time time;
ss >> date >> time;
for(int i=0; i<9; i++) //skip unnecessary columns
{
getline(ss, temp, ',');
}
getline(ss, temp, ',');
if(temp =="N/A" || temp=="\0")
{
continue;
}
float speed = stof(temp);
getline(ss, temp, ',');
float solRad = (stof(temp));
for(int i=0; i<5; i++) //skip unnecessary columns
{
getline(ss, temp, ',');
}
getline(ss, temp);
float airTemp = stof(temp);
//Add new WindLog object with parameters into wLogVec vector
data.Add(new WindLog(date, time, speed, solRad, airTemp));
}
count++;
}
return input;
}
本人资料如下:
该代码将从某些列中获取输入,当我手动删除csv中的空行时,它将工作,但当存在N/A值或空行时,它将不工作。
1条答案
按热度按时间t5fffqht1#
正如Alan Birtles提到的,你应该使用
temp.empty
而不是temp == "\0"
来检查空值(最好写成'\0'
,但是我不认为这会有什么不同,如果有,请纠正我)基本上,'\0'
并不意味着字符串是空的,'\0'
* 本身就是一个字符,ASCII表中的第一个字符。我在excel工作表中做了一个测试,用随机数导出为csv文件,输出如下:
请注意第二行只有很多逗号,因为逗号之间没有字符,如果实际上有
'\0'
(空终止符)字符,文件将如下所示:如果使用十六进制查看器打开,您实际上可以看到
'\0'
字符:I used HxD因此,总而言之,您不检查
'\0'
字符,而是检查包含test.empty()
的空字符串。