關於matlab向文件寫入數據的方法——留著備用
MATLAB數據采集的時候,往往需要把得到的數據保存下來。
fid = fopen(文件名,‘打開方式’);
說明:fid用於存儲文件句柄值,如果fid>0,這說明文件打開成功。打開方式有如下選擇:
‘r’:只讀方式打開文件(默認的方式),該文件必須已存在。
‘r+’:讀寫方式打開文件,打開後先讀後寫。該文件必須已存在。
‘w’:打開後寫入數據。該文件已存在則更新;不存在則創建。
‘w+’:讀寫方式打開文件。先讀後寫。該文件已存在則更新;不存在則創建。
‘a’:在打開的文件末端添加數據。文件不存在則創建。
‘a+’:打開文件後,先讀入數據再添加數據。文件不存在則創建。
另外,在這些字符串後添加一個“t”,如‘rt’或‘wt+’,則將該文件以文本方式打開;如果添加的是“b”,則以二進制格式打開,這也是fopen函數默認的打開方式。
一、如果只是單純的一個變量,可以像下面這樣寫。g2ggg是文件命名,txt文件(當然可以改成其他文件格式),這個是matlab自動保存在工作文件下的,baocun是我們要保存的變量。%d代表整數,、\r\n 代表每寫入一次數據換行。
fid = fopen(‘g2ggg.xls‘,‘a‘); fprintf(fid,‘%d \t ‘,baocun); fprintf(fid,‘\r\n‘); % 換行 fclose(fid);
其中:
fid = fopen(‘g2ggg.xls‘,‘a‘);
這句裏面的‘a’代表後續寫入。這樣每次重新運行程序都不會替換之前保存的數據,還是保存在之前保存過的文件夾裏面,接著之前的數據繼續保存。
但是如果這個地方是‘w’,則代表寫入,它寫一次數據都會覆蓋之前的數據,最後你會發現txt文件裏面只保存了一個數據。除非你在程序中定義一個矩陣,把這些數據每次存在矩陣裏面,到最後一次性保存這個矩陣,這些數據才會全部保存下來,但是切記你這次保存前的那個txt文件夾會被這次這個文件夾替換,除非你這次文件夾命名和上次不同。
二、如果是保存矩陣,可像下面這樣寫。save_data是文件命名,txt文件,這個是matlab自動保存在工作文件下的,baocun是我們要保存的矩陣。%d代表整數,、\r\n 代表每寫入一次數據換行。
fid = fopen(‘save_data.txt‘,‘a‘); [r,c]=size(baocun); for i=1:r for j=1:c fprintf(fid,‘%5f\t‘,baocun(i,j)); end fprintf(fid,‘\r\n‘); end fclose(fid);
其中 :
fid = fopen(‘save_data.txt‘,‘a‘);
這句裏面的‘a’代表後續寫入。這樣每次重新運行程序都不會替換之前保存的數據,還是保存在之前保存過的文件夾裏面,接著之前的數據繼續保存。
但是如果這個地方是‘w’,則代表寫入,它每寫一次數據都會覆蓋之前的數據,最後你會發現txt文件裏面只保存了一個數據。除非你在程序中定義一個矩陣,把這些矩陣每次存在定義的這個矩陣裏面,到最後一次性保存這個矩陣,這些數據才會全部保存下來,但是切記你這次保存前的那個txt文件夾會被這次這個文件夾替換,除非你這次文件夾命名和上次不同。
三、前面兩種情況都是matlab自動保存的工作路徑下的,如果我們需要matlab自動保存在指定路徑下怎麽辦呢?可以像下面這樣寫:
fid = fopen(‘C:\Users\Desktop\g2ggg.txt‘,‘a‘); fprintf(fid,‘%d,%d,%d \r\n ‘,baocun);
其中
C:\Users\Desktop\
代表保存路徑,這裏保存在電腦桌面。 四、如果需要手動輸入保存路徑,可以像這樣寫:
[FileName,PathName]=uiputfile({‘*.txt‘,‘Txt Files(*.txt)‘;‘*.xls‘,‘Excel(*.xls)‘;‘*.*‘,‘All Files(*.*)‘},‘choose a File‘); %% pathname獲取保存數據路徑, filename獲取保存數據名稱 if ~FileName return; else str= [PathName,FileName]; fid = fopen(char(str), ‘w‘); % 要想存的文件名是自己輸入的,這個地方就得這樣寫 fwrite(fid, ‘‘, ‘integer*4‘); [r,c]=size(baocun); % 得到矩陣的行數和列數 for i=1:r for j=1:c fprintf(fid,‘%d\t‘,baocun(i,j)); end fprintf(fid,‘\r\n‘); end fclose(fid);
一般這樣都是采集完成後由手工保存的,在這裏保存的是矩陣,因為矩陣裏面記錄了之前每次的數據,所以采集完成後,一次性保存矩陣就可以保存所有數據了,一般這段代碼在GUI裏面添加按鈕的回調函數裏面。每次按下按鈕就會彈出窗口讓輸入文件名以及選擇保存路徑。 這裏增加了這段代碼,又修改了一小部分代碼,認真看就知道了。
[FileName,PathName]=uiputfile({‘*.txt‘,‘Txt Files(*.txt)‘;‘*.xls‘,‘Excel(*.xls)‘;‘*.*‘,‘All Files(*.*)‘},‘choose a File‘); %% pathname獲取保存數據路徑, filename獲取保存數據名稱 if ~FileName return; else str= [PathName,FileName]; fid = fopen(char(str), ‘w‘);
五、如果有需要保存字符串數組的話:
baocun={‘R‘,‘G‘,‘B‘,‘Xdata‘};
這個是包含字符串的數組baocun,
1 fid = fopen(‘save_data.txt‘,‘a‘); 2 fwrite(fid, ‘‘, ‘integer*4‘); 3 for n=1:4 4 fprintf(fid,‘%s\t‘,char(baocun{n})); % \t表示空格 5 end 6 fprintf(fid,‘\r\n‘); %換行 7 fclose(fid);
很多東西都是舉一反三,多動腦,多嘗試,實在沒辦法就上網找答案,一般都能找到。
關於matlab向文件寫入數據的方法——留著備用