MATLAB文件的I/O函数操作

本节介绍 MATLAB 中的 10 种文件 I/O 的操作函数。

save 函数

save 函数将工作区中的变量保存到硬盘上,用 save 命令所形成的文件可以是双精度二进制格式 MAT 文件,也可以是 ASCII 文件。

save 函数的语法为:

save
save('filename')
save('filename', 'var1', 'var2', …)
save('filename', '-struct', 's')
save('filename', '-struct', 's', 'f1', 'f2', …)
save(…, 'format')
save filename var1 var2 …

参数说明:
  • save 将工作区中的所有变量保存在名为 MATLAB.mat 的二进制格式文件中,该文件可通过 load 命令来重新装入工作区。
  • save('filename') 将工作区中的所有变量保存为文件,文件名为 filename.mat。如果 filename 中包含路径,则将文件保存在相应目录下,否则默认路径为当前路径。
  • save('filename', 'var1', 'var2' …) 保存指定的变量在文件 filename.mat 中。
  • save('filename', '-struct', 's') 保存结构体 s 中全部域作为单独的变量,文件名为 filename.mat。
  • save('filename', '-struct', 's', 'f1', 'f2'…) 保存结构体 s 中指定的域 (s.f1,s.f2),文件名为 filename.mat。
  • save(…, 'format') 指定文件的保存格式,格式可以为 MAT 文件、ASCII 文件等。

format 可以为以下几种形式。
  • -ascii:以 8 位 ASCII 格式保存数据。
  • -ascii –double:以 16 位 ASCII 格式保存数据。
  • -ascii –tabs:以 8 位 ASCII 格式保存数据,使用 Tab 作分隔符。
  • -ascii –double –tabs:以 16 位 ASCII 格式保存数据,使用 Tab 作分隔符。
  • -mat:二进制 MAT 格式保存数据(默认格式)。

示例1

save函数的使用,具体程序如下:
>> savefile = 'test.mat';
>> p = rand(1, 10);
>> q = ones(10);
>> save(savefile, 'p', 'q')
>> whos -file test.mat
    Name Size Bytes Class
    p 1x10 80 double array
    q 10x10 800 double array
Grand total is 110 elements using 880 bytes
>> s1.a = 12.7; s1.b = {'abc', [4 5; 6 7]}; s1.c = 'Hello!';
>> save newstruct.mat -struct s1;
>> whos -file newstruct.mat
    Name Size Bytes Class
    c 1x6 12 char array
    b 1x2 158 cell array
    a 1x1 8 double array
Grand total is 16 elements using 178 bytes

load 函数

load 函数从磁盘文件中重新调入变量内容到工作区中。

load 函数的语法为:

load
load filename
load filename X Y Z…
load -ascii filename
load -mat filename

参数说明:
  • load:如果 MATLAB.mat 文件存在,导入 MATLAB.mat 中的所有变量;如果不存在,则返回 error。
  • load filename:将 filename.mat 中的全部变量导入到工作区中。
  • load filename X Y Z…:将 filename.mat 中的变量 X、Y、Z 等导入到工作区中。
  • load -ascii filename:无论输入文件名是否包含有扩展名,将其以 ASCII 格式导入,如果指定的文件不是数字文本,则返回 error。
  • load -mat filename:无论输入文件名是否包含有扩展名,将其以 MAT 格式导入,如果指定的文件不是 MAT 文件,则返回 error。

fread 函数

fread 函数从文件中读取二进制数据。fread 函数的语法为:

A = fread(fid)
A = fread(fid, count)
A = fread(fid, count, precision)
A = fread(fid, count, precision, skip)
A = fread(fid, count, precision, skip, machineformat)
[A, count] = fread(…)

fread 函数从指定文件 fid 中读取二进制数据,将数据写入到矩阵 A 中。可选输出 count 返回成功读入元素个数;fid 为文件标识符,其值由 fopen 函数得到;可选参数 count 确定读入多少数据,如果不指定参数 count,则一直读到文件结束为止。

参数 count 合法选择如下。
  • n:读取 n 个元素到一个列向量。
  • inf:读到文件结束,返回一个与文件数据元素相同的列向量。
  • [m,n]:读取元素填充一个 m 行 n 列的矩阵,填充按列进行,如果文件读入数据不够,则填充 0。

精度表示读入数据精度的字符串,控制读入数据精度。MATLAB 中精度如下表所示。

MATLAB 精度表
精度 说明 精度 说明
'uchar' 无符号字符:8 位 'uint16' 无符号整数:16 位
'schar' 有符号字符:8 位 'uint32' 无符号整数:32 位
'int8' 整数:8 位 'uint64' 无符号整数:64 位
'int16' 整数:16 位 'single' 浮点数:32 位
'int32' 整数:32 位 'float32' 浮点数:32 位
'int64' 整数:64 位 'double' 浮点数:64 位
'uint8' 无符号整数:8 位 'float64' 浮点数:64 位
参数 skip 确定每次读操作跳过的字节数。

fwrite 函数

fwrite 函数向文件中写入二进制数据。fwrite 函数的语法为:

[count, errmsg] = fwrite(fid, A, precision)
[count, errmsg] = fwrite(fid, A, precision, skip)

fwrite 函数将矩阵 A 中的元素写入指定文件 fid 中,将其值转化为指定的精度。fid 由 fopen 函数指定, count 返回成功写入文件中的元素个数。参数 skip 指定每次写操作跳过指定字节。

fscanf 函数

fscanf 函数按指定的格式从文件中读取数据。fscanf 函数的语法为:

A = fscanf(fid, format)
[A,count] = fscanf(fid, format, size)

fscanf 函数从由 fid 所指定的文件中读取数据,并根据格式字符串进行转换,同时返回给矩阵 A。参数 size 指定数据的长度,参数 count 返回成功读入的数据长度。

fprintf 函数

fprintf 函数向文件中写入格式化数据。fprintf 函数的语法为:

count = fprintf(fid, format, A…)

fprintf 函数将矩阵 A 或其他矩阵的实部数据按“格式字符串”指定的形式进行格式化,并将其写入指定的文件 fid 中,count 返回值为写入的数据长度。

fgets 函数

fgets 函数以字符串形式返回文件中的下一行内容,包含行结束符。fgets 函数的语法为:

tline = fgets(fid)
tline = fgets(fid, nchar)

fgets 函数返回文件标识符 fid 的文件中下一行内容,如果遇到文件结尾(EOF),则返回 -1,所返回的字符串中包含文本结束符。nchar 指定返回的字符个数,在遇到行结束符时不追加字符。

fgetl 函数

fgetl 函数以字符串形式返回文件中的下一行内容,但不包含行结束符。fgetl 函数的语法为:

tline = fgetl(fid)

fgetl 函数返回文件标识符fid的文件中下一行内容,如果遇到文件结尾,则返回 -1,所返回的字符串中不包含行结束符。

ferror 函数

ferror 函数查询 MATLAB 关于文件输入/输出操作的错误。ferror 函数的语法为:

message = ferror(fid)

ferror 函数将文件标识符 fid 的已打开文件的错误信息返回给 message 变量。

feof 函数

feof 函数测试指定文件是否设置了文件结尾 eof。如果返回 1,表示设置了 eof 指示器;返回 0,则表示未设置 eof 指示器。

feof 函数的语法为:

eofstat = feof(fid)