【问题标题】:Reading information from a text file and properly storing it in arrays, int [duplicate]从文本文件中读取信息并将其正确存储在数组中,int [重复]
【发布时间】:2014-08-01 15:40:48
【问题描述】:

我想要一段 C++ 代码,它从文本文件中读取并将信息保存在一些变量、数组中......

例如,假设我们有一个文件 Numbers.txt,其中包含 4 个整数。到目前为止我发现的一个示例代码(并没有为我做这个把戏)看起来像这样:

string weight, height, width, depth;
ifstream MyFile("Numbers.txt");
MyFile >> weight;
MyFile >> height;
MyFile >> width;
MyFile >> depth;

但它只读取单条数据,以空格分隔。

我希望代码能够读取可以在同一行中的多条数据。澄清一下,这是一个文本文件格式的示例......

FileName
ProjectName
Names
IDs

以及文本文件实际内容的示例...

// SomeData.txt 
FileName: SomeData.txt
ProjectName: Second Attempt // should be able to read with spaces too, and save in a string as "Second Attempt" 
Names: John, Frank, Mike // I guess it could be without commas too
IDs: 42, 505, 1591, 4358, 12, 743

所以主要问题是程序在阅读时跳到下一行,并忽略“名称:”,“ID”等“关键字”......同时准备阅读尽可能多的条目排成一行,即使事先没有任何信息说明会有多少。

刚才读到的信息最好这样保存:

FileName -> string
ProjectName -> string
Names -> array of strings
IDs -> array of integers

这样的代码示例会是什么样子?

【问题讨论】:

  • 从行中读取数据,直到到达新行,每条数据用逗号或空格分隔。这可以通过使用循环来完成,条件是“当输入不等于结束行字符时”和事件“将数据放入数组中,用逗号分隔”如果你想使用外部库作为@NetVipeC 指出你可以使用 boost。不过,创建自己的 split 函数相对容易。
  • 您可以read this 相关问题。总结:使用std::getline逐行读取,boost::split通过分隔符分割行。在这种情况下,您可以用: 拆分,然后再用, 拆分第二个字符串。
  • 从文本文件中读取数据的例子太多了,发帖前应该先搜索一下。

标签: c++ arrays file file-io fstream


【解决方案1】:

我的回答不完整,但这里概述了我将如何解决这个问题:

当您使用ifstream 时,您可以使用名为getline 的函数一次获取整行并将其存储在char 数组中。

然后您可以使用诸如strtok 之类的函数来拆分该行,因为我注意到数据位于: 字符之后。

此时,您可以根据: 之前的字符串创建switch 语句,并适当地处理您的数据。例如,如果您有 IDs,则使用 atoi 将它们转换为 ints 并将它们存储在数组等中。

【讨论】:

    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多