2011-02-28 49 views
2

我試着寫在代碼:修改記事本的文本

%# Matlab reads a notepad file. 

    f_id=fopen('n1.txt','r'); 
    reports=textscan(f_id, '%s', 'Delimiter', '\n') 
    fclose(f_id) 
    reports_saved=reports{1} ; 
    P='blah blah' 

編輯:

goes to a specific line of the text file. 
X=ftell(f_id) 
Ai=fseek(f_id, 0, 'cof') 
fprintf(f_id,'%s', P); 
fclose(f_id) 

第1行,其中 'COF' 指針結束寫入。現在,問題1:如果新文本比現有文本短,則在覆蓋後保留現有文本中的字符。任何暗示爲什麼? 問題2:'fseek'只允許轉到文件的開始,當前位置或結束。有什麼辦法讓指針隨機移動,就像去文本no4/5一樣。請注意,每個文本在它們之間都有空行。

任何幫助表示讚賞。

+0

@Jacob,@ Andrew,r +肯定有用。我指的是遺留以前文本中的單詞的問題。如果文本的長度不相等,那麼正如安德魯所描述的那樣,這是可以做到的。否則,我找到了一個正在做我想要的Matlab幫助。 http://www.mathworks.com/support/tech-notes/1600/1602.html – Tinglin 2011-03-01 00:03:48

回答

3

的文本文件是一組在磁盤上的連續字節。如果更改文件中間的任何文本段的長度,則需要重寫該文件的所有後續字節,然後截斷或擴展該文件。他們不會自動轉移。這就像插入或從內存中的數組結構中刪除(像C這樣的低級語言,不像Matlab那樣自動調整數組大小),而不是鏈接列表。

直接使用該文件可能是錯誤的做法。 Matlab甚至沒有提供ftruncate()函數,用一段較短的文本替換文本後,需要縮短文件。只要將整個文件讀入內存中的一個數組中,在那裏對其進行處理,然後用fopen(...,'w')將整個文件寫回來,替換原始文件。如果您正在進行面向行的更改,則使用cellstr行數組可能更容易,而不是使用嵌入式行分隔符的大char數組。

2

嘗試使用'r+'打開文件。 'w'只會創建一個新文件並刪除舊文件中的所有內容(如果存在)。

f_id=fopen('fire.txt','r+');

+0

我想,你的意思是,閱讀和寫作的許可。 'r +'在Matlab中找不到'rw'。不幸的是,它沒有提供所需的輸出。 – Tinglin 2011-02-28 01:28:20

+0

我曾在文件中:Sillicon谷歌,谷歌地球和ipad 1.之後,執行,似乎,silblah blah Google earth ipad1,所以,我想,fseek的偏移量需要設置爲0但是,現在的問題是,如何修改任何文本。 fseek有三種選擇,bof,cof和eof。有沒有辦法可以獲得'cof'的隨機值並覆蓋文本? – Tinglin 2011-02-28 01:43:28

+0

找到'rt'。道歉。 – Tinglin 2011-02-28 03:24:33