2013-01-16 33 views
1

指針的位置,假設我有一個文本文件確定文本文件

ID  Name   A1  B1  C1  D1 
1234567 Bob Persie 12.1 33.0  44.0 55.0 
7654321 Tom Hard  12.2 13.0  31.0 3.0 

我需要追加的話:談話的詞:湯姆所以它看起來像這樣

ID  Name   A1  B1  C1  D1 
1234567 Bob Persie 12.1 33.0  44.0 55.0 
7654321 Tomtalking Hard  12.2 13.0  31.0 3.0 

我知道我需要使用readt.seekp函數將指針設置爲單詞「m」後面的位置:Tom。

我無法確定字母'm'的位置。

readt.seekp(position,ios :: beg);

回答

2

您必須重寫整個文件,不能只是像文本編輯器那樣插入一些文本,您只能覆蓋現有內容並追加到文件末尾。

一個可能的解決方案可能是逐行閱讀,按摩線,逐行寫入臨時文件,最後將臨時文件重命名爲原始文件名。

對於按摩,做一個字符串替換。所以:

source = open(sourcename, read-only) 
(temp, tempname) = tempfile(write-only) 

for each line in source: 
    line.replace("Tom", "Tomtalking") 
    temp.write(line) 

close(temp) 
close(source) 
rename(tempname, sourcename) 
+0

我試過了,我可以插入文本到文本文件中。我只是不知道如何決定職位 – Computernerd

+1

你可以在文件中間寫信,是的,但是你會覆蓋你正在寫的職位背後的內容。 – jrok

+0

@jrok:這就是我的意思是「插入」,但我會消除歧義。 –

1

一行一行地讀取整個文件 - 例如對於一個字符串的矢量,做附加你需要和覆蓋文件。與seekp相比,這是一種更常見和簡單的方法。

+0

@WealselFox你是什麼意思? – Computernerd

+0

使用getline逐行讀取文件,將這些行保存到一個向量中,將所需的行更改並將其轉儲迴文件..其簡單易用。 – WeaselFox

+0

更好的書寫方式:更快速(不需要在內存中儲存以保持整個文本在矢量中),並且更清晰(緊密循環讀取,可能翻譯和書寫)。如果您需要對數據進行大量操作,矢量將派上用場;例如,如果你正在編寫一個文本編輯器......但是有更好的數據結構。 – tucuxi