2009-06-22 90 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的。開始從輸入中讀取回應不屬於評論的所有字符。當您遇到註釋時,請勿寫入輸出。這應該做到這一點。

相關問題