matlab的文件讀取函數功能可以讀取各種文件類型,如文本文件和二進制文件,如下表所示:
函數 | 功能(文件要求) |
textscan | 從文本文件或字符串讀取格式化數據(一行中有整數,浮點數,字符串等)(讀取已打開文件) |
xlsread | 讀取Excel文件 |
importdata | 從文件加載數據 |
load | 將文件變量加載到工作區(常見的MAT文件,也可以是文本文件,如txt,dat等) |
dlmread | 將 ASCII 分隔的數值數據文件讀取到矩陣(讀取文本文件) |
textread | 同textread(不推薦用textread,改用textscan) |
csvread | 讀取逗號分隔值 (CSV) 文件,讀取已打開文件 |
fscanf | 讀取文本文件中的數據,讀取已打開文件 |
textscan
用法:
C = textscan(fileID,formatSpec)
C = textscan(fileID,formatSpec,N) %按formatSpec讀取文件數據N次,指定'headerlines'跳過指定行數
舉例:
test.txt
daa fsds sds sdv
1 3.4 5.6 7.8
2 4.5 6.7 3.4
3 4.5 5.6 3.5
fileID = fopen(test.txt); C = textscan(fileID,'%d %f %f %f','headerlines',1); % %d有符號整數 %f雙精度浮點數 %s讀取以空白或分隔符分隔的文本 fclose(fileID);
得到的C是一個cell類型的數據。
textscan與textread的區別:
- textread不用先fopen那個文件,適用於格式統一的txt文件的一次性大批量讀取。而使用textscan函數之前需要先用fopen函數打開要讀取的文件並返回句柄fid。
- 其次textread讀取某個文件后,下次再用textread讀取這個文件時,還是會從文件頭開始讀取。而textscan函數每次讀完數據后,其對應的句柄fid都是指向接下來要讀數據的地方,類似於C函數中的文件讀取指針,這樣更方便於讀取文本時的精確控制。
- 再次,textscan函數可以將多組數據讀到一個元胞矩陣中,而textread函數只能將數據分別讀取到不同的向量中。比如一個含有10行3列浮點數的文件,textscan函數可以將之讀取到一個變量名A下 A=textscan(fid, '%f%f%f'), 而使用textread函數必須將之讀入到三個變量名中 [A,B,C] = textread(filename,'%f%f%f')。
參考:https://ww2.mathworks.cn/help/matlab/ref/textscan.html
xlsread(略)
importdata
用法:
A = importdata(filename,delimiterIn,headerlinesIn) %delimiterIn指定分隔符,headerlines指定跳過標題行數
舉例:
C=importdata('test.txt',' ',1);
load
用法:
load(filename) %如果filename是 MAT 文件,load(filename)會將 MAT 文件中的變量加載到 MATLAB工作區。如果filename是 ASCII 文件,load(filename)會創建一個包含該文件數據的雙精度數組。
load(filename,variables) %加載MAT文件中的指定變量,該變量要加引號''
S = load(___)
查看MAT文件中的內容:whos -file filename.mat
>> whos -file tiaohe.mat Name Size Bytes Class Attributes Aver_X 15x15 1800 double H 15x15 1800 double g 15x15 1800 double
查看文本文件內容:type filename
>> type test.txt
daa fsds sds dada
1 3.4 5.6 7.8
2 4.5 6.7 3.4
3 4.5 5.6 3.5
參考:https://ww2.mathworks.cn/help/matlab/ref/load.html?searchHighlight=load&s_tid=doc_srchtitle
dlmread
用法:
M = dlmread(filename) % 將 ASCII 分隔的數值數據文件讀取到矩陣M。dlmread函數從該文件中檢測到分隔符,並將重復的空白視為一個分隔符。 M = dlmread(filename,delimiter) %使用指定的分隔符讀取該文件中的數據,並將重復的分隔符視為單獨的分隔符。 M = dlmread(filename,delimiter,R1,C1) %從行偏移量R1和列偏移量C1開始讀取。 M = dlmread(filename,delimiter,[R1 C1 R2 C2]) % 僅讀取行偏移量R1和R2及列偏移量C1和C2界定的范圍。
舉例:
>> M=dlmread('test.txt',' ',1,0) M = 1.0000 3.4000 5.6000 7.8000 2.0000 4.5000 6.7000 3.4000 3.0000 4.5000 5.6000 3.5000 >> M=dlmread('test.txt',' ',[1,1,3,3]) M = 3.4000 5.6000 7.8000 4.5000 6.7000 3.4000 4.5000 5.6000 3.5000
參考:https://ww2.mathworks.cn/help/matlab/ref/dlmread.html?searchHighlight=dlmread&s_tid=doc_srchtitle
csvread
M = csvread(filename) %將逗號分隔值(CSV)格式化文件讀入數組M中。該文件只能包含數值。 M = csvread(filename,R1,C1) %從行偏移量R1和列偏移量C1開始讀取文件中的數據。 M = csvread(filename,R1,C1,[R1 C1 R2 C2]) %僅讀取行偏移量R1和R2及列偏移量C1和C2界定的范圍。
舉例:
新建文件test.csv(用記事本或Notepad打開):
daa,fsds,sds,dada
1,3.4,5.6,7.8
2,4.5,6.7,3.4
3,4.5,5.6,3.5
>> M = csvread('test.csv',1,0) M = 1.0000 3.4000 5.6000 7.8000 2.0000 4.5000 6.7000 3.4000 3.0000 4.5000 5.6000 3.5000
參考:https://ww2.mathworks.cn/help/matlab/ref/csvread.html?searchHighlight=csvread&s_tid=doc_srchtitle
fscanf
用法:
A = fscanf(fileID,formatSpec) %根據formatSpec指定的格式解釋文件中的值。
A = fscanf(fileID,formatSpec,sizeA) %將文件數據讀取到維度為sizeA的數組A中,並將文件指針定位到最后讀取的值之后。fscanf按列順序填充A。sizeA必須為正整數或采用[m n]的形式。
舉例(略)
參考:https://ww2.mathworks.cn/help/matlab/ref/fscanf.html?searchHighlight=fscanf&s_tid=doc_srchtitle