从CSV读取并存储在Vector中

时间:2018-04-18 13:32:21

标签: c++ csv omnet++

考虑我有以下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);
}

但是这不起作用。

2 个答案:

答案 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:生成此文档的工具格式非常糟糕,因此您无法亲自到达此处。