Matlab有著強大的資料處理功能,經常需要從外部檔案讀取資料或將資料寫到外部檔案。Matlab和外部檔案進行資料交換相關的命令,個人目前瞭解到的有以下幾種。
(1)Load
load 從Matlab的資料檔案。mat中讀取變數資料,也可以從。txt 。dat等檔案中讀取資料。使用load命令讀取資料以後在Matlab中資料變數和檔案同名。例如使用“load data。txt”後資料變數名即為data。
需要注意的是檔案格式的不同,檔案格式分為二進位制格式和ASCII格式兩種。如果是二進位制格式的檔案,可以使用load命令直接讀取。但如果是ASCII格式的檔案,需要保證資料是整齊的(每一行資料個數要一致),否則會出錯。
例:
data。txt檔案(ASCII格式)
01
12 3
0
使用“load data。txt”將會出錯。
data1。txt檔案
01 2
12 3
23 4
使用“load data1。txt”能順利讀入3*3矩陣。
和load相對應的寫資料命令為save,一般存為。mat檔案,save儲存的檔案格式為二進位制格式。
二進位制和ASCII的區別
從檔案編碼的方式來看,檔案可分為ASCII碼檔案和二進位制碼檔案兩種。ASCII檔案也稱為文字檔案,這種檔案在磁碟中存放時每個字元對應一個位元組,用於存放對應的ASCII碼。例如,數5678的儲存形式為:ASC碼:00110101(5) 00110110(6) 00110111(7) 00111000(8) 共佔用4個位元組。ASCII碼檔案可在螢幕上按字元顯示, 例如源程式檔案就是ASCII檔案,用DOS命令TYPE可顯示檔案的內容。由於是按字元顯示,因此能讀懂檔案內容。二進位制檔案是按二進位制的編碼方式來存放檔案的。例如,數5678的儲存形式為:00010110 00101110 (十進位制5678轉換成二進位制)只佔二個位元組。二進位制檔案雖然也可在螢幕上顯示,但其內容無法讀懂。C系統在處理這些檔案時,並不區分型別,都看成是字元流,按位元組進行處理。輸入輸出字元流的開始和結束只由程式控制而不受物理符號(如回車符)的控制。因此也把這種檔案稱作“流式檔案”。
(2)importdata
importdata根據檔名將資料匯入到Matlab工作區。可以匯入檔案型別有很多,。txt 。wav 等等。匯入的資料(包括字串和數值)以結構形式存放在工作區,可以使用whos命令來檢視工作區的資料。
importdata可以匯入load不能讀取的長短不一的ASCII檔案。當檔案中既包含字串又包含數值,而且數值長度個數不一時,可以使用importdata命令。注意讀取的數值矩陣列數以檔案中數值第一行的列數為標準。
例 test。txt
This is a test。Start01 21212 3 4
執行A=importdata(‘test。txt’)
結果:
A=
data: [4x3 double]textdata: {2x1 cell}
A。data =
0 1 21 2 NaN1 2 34 NaN NaN
A。textdata =
‘This is a test。’‘Start’
另外,讀取的字串只能位於數值之前,位於數值之後的將被忽略。
例:test。txt
01 21212 3 4End。
執行A=importdata(‘test。txt’)
結果:
A=
0 1 21 2 NaN1 2 34 NaN NaN
除了importdata命令以外,還可以從選單選項file——>import data。。。匯入資料檔案,效果和importdata命令一樣。
(3)fopen
fopen開啟一個檔案並建立檔案標識以供接下來的讀寫等操作。fopen命令本身不進行讀操作。然後可以使用fscanf讀取資料,根據需要對資料進行篩選編輯。
例:讀取字串的方法
data。txt
01 212 312 3End。
fid=fopen(‘data。txt’); %開啟檔案,建立檔案標識
A=fscanf(A,‘%c’); %讀取資料
fclose(fid); %關閉檔案標識
i=findstr(A,‘End’); %查詢標識
B=A(1:i-3); %提取資料,換行為2個字元
C=str2num(B); %將資料轉換成數值矩陣
結果:
A=
01 2
12 3
12 3
注意其中str2num同樣需要保證數值矩陣中列數一致,如果不一致,則結果為空。
例
01 21212 3End。
結果C=[]
例:讀取行的方法
fid1=fopen(‘data。txt’);fid2=fopen(‘numbers。txt’,‘w’);while ~feof(fid1)aline=fgetl(fid1);if double(aline(1))>=48&&double(aline(1))<=57fprintf(fid2,‘%s\n’,aline);continueendend
fclose(fid1);fclose(fid2);
numbers。txt即為按行儲存的數值檔案