Matlab從入門到精通(九)--檔案操作
-
檔案的開啟
fopen函式的呼叫格式為:
fid= fopen(檔名,開啟方式)
其中檔名用字串形式,表示待開啟的資料檔案。常見的開啟方式有:‘r’表示對開啟的檔案讀資料,‘w’表示對開啟的檔案寫資料,‘a’表示在開啟的檔案末尾新增資料。fid用於儲存檔案控制代碼值,控制代碼值用來標識該資料檔案,其他函式可以利用它對該資料檔案進行操作。
例:fid=fopen(‘magic5.dat’,‘w’);
2、檔案的關閉
檔案在進行完讀、寫等操作後,應及時關閉。關閉檔案用fclose函式,呼叫格式為:sta=fclose(fid)
該函式關閉fid所表示的檔案。sta表示關閉檔案操作的返回程式碼,若關閉成功,返回0,否則返回–1.
3、檔案的讀寫操作
3.1、讀二進位制檔案
fread 函式可以讀取二進位制檔案的資料,並將資料存入矩陣。其呼叫格式為:
[A,COUNT]=fread(fid,size, precision)
其中A用於存放讀取的資料,COUNT返回所讀取的資料元素個數,fid為檔案控制代碼,size為可選項,若不選用則讀取整個檔案內容,若選用則它的值可以是下列值:
- N表示讀取 N個元素到一個列向量。
(2) Inf表示讀取整個檔案。
(3) [M,N]表示讀資料到M×N的矩陣中,資料按列存放。
precision代表讀寫資料的型別
【例一】:
fid = fopen('E:\\1.txt','r');
[A,count] = fread(fid,Inf,'int8=>char');
Count %輸出檔案中內容的長度
fclose('all'); %關閉開啟的所有檔案
【例二】
fid = fopen('E:\\1.txt','r');
A = fread(fid,Inf,'int8=>char'); %將讀取的資料變為字元型
size(A) %
A' %橫向輸出文字內容
fclose(fid);
【例三】
fid = fopen('E:\\2.jpg','r');
A = fread(fid,Inf,'int8');
size(A)
A'
fclose(fid);
3.2、寫二進位制檔案
fwrite 函式按照指定的資料型別將矩陣中的元素寫入到檔案中。其呼叫格式為:
COUNT=fwrite (fid, A, precision)
其中COUNT返回所寫的資料元素個數,fid為檔案控制代碼,A用來存放寫入檔案的資料,precision用於控制所寫資料的型別,其形式與fread函式相同。
【例】:
例4-1 建立一資料檔案magic5.dat,用於存放5階魔方陣。
程式如下:
fid=fopen(‘magic5.dat’,‘w’);
cnt=fwrite(fid,magic(5),‘int32’);
fclose(fid);
3.3、讀取文字檔案(一)
fscanf 函式的呼叫格式為:
[A,COUNT]= fscanf (fid, format, size)
其中A用以存放讀取的資料,COUNT返回所讀取的資料元素個數。fid為檔案控制代碼。format用以控制讀取的資料格式,由%加上格式符組成,常見的格式符有d,f,c,s。
size為可選項,決定矩陣A中資料的排列形式。
3.5、讀取文字檔案(二)
fid = fopen('result.txt','r');
data = textscan(fid,'%s %s \r\n');
data
此時會將檔案中的所有資料一次性讀取到一個二維cell型陣列中.如果想一次只讀一行可以用如果方法:
fid = fopen('result.txt','r');
data = textscan(fid,'%s %s \r\n',1);
data
3.6、讀取文字檔案(三)
一次讀取一行還可以用如下辦法:
fid = fopen('result.txt','r');
while ~feof(fid)%判斷是否達到檔案尾部
aline = fgetl(fid) ;
end
data = aline(3)%取出該行的第3個字元
3.7、讀取文字檔案(四)
如果文字檔案中內容格式如下:
此時用如下方式讀取較好:
fid = fopen('result.txt','r');
data = textscan(fid,'%s %s \r\n',1);%讀取標題行
index = 1 ;
while ~feof(fid)
data{index} = textscan(fid,'%s%s \r\n',1);%讀取第(index+1)行
index = index + 1 ;
end
此時讀取的內容儲存在cell型陣列data中。
例如:
>> data{1}{1}
ans =
'10110111'
>> data{1}{2}
ans =
'10'
其它元素也可以依次訪問.
3.8、寫文字檔案
fprintf 函式的呼叫格式為:
COUNT= fprintf(fid, format, A)
其中A存放要寫入檔案的資料。先按format指定的格式將資料矩陣A格式化,然後寫入到fid所指定的檔案。格式符與fscanf函式相同。
4、資料檔案定位
MATLAB提供了與檔案定位操作有關的函式fseek和ftell。fseek函式用於定位檔案位置指標,其呼叫格式為:
status=fseek(fid, offset, origin)
其中fid為檔案控制代碼,offset表示位置指標相對移動的位元組數,origin表示位置指標移動的參照位置。若定位成功,status返回值為0,否則返回值為–1。
ftell函式返回檔案指標的當前位置,其呼叫格式為:
position=ftell (fid)
返回值為從檔案開始到指標當前位置的位元組數。若返回值為–1表示獲取檔案當前位置失敗。
【例】:
fid = fopen('E:\\1.txt','r');
A = fread(fid,Inf,'int8=>char');
size(A)
A'
status=fseek(fid, 5, 'bof')
position = ftell(fid)
fclose(fid);
5、在編輯視窗直接開啟檔案
在Command視窗輸入命令:
>>open E:\\txt.m
則可直接開啟檔案.
6、其它檔案操作函式
fclose :關閉檔案
fopen :開啟檔案
fread :從檔案中讀入二進位制資料
fwrite :把二進位制資料寫入檔案
fgetl :逐行從檔案中讀取資料並放棄換行符
fgets :從檔案中讀取行,保留換行符並把行作為字串返回
fprintf:把格式化資料寫入檔案
fscanf :從檔案中讀取格式化資料
feof :測試檔案是否結束
ferror:測試檔案輸入輸出錯誤資訊
frewind:檔案指標歸零
fseek :設定檔案位置指標
ftell :獲取檔案位置指標
csvread :讀取逗號分隔格式的資料檔案到矩陣
csvwrite:寫矩陣到逗號分隔格式的資料檔案
dlmread :把一個ASCII限定檔案(資料檔案)讀入矩陣
dlmwrite:把矩陣寫入到ASCII限定檔案(資料檔案)
textread:從文字檔案讀取格式化資料(important)
wk1read :把Lotus123電子表格讀入矩陣
wk1write:把矩陣寫入Lotus123wk1電子表格
xlsread :讀取excel表格
7、excel檔案操作
7.1獲取檔案資訊
status = xlsfinfo(filename)
[status,sheets] = xlsfinfo(filename)
[status,sheets,format] = xlsfinfo(filename)
status為目標excel可讀屬性,sheets為目標excel中所有工作表,format返回excel檔案的描述資訊。
【例】
[typ, desc, fmt] = xlsfinfo('myaccount.xlsx')
This code returns:
typ =
Microsoft Excel Spreadsheet
desc =
'Sheet1' 'Income' 'Expenses'
fmt =
xlOpenXMLWorkbook
system('taskkill /F /IM EXCEL.EXE');%殺死excel程序,對於高版本matlab會自動釋放資源。
7.2讀取excel檔案內容
可以使用matlab的匯入資料直接將excel中的資料匯入到matlab中。
使用xlsread函式讀取excel檔案內容
【例1】讀取第一張工作表內容
A = xlsread('myExample.xls')
xlsread returns:
A =
1 2 3
4 5 NaN
7 8 9
【例2】讀取第一張工作表的B2:C3區域內容
subsetA = xlsread('myExample.xls', 1, 'B2:C3')
xlsread returns:
subsetA =
2 3
5 NaN
【例3】假設excel檔案內容如下
[ndata, text, alldata] = xlsread('myExample.xls')
xlsread returns:
ndata =
1 2 3
4 5 NaN
7 8 9
text =
'First' 'Second' 'Third'
'' '' ''
'' '' 'x'
alldata =
'First' 'Second' 'Third'
[ 1] [ 2] [ 3]
[ 4] [ 5] 'x'
[ 7] [ 8] [ 9]
7.4寫入資料到excel檔案
單擊“工具”選單,選擇“載入巨集”選項,在彈出的載入巨集介面中單擊“瀏覽”按鈕,通過瀏覽介面在路徑“matlab 的安裝路徑\toolbox\exlink\” 下找到excllink.xla 檔案,雙擊開啟此檔案則回到載入巨集介面,在 Excel link2.3 for use with matlab 選項前打勾,點選“確定”按鈕即可完成載入。載入 Excel-link 巨集成功後會在 Excel 工具欄的下方出現“startmatlab、putmatrix、getmatrix、evalstring” 等選項,通過這些選項可以實現 Matlab 與 Excel 之間的資料互動。
使用函式xlswrite寫入資料到excel檔案。語法如下:
xlswrite(filename,A)
xlswrite(filename,A,sheet)
xlswrite(filename,A,range)
xlswrite(filename,A,sheet,range)
status = xlswrite(filename,A,sheet,range)
[status,msg] = xlswrite(filename,A,sheet,range)
【例】