MATLAB编程输入输出函数.docx
《MATLAB编程输入输出函数.docx》由会员分享,可在线阅读,更多相关《MATLAB编程输入输出函数.docx(53页珍藏版)》请在冰点文库上搜索。
MATLAB编程输入输出函数
MATLAB编程-输入输出函数
第八章输入/输出函数....................................................................................................................38.1函数textread......................................................................................................................3
8.2关于load和save命令的进一步说明..............................................................................48.3MATLAB文件过程简介...................................................................................................58.4文件的打开与关闭............................................................................................................6
8.4.1fopen函数................................................................................................................6
8.4.2fclose函数...............................................................................................................88.5二进制I/O函数................................................................................................................8
8.5.1fwrite函数...............................................................................................................8
8.5.2fread函数................................................................................................................9
例8.1读写二进制数据...................................................................................................9
测试8.1...........................................................................................................................11
8.6格式化I/O函数..............................................................................................................11
8.6.1fprint函数..............................................................................................................11
8.6.2格式转换指定符的理解.......................................................................................12
8.6.3如何使用格式字符串...........................................................................................14
例8.2产生一个信息表.................................................................................................15
8.6.4fscanf函数.............................................................................................................16
8.6.5fgetl函数...............................................................................................................178.7格式化和二进制I/O函数的比较..................................................................................17
例8.3格式化和二进制I/O文件的比较......................................................................18
测试8.2...........................................................................................................................20
8.8文件位置和状态函数......................................................................................................21
8.8.1exist函数...............................................................................................................21
例8.4打开一个输出文件.............................................................................................21
8.8.2函数ferror.............................................................................................................23
8.8.3函数foef...............................................................................................................238.9函数uiimport...................................................................................................................27
8.10总结................................................................................................................................29
8.10.1好的编程习惯总结.............................................................................................29
8.10.2MATLAB总结....................................................................................................308.11练习................................................................................................................................30
8.1....................................................................................................................................30
8.2....................................................................................................................................30
8.3....................................................................................................................................31
8.4....................................................................................................................................31
8.5....................................................................................................................................31
8.6....................................................................................................................................31
8.7....................................................................................................................................31
8.8....................................................................................................................................318.9....................................................................................................................................328.10..................................................................................................................................328.11..................................................................................................................................328.12..................................................................................................................................328.13..................................................................................................................................32
第八章输入/输出函数
在第二章中,我们已经学到如何用load和save命令加载和保存MATLAB数据,以及如何使用fprintf函数格式化输出数据。
在本章中,我们将学习更多的关于MATLAB输入和输出的功能。
首先,我们将会学习函数textread,在maltab5。
3中它是一个非常有用的函数。
然后,我们将花更多的时间学习load和save命令。
最后,我们将查看其他的MATLABI/O选择。
熟悉C语言的读者对这部分数据将会十分的熟悉。
但是,在MATLAB函数和c函数之间有细微的不同。
8.1函数textread
命令textread最早出现于MATLAB5.3中。
它可以按列读取ascii文件中的元素,每一列中可能含有不同的数据类型。
这函数读取其他程序生成的数据表时非常地有用。
这个命令的形式如下
[a,b,c,...]=textread(filename,format,n)
其中filename代表要打开的文件的名字,format是用于每一行数据类型的字符串,n代表要读取的行数(如果没有n,则这个命令将读完这个文件)。
格式化字符串与函数fprintf格式化描述的字符串相同。
注意输出参数的个数必须与你读取的列数相区配。
例如,假设文件test_input.dat包含下列数据
JamesJonesO+3.5122Yes
SallySmithA+3.2823NO
这些数据用下面的函数读取一系列的数组。
[first,last,blood,gpa,age,answer]=textread('test_input.dat','%s%s%s%f%d%s')
当这个函数被编译时产生如下结果
>[first,last,blood,gpa,age,answer]=textread('test_input.dat','%s%s%s%f%d%s')
first=
'James'
'Sally'
last=
'Jones'
'Smith'
blood=
'O+'
'A+'
gpa=
3.5100
3.2800
age=
22
23
answer=
'Yes'
'NO'
这个函数可以通过在格式描述符前面加一个星号的方式来跳过某些所选项。
例如,下面的语句只从文件只读取first,last和gpa。
>>[first,last,gpa]=textread('test_input.dat','%s%s%*s%f%*d%*s')
first=
'James'
'Sally'
last=
'Jones'
'Smith'
gpa=
3.5100
3.2800
函数textread要比load命令简单有效的多。
load命令假设输入文件中的所有数据都是同一类型——它不支持在不同的列上有不同的数据。
此外,它把所有的数据都存储在一个数据中。
相反地,函数textread允许每一列都有独立的变量,当和由不同类型的数据组成的列运算时,它更加的方便。
textread中有许许多多参数,它们增加了函数的灵活性。
你可通过咨询MATLAB函数
的在线文本得到这些参数的使用细节。
常见编程错误
应用函数text从ascii文件中按行格式读取数据,这个ascii文件可能是其他语言生成的,或是由其他的应用程序生成的,例如表格。
8.2关于load和save命令的进一步说明
save命令把MATLAB工作区数据存储到硬盘,load命令把硬盘上的数据拷贝到工作区中。
save命令即可用特殊的二进制格式mat,file存储数据,也可用普通的ascii码格式存储数据。
save命令的形式为
savefilename[listofvariables][options]
如果只有save命令,那么当前工作区内的所有数据存储在一个名为matlab.mat的文件中。
如果后面有一个文件名,那么这些数据将会存储在“filename.mat”的文件。
如果后面还包括一系列的变量,那么就只存储这些特殊的变量。
支持save命令的参数如表8.1所示。
表8.1save命令的参数
参数描述
mat以mat文件格式存储数据(默认)
ascii用ascii格式保存数据
append给已存在matf文件增加变量
v4也存储为mat文件格式,但能被MATLAB4.0读取
load命令可以加载mat文件或普通的ascii文件中的数据。
load命令的形式如下
loadfilename[option]
如果只有load命令,MATLAB将加载matlab.mat文件中的所有数据。
如果还跟着一个文件名,它load命令将会加载这个文件中的数据。
支持load命令的参数被列于表8.1中。
尽管它们的优点不是十分的明显,但是save和load命令是MATLAB中功能最强大,最有用的I/O命令。
它的优点是
这些命令易于使用1.
2.mat文件的平台独立。
在一个支持MATLAB的计算机上编写的文件,在另一种支持MATLAB的计算机上,可以被读取。
这种格式可以在PC,Mac,许多不同版本的Unix上互相转换。
3.mat文件高效的硬盘空间使用者,它存储数据是高精度的,在mat文件和ascii文件转化过程中会出现精度下降的情况。
4.mat文件存储了工作区内的每一个变量的所有信息,包括它的类属,名字和它是不是全局变量。
在I/O其他类型数据存储格式中所有的这些信息都会丢失。
例如,假设工作区
包含下面信息。
>>whos
NameSizeBytesClass
a10x10800doublearray(global)
ans1x18doublearray
b10x10800doublearray
c2x2332cellarray
string1x1632chararray
student1x32152structarray
Grandtotalis372elementsusing4124bytes
如果工作区用saveworkspace.mat命令存储,那么文件workspace.mat就会被自动创建。
当这个文件被加载时,工作区中的所有信息都会被恢复,包括每一项的类型和一变量是否为全局变量。
这个命令的缺点是生成的mat文件只能由MATLAB调用,其他的程序不可能利用他共享数据。
如要你想要与其他程序共享数据,可以应用-ascii参数,但它有诸多的限制。
表8.2load命令参数
参数描述
-mat把文件当作mat文件看待(如果扩展名是mat,此为默认格式)
-ascii把文件当作ascii格式文件来看待(如果扩展名不为mat,此为默认格式)
好的编程习惯
除非我们必须与非MATLAB程序进行数据交换,存储和加载文件时,都应用mat文件格式。
这种格式是高效的且移植性强,它保存了所有MATLAB数据类型的细节。
save-ascii根本不能存储单元阵列和结构数据,在保存字符串之前,它要把字符串转化相应的数字形式。
load-ascii命令只能加载空间独立的数据,这些数据每一行的元素个数都相等,MATLAB把所有的数据都存储于一个变量中,这个变量与输出文件同名。
如果你要用更高的要求(例如,保存和加载字符串,单元阵列或结构数组并与其它程序进行交换),那么你需要本章后面介绍的I/O命令。
如果我们要加载的文件名或变量名是字符串,那么我们要用这些命令的函数形式。
例如,下面的代码段要求用户提供一个文件名,并把当前工作区保存在那个文件中。
filename=input('Entersavefilename:
','s');
save(filename);
8.3MATLAB文件过程简介
为了使用在MATLAB程序中的文件我们需要一些方法选出我们所要的文件,并从中读取或写入数据。
在MATLAB中有一种非常灵活的读取/写入文件的方法,不管这个文件是在磁盘还是在磁带上或者是其他的存储介质。
这种机制就叫做文件标识(fileid)(有时可简写为fid),当文件被打开,读取,写入或操作时,文件标识是赋值于一个文件的数。
文件标识是一个正整数。
两种文件标识是公开的——文件标识1是标准输出机制,文件标识2是标准错误机制(stderr)。
其他的文件标识,在文件打开时创立,文件关闭时消逝。
许多的MATLAB语句可以控制磁盘文件的输入或输出。
文件I/O函数被总结在表8.3中。
表8.3MATLAB输入/输出语句
类别函数描述
load加载工作区加载/保存工作区
save保存工作区
fopen打开文件文件打开/关闭
fclose关闭文件
fread从文件中读取二进制数据二进制I/O
fwrite把二进制数据写入文件
fscanf从文件中读取格式化数据格式化I/O
fprintf把格式化数据写入文件fgetl读取文件的一行,忽略换行符
fgets