文件的打开、保存和关闭

文件做打开、保存和关闭是最基本的操作。MATLAB提供了进行这些基本操作的函数。

打开文件

1.使用导入工具打开文件

在MATLAB的“主页”工具栏中单击“导入数据”按钮,可以导入很多类型的数据,如文本数据、电子表格数据、图片数据、音频数据和视频数据等,如图1-1所示。

Document Image

图1-1 用工具可以导入的数据类型

2.使用open函数打开文件

使用open函数,可以根据扩展名打开文件,该函数的语法格式如下。

open('name'):打开字符串name指定的对象。打开方式根据name指定的对象类型确定。不同类型文件及其打开方式如表1-1所示。

表1-1 不同类型文件及其打开方式

名 称 打 开 方 式
变量(name) 在数组编辑器中打开数组name(数组必须是数值型的)
M文件 (name.m) 在M文件编辑器中打开M文件name.m
模型 (name.mdl) 在Simulink中打开模型name.mdl
MAT文件(name.mat) 在工作空间中打开MAT文件并把变量保存到一个结构中
图形文件 (*.fig) 在图形窗口中打开图形
P文件(name.p) 在P文件编辑器中打开对应的P文件name. P,(如果它存在)

续表

名 称 打开方式
HTML文件(*.html) 在帮助浏览器中打开HTML文档
PDF文件 (*.pdf) 在Adobe Acrobat中打开PDF文件
其他扩展名(name.xxx) 通过调用帮助器函数openxxx打开name.xxx,这里的openxxx是一个自定义函数
没有扩展名(name) 在默认编辑器中打开name。如果name文档不存在,则检查name.mdl或name.m是否在路径上或者在当前目录下,如果是,则打开which('name')返回的文件

打开当前路径上的文件,可以直接用open函数打开,例如

open copyfile.m

如果文件不在当前路径上,打开它需要指定路径名,例如

open('D:\temp\data.mat')

也可以用fopen函数打开文件,该函数的语法格式如下。

fid = fopen(filename):打开文件filename进行读取。如果打开失败,则返回-1。

fid = fopen(filename, mode):用指定模式mode打开文件filename。变量mode可以是表1-2中的任意一种。

表1-2 打开文件的模式

mode取值 打 开 文 件 的 模 式
'r' 打开文件进行读取(默认)
'w' 打开文件,或创建新文件进行写入。将删除文件中已经存在的所有内容
'a' 打开文件,或创建新文件进行写入,在文件末尾添加数据
'r+' 打开文件进行读/写
'w+' 打开文件或创建新文件进行读/写,删除文件中已经存在的所有内容
'a+' 打开文件或创建新文件进行读/写,将数据添加到文件末尾
'A' 在文件的原有内容后面进行添加
'W' 写入但不删除原有内容

[fid,message] = fopen(filename, mode):用指定模式mode打开文件filename。如果打开失败,则返回的fid值为-1,message包含一个与系统有关的错误信息。如果fopen函数成功打开文件,则message的值为空。

[fid,message] = fopen(filename, mode, machineformat):与上面的语法相同,但可以用machineformat参数指定格式。

fids = fopen('all'):返回一个包含所有打开文件的标识符的行矢量,不包括1和2。1和2表示标准输出和标准错误。矢量中元素的个数等于打开的文件的个数。

[filename, mode, machineformat] = fopen(fid):返回filename和mode字符串,以及与指定文件有关的machineformat字符串。如果fid非法,则所有输出变量均为空。

【例1-1】下面的例子是用fopen函数打开文件,读取文件中的数据以后关闭它。

fid=fopen('fgetl.m');

while 1

tline = fgetl(fid);

if ~ischar(tline), break, end

disp(tline)

end

fclose(fid);

保存数据到文件

用save函数将工作空间中的变量保存到磁盘文件中,该函数的语法格式如下。

Save:将工作空间中的所有变量以二进制格式保存到当前目录下的matlab.mat中。用load函数提取数据,MAT文件是双精度的二进制MATLAB格式文件。

save('filename'):将工作空间中的所有变量保存到filename.mat中。

save('filename', 'var1', 'var2', ...):将指定的变量保存到文件filename.mat中。

save('filename', '-struct', 's'):将标量结构s的所有字段作为单个变量保存到文件filename中。

save('filename', '-struct', 's', 'f1', 'f2', ...):只将(s.f1,s.f2,…)指定的那些结构字段作为单个变量保存。

save('-regexp', expr1, expr2, ...):保存与指定正则表达式匹配的变量。

save(..., 'format'):允许使用其他数据格式。其他数据格式如表1-2所示。

save filename var1 var2 ...:语法的命令行格式。

表1-2 其他数据格式及数据的保存方式

数 据 格 式 数据保存方式
-append 添加到已经存在的MAT文件的末尾
-ascii 8位ASCII格式
-ascii -double 16位ASCII格式
-ascii -tabs 用表格键间隔
-ascii -double -tabs 16位ASCII格式,用表格键间隔
-mat 二进制MAT格式(默认格式)
-v4 MATLAB版本4可以打开的一种格式
-v6 MATLAB版本6可以打开的一种格式

【例1-2】下面的语句将工作空间中的所有变量保存到二进制MAT文件test.mat中。

save test.mat

接着将变量a和b保存到MAT文件test.mat中。

savefile = 'test.mat';

a = rand(1, 10);

b = ones(10);

save(savefile, 'a', 'b')

下面将ASCII格式的变量c和d保存到文件test中。

save('d:\mymfiles\june10','vol','temp','-ASCII')

关闭文件

用fclose函数关闭一个或更多已经打开的文件,该函数的语法格式如下。

status = fclose(fid):关闭已经打开的指定文件,若成功则返回0,否则返回-1。变量fid是一个与已经打开的文件相连的文件标识符。如果fid不表示一个打开的文件,或者等于1或2,则fclose函数抛出一个错误。

status = fclose('all'):关闭所有已经打开的文件。若成功则返回0,否则返回-1。