關於matlab向文件寫入數據的方法——留着備用

MATLAB數據採集的時候,每每須要把獲得的數據保存下來。數組

fid = fopen(文件名,‘打開方式’);
函數

說明:fid用於存儲文件句柄值,若是fid>0,這說明文件打開成功。打開方式有以下選擇: 
‘r’:只讀方式打開文件(默認的方式),該文件必須已存在。 
‘r+’:讀寫方式打開文件,打開後先讀後寫。該文件必須已存在。 
‘w’:打開後寫入數據。該文件已存在則更新;不存在則建立。 
‘w+’:讀寫方式打開文件。先讀後寫。該文件已存在則更新;不存在則建立。 
‘a’:在打開的文件末端添加數據。文件不存在則建立。 
‘a+’:打開文件後,先讀入數據再添加數據。文件不存在則建立。 
另外,在這些字符串後添加一個「t」,如‘rt’或‘wt+’,則將該文件以文本方式打開;若是添加的是「b」,則以二進制格式打開,這也是fopen函數默認的打開方式。ui

1、若是隻是單純的一個變量,能夠像下面這樣寫。g2ggg是文件命名,txt文件(固然能夠改爲其餘文件格式),這個是matlab自動保存在工做文件下的,baocun是咱們要保存的變量。%d表明整數,、\r\n 表明每寫入一次數據換行。spa

 

fid = fopen('g2ggg.xls','a');
fprintf(fid,'%d \t ',baocun); 
fprintf(fid,'\r\n');  % 換行
fclose(fid);

  

其中:code

 

fid = fopen('g2ggg.xls','a');

  

 

這句裏面的‘a’表明後續寫入。這樣每次從新運行程序都不會替換以前保存的數據,仍是保存在以前保存過的文件夾裏面,接着以前的數據繼續保存。blog

可是若是這個地方是‘w’,則表明寫入,它寫一次數據都會覆蓋以前的數據,最後你會發現txt文件裏面只保存了一個數據。除非你在程序中定義一個矩陣,把這些數據每次存在矩陣裏面,到最後一次性保存這個矩陣,這些數據纔會所有保存下來,可是切記你此次保存前的那個txt文件夾會被此次這個文件夾替換,除非你此次文件夾命名和上次不一樣。

ip

2、若是是保存矩陣,可像下面這樣寫。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’表明後續寫入。這樣每次從新運行程序都不會替換以前保存的數據,仍是保存在以前保存過的文件夾裏面,接着以前的數據繼續保存。string

 

可是若是這個地方是‘w’,則表明寫入,它每寫一次數據都會覆蓋以前的數據,最後你會發現txt文件裏面只保存了一個數據。除非你在程序中定義一個矩陣,把這些矩陣每次存在定義的這個矩陣裏面,到最後一次性保存這個矩陣,這些數據纔會所有保存下來,可是切記你此次保存前的那個txt文件夾會被此次這個文件夾替換,除非你此次文件夾命名和上次不一樣。

 

3、前面兩種狀況都是matlab自動保存的工做路徑下的,若是咱們須要matlab自動保存在指定路徑下怎麼辦呢?能夠像下面這樣寫:

 

fid = fopen('C:\Users\Desktop\g2ggg.txt','a');  
fprintf(fid,'%d,%d,%d \r\n ',baocun);

 

其中

C:\Users\Desktop\

 

表明保存路徑,這裏保存在電腦桌面。
 
4、若是須要手動輸入保存路徑,能夠像這樣寫:
[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');   

 

5、若是有須要保存字符串數組的話:
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);

 

不少東西都是觸類旁通,多動腦,多嘗試,實在沒辦法就上網找答案,通常都能找到。

相關文章
相關標籤/搜索