Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从CSV读取并存储在矢量中_C++_Csv_Omnet++ - Fatal编程技术网

C++ 从CSV读取并存储在矢量中

C++ 从CSV读取并存储在矢量中,c++,csv,omnet++,C++,Csv,Omnet++,假设我有以下csv文件: 10.0.0.26 10.0.0.30 10.0.0.34 10.0.0.38 ... ... 假设我有一个向量: std::vector<L3Address> destAddresses; 我尝试了以下方法: std::ifstream data("data.csv"); while(std::getline(data,std::string value){ destAddresses.push_back(value); } 但不知怎么的,这是行不

假设我有以下csv文件:

10.0.0.26
10.0.0.30
10.0.0.34
10.0.0.38
...
...
假设我有一个向量:

std::vector<L3Address> destAddresses;
我尝试了以下方法:

std::ifstream  data("data.csv");
while(std::getline(data,std::string value){
destAddresses.push_back(value);
}

但不知怎么的,这是行不通的

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

此外,要构造
L3Address
,您可以从接受
const char*
的构造函数中获益

std::ifstream  data("data.csv");
std::string value;
while(std::getline(data,value))
{
    destAddresses.emplace_back(value.c_str());
}

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

此外,要构造
L3Address
,您可以从接受
const char*
的构造函数中获益

std::ifstream  data("data.csv");
std::string value;
while(std::getline(data,value))
{
    destAddresses.emplace_back(value.c_str());
}

让我们看看的文档(注1)。这里我们可以看到一个函数
bool3address::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:生成此文档的工具的格式非常糟糕,因此您自己无法获取此文档是情有可原的。

让我们看看的文档(注1)。这里我们可以看到一个函数
bool3address::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:生成此文档的工具的格式设置非常糟糕,因此您无法亲自到这里是情有可原的。

到目前为止您尝试了什么?他做了一个std::move(家庭作业);你说它“不知怎么不起作用”是什么意思?是否存在编译错误?如果是,你读过吗?上面说什么?把它包括在你的问题中是很有用的。或者,它编译了,但崩溃了?何时何地?std::getline(数据,std::string值)-据我所知,您不能在函数调用中声明变量。您需要将
std::string值
转换为
L3Address
对象,然后再将其添加到
L3Address
对象的向量中。由于您没有提供任何关于
L3Address
是什么的信息,我们无法帮助您。到目前为止,您尝试了什么?他做了一个std::move(家庭作业);你说它“不知怎么不起作用”是什么意思?是否存在编译错误?如果是,你读过吗?上面说什么?把它包括在你的问题中是很有用的。或者,它编译了,但崩溃了?何时何地?std::getline(数据,std::string值)-据我所知,您不能在函数调用中声明变量。您需要将
std::string值
转换为
L3Address
对象,然后再将其添加到
L3Address
对象的向量中。由于您没有提供有关
L3Address
是什么的任何信息,我们无法帮助您。AFAIK它不必是别名,只需从
std::string
隐式构造(可转换)。由于问题被标记为
omnet++
,他们很可能在谈论这个类:这个类只能从
const char*
@Attila显式构造,你是对的。然而,它似乎是一种不同于
const char*
的可构造类型-更新了我的答案。@Dusteh您的答案没有问题。上面的答案只是对“Omnet++”(我在问题中提到的一个标记)稍加说明。谢谢,thoughAFAIK它不必是别名,只需从
std::string
隐式构造(可转换)。由于问题被标记为
omnet++
,他们很可能在谈论这个类:这个类只能从
const char*
@Attila显式构造,你是对的。然而,它似乎是一种不同于
const char*
的可构造类型-更新了我的答案。@Dusteh您的答案没有问题。上面的答案只是对“Omnet++”(我在问题中提到的一个标记)稍加说明。谢谢你的想法和它应该的完全一样。值得欣赏的作品和它应该做的一模一样。感激