我想做什么:我需要在void main()中创建3个自动对象。对于每个对象,我都将信息保存在txt文件中。
我如何获取每个对象的信息(引擎,max_speed等)。创建第二个对象时,如何跳过阅读“引擎”以及如何跳过整个汽车。谢谢!
txt文件:(auto.txt)
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
到目前为止,我所拥有的(我使用此代码并使用了更简单的auto.txt版本来阅读和显示-请参见下面的txt文件的简单版本):
这是我在Auto类中的ifstream方法
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;
}
这就是我从void main中的文件读取的方式
ifstream f("auto.txt", ios_base::in);
f >> auto1;
auto1.display();
f.close();
这是我读过的文字。这是简化版本。
gasoline
250
1980
11
50
8
100
在文件格式中,没有有效的方法来定位到给定的记录。记录的大小是可变的,例如,一个引擎速度为100(3个字符),而另一个引擎速度为80(2个字符)。
由于每个字段都在单独的行上,因此您可以阅读每个文本行,在文本开头搜索“ engine”。
这个项目闻起来好像可以使用数据库。
如果必须逐行读取,则最好逐条记录。也就是说,让记录对象从文件中读取其成员。
如果在读取记录之前就获得了文件位置,则可以将信息存储到中,std::map<unsigned int, Engine>
并使用文件指针作为映射中的索引。
我是否说过闻起来像可以使用数据库?
另一个想法是读取所有记录并将其推入记录std::vector
。创建一个std::map<unsigned int, unsigned int>
将向量索引映射到文件位置的。
仍然闻起来像您应该使用数据库。
通过将Engine记录放入向量中,您可以创建其他索引表(数据库可以为您创建索引表)。例如,std::map<string, unsigned int>
将引擎类型映射到矢量索引。
研究数据库理论,尤其是范式。使用数据库时,您将从这些知识中受益匪浅。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句