没有合适的资源?快使用搜索试试~ 我知道了~
MATLAB之文件Io
资源推荐
资源详情
资源评论
第1章 文件 I/O
MATLAB 系统具有直接对磁盘文件进行访问的功能,用户不仅可进行高层的程序设计,
必要时还可进行低层次磁盘文件的读写操作,增强了 MATLAB 程序设计的灵活性。
MATLAB 内建有很多有关文件输入和输出的函数,使用者可以很方便地对二进制文件或
ASCII 文件进行打开、关闭和存储等操作。这些函数是基于 C 语言的文件 I/O 函数的,简单
易学。
9.1 打开和关闭文件
9.1.1
打开文件
根据操作系统的要求,在程序要使用或者创建一个磁盘文件时,必须向操作系统发出打
开文件的命令,使用完毕后,还必须通知操作系统关闭这些文件。
在 MATLAB 中,使用 C 语言中的同名函数 fopen 来完成这一功能,其语法为:
fid=fopen(’filename’,’permission’)
其中 filename 是要打开的文件名称,permission 则表示要对文件进行处理的方式。可以
是下列任一字符串:
� ’r’:只读文件(reading);
� ’w’:只写文件,覆盖文件原有内容(如果文件名不存在,则生成新文件,writing);
� ’a’:增补文件,在文件尾增加数据(如果文件名不存在,则生成新文件,appending);
� ’r+’:读写文件(不生成文件,reading and writing);
� ’w+’:创建一个新文件或者删除已有文件内容,并可进行读写操作;
� ’a+’:读取和增补文件(如果文件名不存在,则生成新文件)。
文件可以以二进制的形式或者文本形式打开(默认情况下是前者),在二进制形式下,字
符串不会被特殊对待。如果要求以文本形式打开,则在permission 字符串后面加’t’,例如’rt+’,
’wt+’等。需要说明的是在 UNIX 下,文本形式和二进制形式没有什么区别。
fid 是一个非负整数,称为文件标识,对于文件的任何操作,都是通过这个标识值来传递的,
MATLAB 通过这个值来标识已打开的文件,实现对文件的读、写和关闭等操作。正常情况下应
该返回一个非负的整数,这个值是由操作系统设定的。如果返回的文件标识为’-1’,则表示 fopen 无
法打开该文件,原因可能是该文件不存在,而以’r’或’r+’方式打开,也可能是用户无权限打开
此文件。程序设计中,每次打开文件,都要进行打开操作是否正确的测定。如果要知道 fopen
操作失败的原因,可以使用下列方式调用:
[fid,message]=fopen(’filename’,’r’)
输出变量 message 中包含了文件打开操作结果的信息,示例代码设置如下:
运行后在命令行显示为:
No such file or directory
如果是打开一个存在的文件,示例代码设置如下:
运行后分别查看 message 和 fid 的值如下:
文件标识 fid=1 和 fid=2 是自动获取的,不必打开。如果要获取所有已打开的文件标识值,
可用以下命令:
>> fids=fopen(’all’)
注意,查看错误信息时,也可用 MATLAB 的函数 ferror,其函数格式如下:
message=ferror(fid)
9.1.2
关闭文件
在进行完读写操作后,必须关闭文件,以免打开文件过多,造成系统资源浪费,命令为:
>> status=fclose(fid)
如果关闭成功,则返回 status 值为 0;否则返回-1。
上述命令是关闭了文件标识为 fid 的文件,如果要一次关闭所有打开的文件,则需执行
下面的代码:
>> status=fclose(’all’)
用户可以通过检查 status 的值来确认文件是否关闭。
在某些情况下,可能需要用到暂存目录及临时文件,要取用系统的暂存目录,可用 tempdir
命令:
要打开一个临时文件,可用 tempname 命令:
–348–
>> message
message =
’’
>> fid
fid =
3
[fid,message]=fopen(’test.dat’,’r’);
if fid==-1
disp(message);
end
[fid,message]=fopen(’sum2.m’,’r’);
if fid==-1
disp(message);
end
>> directory=tempdir
directory =
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\
9.2 读取二进制文件
MATLAB 中函数 fread 可以从文件中读取二进制数据,将每一个字节看成一个整数,将
结果写入一个矩阵返回。最基本的调用形式为:
a=fread(fid)
其中,fid 是从 fopen 中得来的文件标识。MATLAB 读取整个文件并将文件指针放在文件末
尾处(在后面的 feof 命令介绍中有详细解释)。
例如,文件 t_b.m 内容如下:
用 fread 函数读取此文件,操作如下:
如要验证,可输入如下代码:
如果不用 char 将 data 转换为 ASCII 字符,则输出的是一组整数,取 data 的转置是为了方便
阅读。
函数 fread 返回矩阵的大小和形式是可控的,通过 fread 的第 2 个输入变量来实现:
a=fread(fid,size)
size 的有效输入大体可分为 3 种:
� n:读取前 n 个整数,并写入一个列向量中;
� inf:读至文件末尾;
� [m,n]:读取数据到 m×n 的矩阵中,按列排序,n 可以是 inf,m 不可以。例
如,对 t_b.m 文件进行操作,示例代码设置如下:
–349–
>> filename=tempname
filename =
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\tp145834
>> fid=fopen(filename,’w’);
>> fid=fopen(’t_b.m’,’r’);
>> data=fread(fid);
注意:打开和关闭文件的操作都比较费时,尽量不要将它们置于循环中,以提高程序执行的效率。
a=[15,20,25,30,35];
b=[1554.88,1555.24,1555.76,1556.20,1556.68];
figure(1)
plot(a,b)
>> disp(char(data’))
a=[15,20,25,30,35];
b=[1554.88,1555.24,1555.76,1556.20,1556.68];
figure(1)
plot(a,b)
>> fid=fopen(’t_b.m’,’r’);
>> data=fread(fid,4)
剩余11页未读,继续阅读
资源评论
蚁库
- 粉丝: 31
- 资源: 99
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#毕业设计-跟踪机器人运动坐标并可视化路径轨迹源码+数据库
- 基于浏览器JS做路径跟踪渲染+源代码+界面截图
- 基于USV路径跟踪LOS控制算法matlab仿真源码+详细注释(下载直接使用)(高分项目)
- CentOS7的docker镜像
- 基于C++和Pure-pursuit算法实现的路径跟踪和给予LQR的轨迹跟踪+源代码+文档说明+脚本(高分项目)
- 基于python实现的路径跟踪控制实现的项目源代码+文档说明(高分课程设计)
- 基于神经网络的虚假评论识别系统(Python源码+文档资料+数据集+代码流程说明文档+详细注释)
- 科大讯飞开发者大赛锂离子电池生产参数调控及生产温度预测挑战赛记录python源码
- 基于Python通过神经网络训练锂离子电池使用相关数据,预测电池当前最大容量+源代码+文档说明(毕业设计)
- 2023年创新组赛题一:基于数据驱动的动力电池健康状态评估与剩余寿命预测python源码+文档说明+全部数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功