【问题标题】:Reading a multiple type line from a text file, and storing them separately? [closed]从文本文件中读取多类型行,并将它们分别存储? [关闭]
【发布时间】:2018-01-26 02:04:22
【问题描述】:

我对此类问题有疑问。 有一个包含未知行数的 .txt 文件,格式如下:

城市名称(最多 30 个字符)温度(浮动)风速(浮动)空气压力(浮动)。

文件中的一行示例: 巴黎-80.81010 其中 Paris 是城市名称,-8 是温度(float),0.8(float) 是风速,1010(float) 是气压。

需要读取所有行,并将每一行存储在具有特定数据类型的结构中。结果需要是一个结构列表。

如何读取这样的行并正确存储所有不同的数据类型而不会丢失信息? 我已经尝试了所有我能想到的方法,但我不知道该怎么做。

【问题讨论】:

  • 此外,城市名称也可以带有数字,因为它可以是该城市气象站的编号。例如 Paris02、Amsterdam21、Berlin03 等
  • 没有分隔符?如果是这样,这是不可能解决的。
  • Iharob Al Asimi,谢谢,但我需要一个想法。 :)
  • 你需要的远不止这些。
  • 如果文件在末尾,fscanf() 会失败,然后你可以检查是否feof()。因为只有在那之后它才会返回 true。

标签: c string types text-files readfile


【解决方案1】:

这个问题取决于信息的结构方式。

例如,如果城市名称总是以字母结尾,您可以确定下一个数字是温度的开始。这很容易。

但这并不总是那么简单。在你的例子中,你怎么知道温度不是-80.81,风速是0,气压是10?

如果没有关于不同变量的可能结构和值的更多信息,您将无法知道。

【讨论】:

    【解决方案2】:

    阅读该行。然后使用以下假设对其进行反向处理:

    • 气压是介于 9xx 和 10xx 百帕斯卡之间的整数,因此最后满足此标准的任何数字都是气压(除非您在火星上);

    • 风速在 0.0 到 80 节之间,除非有飓风。任何符合这个标准的数字就是风速。

    • 温度在 -40 到 +50 之间,除非您在火星、金星或北极或南极。任何满足这个标准的数字都是摄氏温度。

    • 余数为城市名。

    如果没有分隔符,您需要这些假设才能处理该行。解析中的任何错误都是由数据格式引起的。将这些假设传达给数据提供者,让他挑战这些假设。

    【讨论】:

    • 我咨询了一些高年级学生。他们说即使没有在问题中指定它,文件行的写入方式也是在行中的数据之间有空格(空格)。所以重点是让学生得出结论,任何其他方法都无法解决。有了这些信息,问题就很容易解决了:while(feof(FILE*)==0) { fscanf(FILE*, "%s %f %f %f", char* somestring, float1, float2, float3); /* Then store it in a struct */ } 作为代码的一部分。所有这一切都有一个合理的变量名称。非常感谢你们的帮助!
    猜你喜欢
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多