考虑我有以下csv文件:
10.0.0.26
10.0.0.30
10.0.0.34
10.0.0.38
...
...
考虑我有一个矢量:
std::vector<L3Address> destAddresses;
我想要一段代码,它将读取上面的csv文件,直到最后一个地址,并将每个地址存储在上面的向量中。
std::ifstream data("data.csv");
while(//till the end of file){
//read from csv
//write to vector
}
我尝试了以下内容:
std::ifstream data("data.csv");
while(std::getline(data,std::string value){
destAddresses.push_back(value);
}
但是这不起作用。
答案 0 :(得分:3)
您的示例似乎无法编译。除了缺少的括号外,您使用的getline
函数需要一个变量引用作为第二个参数。因此,您应该在使用前定义value
变量来修复代码。
除了构建L3Address
之外,您还可以从接受const char*
的构造函数中受益。
std::ifstream data("data.csv");
std::string value;
while(std::getline(data,value))
{
destAddresses.emplace_back(value.c_str());
}
答案 1 :(得分:3)
我们来看看L3Address
的文档(注释1)。在这里,我们可以看到函数bool L3Address::tryParse(const char * str)
,它将尝试将C字符串解释为地址,并告诉您它是否成功。
std::ifstream data("data.csv");
std::string line;
while (std::getline(data, line) {
L3Address addr;
if (addr.tryParse(line.c_str())) {
destAddresses.push_back(addr);
}
else
{
// TODO: handle malformed address
}
}
注意1:生成此文档的工具格式非常糟糕,因此您无法亲自到达此处。