从文本文件中提取特定值(char& int)并插入多个变量C ++

时间:2015-12-18 21:23:36

标签: c++ file ifstream friend

以下是我需要从中提取数据的文件。

    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

我需要创建三个自动对象,auto1,auto2,auto3。

到目前为止我的代码:

[我的代码] http://pastebin.com/2TMhQX9b

我需要修改此方法以跳过"引擎:"," 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;
        }

这个问题与我之前的问题不同。在这里,我需要了解如何从文件中获取数据并将其插入多个变量中。

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是read one line(例如auto1等),然后使用自定义operator>>函数读取对象的实际数据,可能与您很相似已经。

输入操作符功能需要稍微改变一下。你可以继续像你所知道的那样继续,但是首先需要阅读每一行"标记" (例如engine:max_speed:),最简单的方法是这样做:

std::string dummy;
in >> dummy >> a.engine;
in >> dummy >> a.max_speed;

我可能不会这样做,因为如果某个其他程序以错误的顺序从您当前读取的内容中写入该文件会怎么样?相反,我可能会再次read one line一次,将输入分成':'字符上的两个sub-strings,"标记"或"键和值。然后,您可以检查密钥以查看要在结构中分配的值。

为了将字符串转换为整数,可以使用nice function来帮助您。

例如:

if (key == "max_speed")
    a.max_speed = std::stoi(data);