1. 程式人生 > >Matlab從入門到精通(九)--檔案操作

Matlab從入門到精通(九)--檔案操作

  1. 檔案的開啟

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為可選項,若不選用則讀取整個檔案內容,若選用則它的值可以是下列值:

  1.      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)

【例】