【问题标题】:how to fetch data from a txt file using fstream如何使用 fstream 从 txt 文件中获取数据
【发布时间】:2015-12-03 18:14:12
【问题描述】:

我正在构建一个小型应用程序。在此,我将一些数据保存在 txt 文件中。我需要编辑特定行和列中的值。我编写了一个代码来转到特定行并获取值,但我几乎尝试了所有方法来获取特定列并编辑该值。

1000 400 120 110 800 110 150 500 0 1000 1000 400 90 150 800 120 150 600 0 1000 1000 400 80 60 **800** 132 150 700 0 1000 1000 400 120 60 800 123 150 200 0 1000 1000 400 111 80 800 143 150 700 0 1000 1000 400 30 90 800 155 150 500 0 1000

例如,我编辑了突出显示的值,这是最好的方法。我无法粘贴我的整个代码,因为它很长。 这是我可以去特定线路的地方

fstream& GotoLine(int num) {

infile.seekg(std::ios::beg);

            for (int i = 0; i < num - 1; ++i) {
                    infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            }
            return infile;
    }

我将不胜感激。

【问题讨论】:

标签: c++ fstream


【解决方案1】:

假设您的文件格式为固定列大小,我的建议是:

  • 准备一个数组或struct { size_t pos; size_t width} 的向量来定义字段
  • ios::in | ios::out模式打开文件
  • 使用GotoLine 函数一次读取文件一行,直到要处理的行
  • tellg注意fstream中的索引
  • 在 char 数组中读取有趣的行,其大小大于行 - 这里我会使用 64 足够大 - 使用 istream::getline
  • 由于您已将该行作为普通数组读取,因此您可以重写单个字段的字符
  • 回到行首seekp
  • 将该行写回文件

不是编辑文本文件的一般方法。它只在这里有效,因为因为您有固定大小的字段,编辑后的行与原始行的大小完全相同,因此可以在原地重写。但永远不要在一般情况下使用它。

【讨论】:

  • 非常感谢谢尔盖。我会试试这个。
猜你喜欢
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
相关资源
最近更新 更多