2009-06-22 48 views
0

我正在将文本从一个文件复制到另一个文件,并进行了一些更改。什么是复制文本文件的更好方法?

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

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

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

任何人都可以提出一个干净利落的方式吗? (应对tmp.txt,从tmp.txt复制,擦除tmp.txt继续周期)

N.b.这是一个子任务,我坚持一个作业问题 - 我从文本文件中删除C++注释。

编辑:对于任何想知道为什么我需要tmp.txt的人:如果程序遇到*/(close comment)而没有公开评论,那么它需要将它之前的所有内容都对待,直到之前的评论为止。我使用临时文本来保存可能会或可能不会发表评论的文本。如果是 - 我将删除tmp中的文本,如果没有,我会将tmp中的文本复制到output.txt。

+1

你可以发布你到目前为止? – 2009-06-22 17:54:25

+0

向我们展示代码 – INS 2009-06-22 17:58:17

+0

A * /没有前面的/ *实际上并不是一个有效的C风格评论 - 是需求的一部分,还是您以后假设/添加? – 2009-06-22 20:57:50

回答

1

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

1

我建议你跳过tmp.txt文件。应该足以打开input.txt,只要将数据随意地转换为output.txt即可。

0

除非它是你的功课的一部分,实际上做删除评论,我会建议一些简单的脚本。 Here is a reference to a sed script

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

  • 您可以用检测start和注释的end开始,
    • 对于C风格的注释实现这个和//,C++风格
  • 然后,使用堆栈和扩大检测嵌套注释
    • 在这里,您对两种注释样式的嵌套理解将帮助
  • 最后,你可以检测#if 0#endif块 - 只是踢:-)
2

打开input.txt中作为一个IStream,并output.txt的一个ostream的。开始从输入中读取回应不属于评论的所有字符。当您遇到注释时,请勿写入输出。这应该做到这一点。

相关问题