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

时间:2015-12-03 18:14:13

标签: c++ 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;
    }

我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:1)

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

  • 准备struct { size_t pos; size_t width}的数组或向量以定义字段
  • ios::in | ios::out模式
  • 打开文件
  • 使用GotoLine功能一次一行地读取文件,直至您要处理的行
  • 使用tellg
  • 记录fstream中的索引
  • 读取一个字符大于该行的字符数组中的有趣行 - 这里我会使用64就足够大了 - istream::getline
  • 当您将该行读作普通数组时,您可以重写单个字段的字符
  • 返回seekp
  • 行的开头
  • 将该行写回文件

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