昨天学习了MATLAB的数据类型,了解了基本的数据类型,以及它们创建和使用的方法。本篇博客会讲MATLAB数据的输入和输出。MATLAB提供了许多的文件输入输出的操作命令,用户可以方便地对二进制文件和ASCII文件进行打开、关闭、存储的等操作。
打开和关闭文件
fid = fopen('filename','permission')
。filename
是将要打开的文件名称,permission
为对文件进行处理的方式代号。可以为以下符号:
r
:只读文件w
:只写文件,创建新文件或覆盖文件原有内容a
:增补文件,打开或创建文件,在文件尾增加数据r+
:读写文件w+
:创建新文件或覆盖文件原有内容a+
:打开或创建新文件,并读取或增补文件
文件可以以二进制或者文本的形式打开(默认情况下是前者)。如果要以文本形式打开,就在permission字符串后面加’t’。例如’rt+’、’w+t’等。
在程序设计中,为了后续操作的顺利进行,每次打开文件都要判断是否正确打开文件,代码如下:
[fid,meesage] = fopen('filename','r');
if fid == 1
disp(message)
end
打开文件并完成读取操作后,必须关闭文件,以免打开文件过多而造成系统资源浪费。关闭的命令为
status = flose(fid)
,其中fid参数为关闭文件的文件标识,是打开该文件时的返回值;如果关闭成功,则返回status为0.否则为-1。
读写二进制文件
写二进制文件的操作函数主要包括fwrite函数。该函数的作用是将一个矩阵的元素按指定的二进制格式写入已经打开的文件,并返回成功写入的数据个数。调用格式为
count = fwrite(fid,a,precision)
,其中fid是从fopen获得的文件标识,a是待写入的矩阵,pricision设定了结果的精度,示例如下:
fid = fopen('example.bin','w');
count = fwrite(fid,magic(5),'int32');
status = fclose(fid);
如果要查看文件内容,用以下命令:
fid = fopen('example.bin','r');data = reshape(fread(fid,count,'int32'),5,5);flose(fid);
fread
可用于读二进制文件,作用是将二进制文件数据读入内存中,调用格式为data = fread(fid)
。
>> fid = fopen('codes.m','r');data = fread(fid);disp(char(data'))
%%
x = [1,2];
% mkdir('c:\','my_dir') ´´½¨ÐÂÎļþ¼Ð
% cd c:\my_dir
save data x
dir
%%
clear
load data x
disp(who)
读取文本文件
fprintf函数将数据转换为指定格式的字符串,写入文本文件中。调用格式:
count = fprintf(fid,format,y)
,format是格式类型标识,用以指定数据写入文件的格式;y是MATLAB数据变量,count是返回成功写入的字节数。
>> x = 0:0.25:1;
>> y = [x; sin(x)];
>> y
y =
0 0.2500 0.5000 0.7500 1.0000
0 0.2474 0.4794 0.6816 0.8415
>> fid = fopen('expfile.txt','w');
>> fprintf(fid,'sin function\n\n');
>> fprintf(fid,'%f %f\n',y);
>> fclose(fid);
>> type expfile.txt
sin function
0.000000 0.000000
0.250000 0.247404
0.500000 0.479426
0.750000 0.681639
1.000000 0.841471
在MATLAB中可以使用fgetl和fgets函数读取文本文件。调用格式:
tline = fgetl(fid)
,tline = fgets(fid)
。
这两个函数功能类似,均可以从文件中读取一行数据,区别在于fgetl会舍弃换行符,而fgets会保留换行符。
>> fid = fopen('code2.m');
>> tline1 = fgetl(fid)
tline1 =
'%%'
>> fclose(fid);
>> fid = fopen('code2.m');
>> tline2 = fgets(fid)
tline2 =
'%%
'
>> fclose(fid);
>> whos tline1 tline2
Name Size Bytes Class Attributes
tline1 1x2 4 char
tline2 1x4 8 char
读写位置控制
函数 | 功能 |
---|---|
feof(fid) | 检测指针是否在文件结束位置 |
fseek(fid,offset,origin) | 设定文件指针的位置 |
ftell(fid) | 获取文件指针的位置 |
frewind(fid) | 重设指针至文件起始位置 |
导入数据
load
函数:
>> a = eye(4);
>> b = ones(3,4);
>> c = [3 4 5 6];
>> save data.mat a b c;
>> data = load('data.mat','a')
data =
包含以下字段的 struct:
a: [4×4 double]
>> d = cell2mat(struct2cell(load('data.mat','c')))
d =
3 4 5 6
importdata
函数:
>> data =importdata('data.mat',' ',1)
data =
包含以下字段的 struct:
a: [4×4 double]
b: [3×4 double]
c: [3 4 5 6]