Matlab实现文件读写的几种方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab实现文件读写的几种方法
Matlab有着强大的数据处理功能,经常需要从外部文件读取数据或将数据写到外部文件。
Matlab和外部文件进行数据交换相关的命令,个人目前了解到的有以下几种。
(1)Load
load 从Matlab的数据文件.mat中读取变量数据,也可以从.txt .dat等文件中读取数据。
使用load命令读取数据以后在Matlab 中数据变量和文件同名。
例如使用“load data.txt”后数据变量名即为data。
需要注意的是文件格式的不同,文件格式分为二进制格式和ASCII 格式两种。
如果是二进制格式的文件,可以使用load命令直接读取。
但如果是ASCII格式的文件,需要保证数据是整齐的(每一行数据个数要一致),否则会出错。
例:
data.txt文件(ASCII格式)
0 1
1 2 3
使用“load data.txt”将会出错。
data1.txt文件
0 1 2
1 2 3
2 3 4
使用“load data1.txt”能顺利读入3*3矩阵。
和load相对应的写数据命令为save,一般存为.mat文件,save 保存的文件格式为二进制格式。
二进制和ASCII的区别
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。
ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。
例如,数5678的存储形式为:
ASC码:00110101(5)00110110(6)00110111(7)00111000(8)共占用4个字节。
ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。
由于是按字符显示,因此能读懂文件内容。
二进制文件是按二进制的编码方式来存放文件的。
例如,数5678的存储形式为:00010110 00101110 (十进制5678转换成二进制)只占二个字节。
二进制文件虽然也可在屏幕上显示,但其内容无法读懂。
C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。
输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。
因此也把这种文件称作“流式文件”。
(2)importdata
importdata根据文件名将数据导入到Matlab工作区。
可以导入文件类型有很多,.txt .wav 等等。
导入的数据(包括字符串和数值)以结构形式存放在工作区,可以使用whos命令来查看工作区的数据。
importdata可以导入load不能读取的长短不一的ASCII文件。
当文件中既包含字符串又包含数值,而且数值长度个数不一时,可以使用importdata命令。
注意读取的数值矩阵列数以文件中数值第一行的列数为标准。
例 test.txt
This is a test.
Start
0 1 2
1 2
1 2 3 4
运行A=importdata('test.txt')
结果:
A =
data: [4x3 double]
textdata: {2x1 cell}
A.data =
0 1 2
1 2 NaN
1 2 3
4 NaN NaN
A.textdata =
'This is a test.'
'Start'
另外,读取的字符串只能位于数值之前,位于数值之后的将被忽略。
例:test.txt
0 1 2
1 2
1 2 3 4
End.
运行A=importdata('test.txt')
结果:
A =
0 1 2
1 2 NaN
1 2 3
4 NaN NaN
除了importdata命令以外,还可以从菜单选项file-->import data...导入数据文件,效果和importdata命令一样。
(3)fopen
fopen打开一个文件并创建文件标识以供接下来的读写等操作。
fopen命令本身不进行读操作。
然后可以使用fscanf读取数据,根据需要对数据进行筛选编辑。
例:读取字符串的方法
data.txt
0 1 2
1 2 3
1 2 3
End.
fid=fopen('data.txt'); %打开文件,创建文件标识
A=fscanf(A,'%c'); %读取数据
fclose(fid); %关闭文件标识
i=findstr(A,'End'); %查找标识
B=A(1:i-3); %提取数据,换行为2个字符
C=str2num(B); %将数据转换成数值矩阵
结果:
A =
0 1 2
1 2 3
1 2 3
注意其中str2num同样需要保证数值矩阵中列数一致,如果不一致,则结果为空。
例
0 1 2
1 2
1 2 3
End.
结果C=[]
例:读取行的方法
fid1=fopen('data.txt');
fid2=fopen('numbers.txt','w');
while ~feof(fid1)
aline=fgetl(fid1);
if double(aline(1))>=48&&double(aline(1))<=57
fprintf(fid2,'%s\n',aline);
continue
end
end
fclose(fid1);
fclose(fid2);
numbers.txt即为按行保存的数值文件。