从 CSV 中读取并存储在 Vector 中

Reading from CSV and storing in a Vector

假设我有以下 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);
}

但这不知何故不起作用。

您的示例似乎无法编译。除了缺少括号之外,您使用的 getline 函数还需要一个变量引用作为第二个参数。因此,您应该在使用前通过定义 value 变量来修复您的代码。

此外,为了构建 L3Address,您可以从接受 const char*.

的构造函数中获益
std::ifstream  data("data.csv");
std::string value;
while(std::getline(data,value))
{
    destAddresses.emplace_back(value.c_str());
}

我们去看看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:生成此文档的工具对其格式设置非常糟糕,因此您无法亲自访问此处是情有可原的。