C++ C++;getline()在第二次迭代中未获取分隔符
因此,我有一些数据表如下所示:C++ C++;getline()在第二次迭代中未获取分隔符,c++,delimiter,getline,C++,Delimiter,Getline,因此,我有一些数据表如下所示: "1444394028","1","5339","M","873" "1444394028","1","7045","V","0.34902" "1444394028","1","7042","M","2" "1444394028","1","7077","V","0.0470588" 我使用此方法分离数据: int i = 0; std::ifstream dataInput(path); std::string line2; char delimeter
"1444394028","1","5339","M","873"
"1444394028","1","7045","V","0.34902"
"1444394028","1","7042","M","2"
"1444394028","1","7077","V","0.0470588"
我使用此方法分离数据:
int i = 0;
std::ifstream dataInput(path);
std::string line2;
char delimeter(',');
std::string timestampTemp, millisecondsSinceStartTemp, deviceTemp, typeTemp, valueTemp;
while (std::getline(dataInput, timestampTemp, delimeter)) {
while (i < 3) {
std::vector<struct struct_t> writedata(1);
std::getline(dataInput, millisecondsSinceStartTemp, delimeter);
std::getline(dataInput, deviceTemp, delimeter);
std::getline(dataInput, typeTemp, delimeter);
std::getline(dataInput, valueTemp);
std::cout << "TEST " << timestampTemp << " ...." << millisecondsSinceStartTemp << " ....." << deviceTemp << "..... " << typeTemp << "...... " << valueTemp << endl;
writedata[0].timestamp = atoi(timestampTemp.substr(1, timestampTemp.size() - 2).c_str());
std::cout << "!" << endl;
writedata[0].millisecondsSinceStart = atoi(millisecondsSinceStartTemp.substr(1, millisecondsSinceStartTemp.size() - 2).c_str());
std::cout << "!" << endl;
writedata[0].device = atoi(deviceTemp.substr(1, deviceTemp.size() - 2).c_str());
std::cout << "!" << endl;
writedata[0].value = atof(valueTemp.substr(1, valueTemp.size() - 2).c_str());
std::cout << "!" << endl;
writedata[0].type = (typeTemp.substr(1, typeTemp.size() - 2).c_str());
std::cout << "!" << endl;
std::cout << "-data to be written: " << writedata[0].timestamp << " - " << writedata[0].millisecondsSinceStart << " - " << writedata[0].device << " - " << writedata[0].value << " - " << writedata[0].type << endl;
this->append(writedata.data(), &i);
timestampTemp.clear();
millisecondsSinceStartTemp.clear();
deviceTemp.clear();
typeTemp.clear();
valueTemp.clear();
i++;
}
}
正如您所看到的,第二次迭代不起作用,我也说不出原因。我已经让它工作了,但看起来我毁了它。与其他解决方案不同,文件中也没有空格。一如既往,我将非常感谢您的帮助。为什么您有嵌套的while循环?内环看起来不必要,仅用于测试目的。查看前3次迭代的行为。OK。最有可能的是,这正是让您陷入困境的原因,因为在接下来的三次迭代中,您没有执行
std::getline(dataInput、timestampTemp、delimeter)
。如果要调试代码,可以使用调试器,只需遍历代码即可。@NathanOliver修复了它。谢谢
TEST "1444394028" ...."1" ....."5339"..... "M"...... "873"
!
!
!
!
!
-data to be written: 1444394028 - 1 - 5339 - 873 - M
TEST ...."1444394028" ....."1"..... "7045"...... "V","0.34902"