2012-11-23 41 views
2

我想總結我用fprintf創建的文件。我有包含像這樣5個文本文件(1列8行):文件總和內容matlab

0.1811 
0.0889 
-0.1073 
-0.0777 
-0.0596 
0.0971 
0.1021 
0.3730 

我想這些文件加載​​到工作區,總結這些列。我可以總結兩個文件的列,但最後3個文件總和只適用於最後一行(第8行)。我知道這與加載和打開文件有關。最後兩個文件被加載:

SumFid=fopen(MyFile,'a'); %this is how my 2 files work opened 
FID=fopen(FirstFile); 
MatrixSub = load(FirstFile); 
m = textscan(FID,'%f %f %f %f %f %f %f'); 
horzcat(m{:})  

而其他3個文件我使用:

Wfid=fopen(VFile,'a'); 
Mat = load(VFile); 
VData = fscanf(Wfid,'%f',[8,1]); 

當我嘗試使用相同的texscanhorzcat與前兩次它給錯誤的內存不足,但後者的代碼,只當我試圖總結這些文件內容的最後一行:

for i = i:8 
    Sum = A+B % this from first 2 files works 
    Sum3Files = file1+file2+files3;   
end 

我知道它看起來可能很平凡,但我是MATLAB新手,很感激你的幫助。

+0

我沒有手頭有Matlab的權利,但該行'Wfid = FOPEN(VFile, 'A');'會打開一個文件追加,嘗試'r'閱讀。在最後的代碼循環沒有依賴於我(你可能也想用另一個字母,因爲我是sqrt(-1)) –

+0

嗨,謝謝你的回答。我嘗試'r'而不是'a',但仍然一樣。我也undertsand循環中的東西不涉及我,但我不知道如何編寫它,因此它總結行所有文件。它爲以前的位代碼,我用'horzcat',所以我在這裏嘗試相同的工作。我不知道如何將我與文件內容聯繫起來 - 我想這不適合。 – mil

回答

0

我覺得這樣的事情是你追求的:

total = 0; 
files = {'data.txt' 'data2.txt'}; % add more files here 

for ii = 1:numel(files) 

    fid = fopen(files{ii}); 
     C = textscan(fid, '');   
    fclose(fid); 

    total = total + [C{:}]; 

end 
+0

嗨,感謝您的幫助。我試過這個提示。我可能並不清楚對不起。我需要逐行排列元素的總和。這裏的「總數」最後給我一個數字,即所有元素的總和。而我想得到1列和8行的矩陣..換句話說,如果你看我的問題的第一位,我需要類似的輸出。這意味着逐行進行總和。所以總數應該是8行1列。 – mil

+0

@ user1822224:嘗試使用我最近編輯的版本。 –

+0

:非常感謝您的幫助!這次運作良好。學習如何將文件放入數組以便在讀完之後非常有用,我將再次使用它。多謝了。 – mil