C++ 从CSV读取并存储在矢量中
假设我有以下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); } 但不知怎么的,这是行不
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++”(我在问题中提到的一个标记)稍加说明。谢谢你的想法和它应该的完全一样。值得欣赏的作品和它应该做的一模一样。感激