MATLAB数据输入输出基础


 昨天学习了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]

文章作者: HANABI
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HANABI !
评论
  目录