【问题标题】:What's a better way to copy a text file?复制文本文件的更好方法是什么?
【发布时间】:2010-11-04 22:36:47
【问题描述】:

我正在将文本从一个文件复制到另一个文件,并进行了某些更改。

我有 input.txt、tmp.txt 和 output.txt。

想法是将几行复制到 tmp.txt(直到我们到达分隔符),将文本从 tmp.txt 移动到 output.txt,擦除 tmp.txt,然后继续循环直到我们到达末尾input.txt。

我在处理 tmp.txt 文件时遇到了问题。在我第一次复制内容后,它停止接受新文本,即使在我关闭、删除并重新打开文件进行写入之后也是如此。我的代码变得非常混乱。

谁能提出一个巧妙的方法来做到这一点? (应对 tmp.txt,从 tmp.txt 复制,擦除 tmp.txt 继续循环)

注意这是我因家庭作业问题而陷入困境的子任务 - 我正在从文本文件中删除 c++ cmets。

编辑:对于任何想知道为什么我需要 tmp.txt 的人:如果程序遇到 */(关闭评论)而没有打开评论,那么它将需要将它之前的所有内容,直到前一个评论,作为评论。我正在使用临时来保存可能是也可能不是评论的文本。如果是 - 我会删除 tmp 中的文本,如果不是,我会将 tmp 中的文本复制到 output.txt。

【问题讨论】:

  • 你能发布你目前所拥有的吗?
  • 没有前面 / 的 / 实际上不是有效的 C 样式注释 - 该要求是作业的一部分,还是您稍后假设/添加它?跨度>
  • 这是作业的一部分。当然是无效的,但这是一个需要处理的错误。

标签: c++ file-copying


【解决方案1】:

如果您使用的是 C++ fstream 的东西,您可能必须在重新打开流时调用 .clear() 以清除错误标志(例如当您点击 EOF 时设置的错误标志)。

【讨论】:

    【解决方案2】:

    我建议你跳过 tmp.txt 文件。只需打开 input.txt 并将数据随机放入 output.txt 就足够了。

    【讨论】:

      【解决方案3】:

      除非实际删除评论是您作业的一部分,否则我建议您编写一些简单的脚本。 Here is a reference to a sed script.

      如果作业涉及删除 cmets,您可以将输入文件作为流运行并在注释中停止写入输出文件。

      • 您可以从检测startend 的评论开始,
        • 为 C 风格的 cmets 和 //,C++ 风格实现此功能
      • 然后,使用堆栈并放大以检测嵌套的 cmets
        • 在这里,您对两种注释样式的嵌套的理解会有所帮助
      • 最后,您可以检测到 #if 0#endif 块——只是为了好玩 :-)

      【讨论】:

        【解决方案4】:

        将 input.txt 作为 istream 打开,将 output.txt 作为 ostream 打开。从回显所有不属于评论的字符的输入开始读取。当您遇到评论时,不要写入输出。应该这样做。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-11
          相关资源
          最近更新 更多