【问题标题】:Reading name and number from file and modifying从文件中读取名称和编号并进行修改
【发布时间】:2016-03-27 08:51:02
【问题描述】:

我有一个包含一些球员统计数据的文本文件,应该这样格式化:

name(can be multiple spaces/names) score

例如:

John Andrew Brown 234
Mike Smith 13

我需要一个函数,它接收一个带有人名的 char 数组作为参数,并在文件中找到该人并将其分数加 1。因此,如果函数接收到“Mike Smith”,文件将被修改如下:

John Andrew Brown 234
Mike Smith 14

我不知道如何分别读取名称和编号。如果我用 fgets 阅读,整行都将被阅读,我需要用 fseek 和 ftell 倒带或在行首转。有没有办法直接跳到数字上去修改呢?

【问题讨论】:

  • 它不能通过简单的fseek重写有可能携带因为它不是一个固定大小的记录。

标签: c


【解决方案1】:

首先关于修改具有可变长度记录的文本文件(就像你有的那样),有两种“标准”或“正常”方法:

  1. 您可以以一种或另一种方式将整个文件加载到内存中(例如加载到结构列表中)并修改内存中的副本,然后用(现在已修改的)内存中的副本覆盖整个文件数据。

  2. 由于文件中的每条记录都是一行,因此您可以一次读取一行,并将其写入一个新的 临时 文件,如果您读取记录 (或记录)您要修改您在将其写入临时文件之前进行修改。完成后,关闭原始文件并将临时文件重命名为原始文件。


至于如何分别提取姓名和号码,有几种方法可以做到这一点。一种可能是使用"%[" 格式的fscanf (or sscanf),但很难做到正确。

另一种方法是读取整行,剪掉尾随空格,然后查找 last 空格,并将该行拆分为该位置的两个子字符串。第一个是名称,第二个是数字。

【讨论】:

  • 感谢您的回答。我想第二个选项会做到这一点。但是如果我有非常大的文件(不是我的情况)怎么办?这两种方法都不可行。
  • @rptoma 如果您开始存储大量数据,那么您可能应该考虑使用其他类型的数据存储,例如某种数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 2019-02-08
  • 1970-01-01
  • 2016-09-02
  • 2017-11-19
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多