Matlab 文件讀寫函數

董爲國:《深入淺出MATLAB7.x混合編程》

Matlab提供多種能夠進行文件讀寫的函數,這些函數是Matlab語言的一部分,並不需要任何額外的工具箱的支持。

文本文件

Matlab中對文件的讀寫函數可以分爲2大類:高級函數和低級函數。簡單的說,高級函數的調用語法簡單,方便使用;但是可定製性差,只適用某些特殊格式的文件類型,缺乏靈活性。

在實際的使用中,很多人會推薦這樣的一種選擇原則:在讀取文件時,儘量使用高級函數;在存寫文件時儘量使用低級函數,因爲高級函數存寫文件時,文件的格式比較單一。

高級命令

常用的文本文件讀寫的高級函數包括以下8個:

(1) 讀:load

load是Matlab中的一個內置函數。其主要功能是從文本文件或者MAT文件中把數據輸入Matlab工作空間。

如果各行的列數不相等,會出錯。

load的調用方式可以分爲2種:

命令形式:

load bar.dat

函數形式:

[x] = load('bar.dat');

(2) 讀:importdata

適合從文本文件或者特殊格式的二進制文件(比如.WAV等)中讀取數據。importdata可以讀取包含文字說明的文件,可以使用用戶自定義的字符作爲文件中每行各數據之間的分隔符,如不指定,自動以空格作爲分隔符。如果各行的列數不同的話,importdata不會終止執行,而是會根據第一行的列數爲準來決定輸出矩陣的大小,所缺的列會以NaN代替。

(3) 讀:csvread

用來讀取用逗號隔開的數據文件。

(4) 讀:strread

(5) 讀:dlmread

文件中不能包含說明文字。不過dlmread不但可以讀取以逗號分割的數據文件,也可以讀取那些用其它字符分割數據的文件。

(6) 讀:textread

通過調用一個名爲dataread.dll的MEX文件實現的。比前面提到的幾個文件讀取高級函數,textread同樣具有調用語法簡單的優點,同時對文件讀取的可定製性更強。textread既能處理有固定格式的文件,也能處理無格式的文件,還能對文件每行的數據按列逐個讀取。通常被用來處理一些已知格式的文件。{姓名,等級,X,Y,答案}

Note: textread will be removed in a future version. Use 'textscan' instead. (Matlab 2011a)

(7) 寫:save

save也是Matlab的一個內置函數,用來把當前Matlab工作空間的一個或者多個變量存入外部文件。在默認情況下,save命令以MAT格式存寫數據,但也可以指定存寫的文本方式。

注意:save無法在文本文件中,保存複數變量。如果有複數時,save只保存它們的實部。另外,對於結構型變量,save只能保存結構型標量,而不能保存結構型變量數組。

'-mat'             Binary MAT-file format (default).

'-ascii'            8-digit ASCII format.

'-ascii', '-tabs' Tab-delimited 8-digit ASCII format.

'-ascii', '-double' 16-digit ASCII format.

'-ascii', '-double', '-tabs' Tab-delimited 16-digit ASCII format.

For more flexibility in creating ASCII files, use 'dlmwrite' or 'fprintf'. (Matlab 2011a)

(8) 寫:dlmwrite

Write matrix to ASCII-delimited file



低級命令

這些命令和C語言裏對文件的讀寫函數非常類似。操作過程一般包括:打開文件;讀寫文件;關閉文件。

常用的文件讀寫低級命令有如下7個:

(1) fopen

fopen能夠打開文件,也能夠從打開的文件中獲得信息。默認情況下,fopen以二進制格式打開文件。

注意:如果文件打開模式裏用“+”,如“a+t”、“w+t”等,對文件的讀和寫必須用fseek或者frewind隔開。

(2) fclose

文件打開、使用後最好關閉,以方便對該文件的其他操作。使用fopen打開文件以後,系統會把這個文件標記爲"正在使用";使用fclose會清除這個標記,否則會影響到對文件的修改、刪除等操作。

(3) fgetl

能夠讀取指定文件中的一行內容,但不包括新行分隔符。用fopen打開文件後,文件的讀取位置是文件開頭的地方,以後每次調用fgetl,這個讀取位置會自動更新到下一行,一直到文件結尾的地方。

(4) fgets

fgets的功能和fgetl類似,都是讀取當前文件讀取位置所對應的下一行內容。區別在於,fgets將包含該行的新行標誌。

(5) fscanf

fscanf具有更多的靈活性,能夠讀取有格式的文本文件。

注意:用%s讀取字符串後,其中的每個字符會被看成是返回的矩陣裏的一個元素。而且,%s會忽略文件中的空格鍵。如果需要讀取空格,則必須用%c。

(6) textscan

textscan是Matlab 7.0新增加的內置函數。它能夠更爲高效和靈活地讀取文本文件數據,其和高級命令textread相似,但textcan能夠更好地處理大型文件。textscan能從文件的任何地方開始讀取數據,對於數據的轉換,textscan提供了更多的選項。

注意:textscan讀取數據最大值uint32(4294967295),文件中相應的數字如果大於這個數,則被這個極限數字代替。

(7) fprintf

fprintf能夠以類似於ANSI C語言中的有關函數那樣按照用戶指定的格式把數據打印文本信息。根據調用參數的不同,fprintf可以在文件或者屏幕上輸出結果。

Write data to text file
發佈了19 篇原創文章 · 獲贊 23 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章