文件做打开、保存和关闭是最基本的操作。MATLAB提供了进行这些基本操作的函数。
打开文件
1.使用导入工具打开文件
在MATLAB的“主页”工具栏中单击“导入数据”按钮,可以导入很多类型的数据,如文本数据、电子表格数据、图片数据、音频数据和视频数据等,如图1-1所示。
图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。