2009-11-06 47 views
2

在Matlab中,在創建一定數量的行並將其打印到文件後,我需要刪除一行並將其餘數據重寫到同一文件。當我這樣做時,新數據將覆蓋先前的數據,但由於數據比原始數據短,因此仍然存在原始數據的殘餘。有誰知道刪除額外數據的最佳/最有效的方法是什麼?在Matlab中寫入文件時從EOF中刪除字符

這裏是什麼,我試圖做一個簡單的例子:

fid = fopen('file.txt','w'); 
for i=1:10 
    fprintf(fid,'%i\r\t',i); 
end 
frewind(fid); 
for i=3:5 
    fprintf(fid,'%i\r\t',i); 
end 
fprintf(fid,'EOF'); 
fclose(fid); 

我看了所有的地方,但我似乎無法找到解決我的問題。有什麼建議麼?

+0

你在使用什麼平臺(Windows,Mac,Unix)?最好的選擇可能是從MATLAB內部調用一些系統命令。 – gnovice 2009-11-07 01:11:56

+0

我使用Windows和Linux,所以我不想使用系統特定的命令。 – ServAce85 2009-11-07 20:37:57

回答

3

不使用任何臨時文件,你可以做到以下幾點:

fid = fopen('file.txt', 'wt'); 
for i=1:10 
    fprintf(fid, '%i\n', i); 
end 
frewind(fid); 
for i=3:5 
    fprintf(fid, '%i\n', i); 
end 
pos = ftell(fid);    % get current position in file 
fclose(fid); 

% read from begining to pos 
fid = fopen('file.txt', 'r'); 
data = fread(fid, pos); 
fclose(fid); 

% overwite file with data read 
fid = fopen('file.txt', 'w'); 
fwrite(fid, data); 
fclose(fid); 
0

打印「EOF」不起作用 - 不錯的嘗試!

有UNIX系統調用截斷ftruncate,將做到的是,給定的任一一個文件描述符(截斷)或處理(ftruncate)中的第一個參數,並在第二期望的長度。

我想試試看Matlab是否支持ftruncate。否則......如果最壞的情況發生,你可以將文件複製寫入一個新文件,當你點擊你認爲數據結束時停止和關閉新文件。

+0

是的,我打印「EOF」作爲我自己的參考,當我下次打開文件時讀取數據。謝謝。答案是否定的,Matlab(至少在Windows中)似乎不支持ftruncate。 – ServAce85 2009-11-07 20:41:29

0

要使用兩個文件Carl Smotricz's建議跟進,你可以使用MATLAB的DELETEMOVEFILE命令,以避免系統調用:

fid = fopen('file.txt','wt'); 
for i=1:10 
    fprintf(fid,'\t%i\r',i); 
end 
fclose(fid); 

fid = fopen('file.txt','rt'); 
fidNew = fopen('fileNew.txt', 'wt'); 
for i = 1:2 
    s = fgetl(fid); 
    fprintf(fidNew, '%s\r', s); 
end 
for i=4:10 
    fprintf(fidNew, '\t%i\r', i); 
end 
fclose(fid); 
fclose(fidNew); 

delete('file.txt'); 
movefile('fileNew.txt', 'file.txt') 
+0

在這一點上,我寧願不使用多個文件。感謝您的信息,如果我決定走這條路。 – ServAce85 2009-11-07 20:43:21