如何删除文本文件中的所有行和单词直到特定点

时间:2019-06-04 08:00:03

标签: c++ visual-studio text-files

我遇到的问题是,我有一个文本文件,其中包含大量的垃圾,而在底部只有几行可容纳我所需的信息。我希望能够删除所有垃圾,只保留有用的信息。

我希望我可以附加文本文件,以便对其进行更好的解释。

有一个与我正在执行的帖子相关的特定帖子,但是我一直关注它,但是它并没有解决我遇到的问题。我已经尝试过数组和许多其他事情,但都行不通。

其中包含类似信息

|83Ïú¯–ŸªÖ!

仅在文本文件的底部具有

000---------

我想保留000之后的所有内容,其余部分我想删除。

1 个答案:

答案 0 :(得分:1)

  • 打开原始文件进行读取。
    std::ifstream fin(orig_filename, std::ios::binary);
  • 打开一个新的临时文件以在同一目录中写入
    std::ofstream fout(temp_filename, std::ios::binary);
  • 在原始文件中搜索标记图案:
    std::string marker = "000---------";
    auto it =
        std::search(std::istreambuf_iterator<char>(fin),
                    std::istreambuf_iterator<char>(), marker.begin(), marker.end());
  • 将其余部分从fin复制到fout(如果找到了模式):
    if(it == std::istreambuf_iterator<char>()) {
        std::cout << "pattern " << marker << " not found\n";
    } else {
        // the iterator "it" is now at the last char in the marker pattern,
        // step over it and copy the rest to fout
        std::copy(++it, std::istreambuf_iterator<char>(),
                  std::ostreambuf_iterator<char>(fout));
    }
  • 将临时文件重命名为与原始文件相同的名称:
    std::rename(temp_filename, orig_filename);

注意:仅在Windows上需要以std::ios::binary模式打开文件。