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的区别:
- 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