从文本文件中提取特定值(char & int)并插入多个变量 C++
Extracting specific value (char & int) from a text file and inserting into multiple variables C++
下面是我需要从中提取数据的文件。
auto1
engine: gasoline
max_speed: 250
engine_cc: 1980
avg_consumption_urban: 11
avg_speed_urban: 50
avg_consumption: 8
avg_speed: 100
auto2
engine: diesel
max_speed: 230
engine_cc: 1600
avg_consumption_urban: 9
avg_speed_urban: 50
avg_consumption: 6
avg_speed: 80
auto3
engine: hybrid
max_speed: 190
engine_cc: 1450
avg_consumption_urban: 7
avg_speed_urban: 50
avg_consumption: 4
avg_speed: 90
我需要创建三个自动 objects、auto1、auto2、auto3。
我目前的代码:
[我的代码]http://pastebin.com/2TMhQX9b
我需要修改此方法以跳过 "engine:"、"max_speed:" ... 等并获取这些属性标题之后的信息并将相应的值插入相应的属性中。
我还需要找到一种方法让编译器知道例如在创建 auto2 时从文件中获取 auto2 而不是 auto1 的信息
friend ifstream& operator>>(ifstream& in, Auto &a)
{
delete[]a.engine;
a.engine = new char[10];
in >> a.engine;
in >> a.max_speed;
in >> a.engine_cc;
in >> a.avg_consumption_urban;
in >> a.avg_speed_urban;
in >> a.avg_consumption;
in >> a.avg_speed;
return in;
}
这个问题和我之前的问题不一样。在这里,我需要了解如何从文件中获取数据并将其插入到多个变量中。
解决此问题的一种方法是 read one line(例如 auto1
等),然后使用自定义 operator>>
函数读取对象的实际数据,可能很多就像你已经做的那样。
输入运算符函数需要与您现在拥有的相比稍作更改。你可以像你知道的那样以类似的方式继续,但是你首先需要阅读每一行"tag"(例如engine:
或max_speed:
),最简单的是这样做:
std::string dummy;
in >> dummy >> a.engine;
in >> dummy >> a.max_speed;
我可能不会那样做,因为如果其他程序以错误的顺序写入此文件,与您当前读取的顺序不符怎么办?相反,我可能再次一次 read one line,并将输入分成两个 子字符串 ':'
字符,"tag"或“键和值。然后您可以检查键以查看在结构中分配给什么值。
关于将字符串转换为整数,有一个nice function可以帮助您。
例如:
if (key == "max_speed")
a.max_speed = std::stoi(data);
下面是我需要从中提取数据的文件。
auto1
engine: gasoline
max_speed: 250
engine_cc: 1980
avg_consumption_urban: 11
avg_speed_urban: 50
avg_consumption: 8
avg_speed: 100
auto2
engine: diesel
max_speed: 230
engine_cc: 1600
avg_consumption_urban: 9
avg_speed_urban: 50
avg_consumption: 6
avg_speed: 80
auto3
engine: hybrid
max_speed: 190
engine_cc: 1450
avg_consumption_urban: 7
avg_speed_urban: 50
avg_consumption: 4
avg_speed: 90
我需要创建三个自动 objects、auto1、auto2、auto3。
我目前的代码:
[我的代码]http://pastebin.com/2TMhQX9b
我需要修改此方法以跳过 "engine:"、"max_speed:" ... 等并获取这些属性标题之后的信息并将相应的值插入相应的属性中。
我还需要找到一种方法让编译器知道例如在创建 auto2 时从文件中获取 auto2 而不是 auto1 的信息
friend ifstream& operator>>(ifstream& in, Auto &a)
{
delete[]a.engine;
a.engine = new char[10];
in >> a.engine;
in >> a.max_speed;
in >> a.engine_cc;
in >> a.avg_consumption_urban;
in >> a.avg_speed_urban;
in >> a.avg_consumption;
in >> a.avg_speed;
return in;
}
这个问题和我之前的问题不一样。在这里,我需要了解如何从文件中获取数据并将其插入到多个变量中。
解决此问题的一种方法是 read one line(例如 auto1
等),然后使用自定义 operator>>
函数读取对象的实际数据,可能很多就像你已经做的那样。
输入运算符函数需要与您现在拥有的相比稍作更改。你可以像你知道的那样以类似的方式继续,但是你首先需要阅读每一行"tag"(例如engine:
或max_speed:
),最简单的是这样做:
std::string dummy;
in >> dummy >> a.engine;
in >> dummy >> a.max_speed;
我可能不会那样做,因为如果其他程序以错误的顺序写入此文件,与您当前读取的顺序不符怎么办?相反,我可能再次一次 read one line,并将输入分成两个 子字符串 ':'
字符,"tag"或“键和值。然后您可以检查键以查看在结构中分配给什么值。
关于将字符串转换为整数,有一个nice function可以帮助您。
例如:
if (key == "max_speed")
a.max_speed = std::stoi(data);