2013-07-31 56 views
0

我正在用C++編寫一個工資單程序,需要能夠讀取文件中的行,進行計算,然後覆蓋文件中的讀取行。是否有一個函數/方法,我可以簡單地覆蓋特定的行,插入新的行,添加到現有文件的末尾?用C++覆蓋CSV文件中的一行

+1

由於您想讀取和寫入某些行,您應該考慮讀取和寫入文本文件。在std庫中的fstream處理一個gander。 http://www.cplusplus.com/doc/tutorial/files/ –

+0

這聽起來像是一種可以用腳本語言解決的問題。這會是一個可行的選擇嗎? – Gnosophilon

+0

如果可能的話,我會建議您使用SQL數據庫 – Lochemage

回答

1

沒有C++功能來在文本文件中「插入」或「刪除」文本。要做到這一點的唯一方法是讀取現有文本,並寫出修改後的文本。

如果新文本與舊文件放在同一個空間中,您只需要覆蓋現有文本 - 當然,您可以在.CSV文件中的逗號前/後添加額外的空格,沒有它成爲「領域」的一部分。但是如果新數據更長,肯定不會「覆蓋到位」。

使用ios_base::ate修飾符添加到最後是相對容易的。但插入中間仍然涉及到基本閱讀,直到找到相關位置,然後,如果新文本更長,則必須先閱讀以下所有行,然後才能寫出新的文本。

+0

所以如果我覆蓋特定的行它需要是相同長度的字符?或者它需要是相同長度的字符串(包括值/逗號) – user2611318

+0

整行必須是完全相同的字符數,否則舊行中的某些「剩餘」將保留在文件中(如果新行較短),或下一行(的一部分)將被覆蓋(如果新行比舊行更長)。在典型情況下,我會將每行讀入一個數組,然後修改該數組中的相關行[換句話說'std :: vector'],並將其重新寫回。 [數組可能是每行一個字符串,或者每個元素類型的向量,它們是相同的,或者某種類型的結構 - 取決於您輸入的內容...] –

+0

好的非常感謝,這有很大幫助。最後一個問題對我有很大幫助,可以根據我的程序中的行數創建數組嗎? – user2611318