Matlab文件讀取總結


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的區別:

  1. textread不用先fopen那個文件,適用於格式統一的txt文件的一次性大批量讀取。而使用textscan函數之前需要先用fopen函數打開要讀取的文件並返回句柄fid。
  2. 其次textread讀取某個文件后,下次再用textread讀取這個文件時,還是會從文件頭開始讀取。而textscan函數每次讀完數據后,其對應的句柄fid都是指向接下來要讀數據的地方,類似於C函數中的文件讀取指針,這樣更方便於讀取文本時的精確控制。
  3. 再次,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);

參考:https://ww2.mathworks.cn/help/matlab/ref/importdata.html?searchHighlight=importdata&s_tid=doc_srchtitle


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM