如何使用fstream从txt文件中获取数据

how to fetch data from a txt file using fstream

我正在构建一个小型应用程序。在此我将一些数据保存在一个 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;
    }

如有任何帮助,我将不胜感激。

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

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

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