您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第3章_Matlab程序设计_part4
3.7文件的读写3.7.1数据文件的分类分为:ASCII码文件,二进制文件有四点区别:1)是否能在输出设备上显示2)否能在不同的计算机间传送3)是否需要大的存储空间4)执行时间3.7.2文件的打开和关闭1.文件的打开在读写数据文件之前,必须先用fopen函数打开文件,并指定对文件进行的读、写操作。格式:fid=fopen(文件名,打开方式)其中,fid用于存储文件句柄值,如果句柄值大于0,则说明文件打开成功。句柄值用来唯一标识该数据文件,其他函数可以利用它对该数据文件进行操作文件名用字符串形式,表示待打开的数据文件;打开方式也用字符串形式,有:‘r'(读)、‘w'(写)、‘a'(追加)、‘r+'(可读可写)等。2.文件的关闭文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数实现,调用格式为sta=fclose(fid)该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0;否则,返回-1。如果要关闭所有已打开的文件用fclose('all')。3.7.3二进制I/O函数打开二进制数据文件后,应用fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中;用fread函数读取二进制文件的数据,并将数据存入矩阵。fwrite函数的调用格式为:COUNT=fwrite(fid,A,precision)其中,COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的精度,常用的数据精度为:char、unchar、int、long、float、double等。缺省数据精度为unchar,即无符号字符格式。fread函数的调用格式为:[A,count]=fread(fid,size,precision)其中,A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用,则它的值可以是下列值:N读取N个元素到一个列向量Inf读取整个文件[M,N]读数据到M*N的矩阵中,数据按列存放precision代表数据精度,常用的数据精度为char,unchar,int,long,float,double等。缺省数据精度为unchar,即无符号字符格式。[例3-34]:建立一数据文件magic5.dat,用于存放5阶魔方阵。然后打开该文件,对大于5的元素求平方根,对小于等于5的元素求平方后存放在原数据的后面。3.7.4格式化I/O函数打开格式化数据文件后,应用fprintf函数可以将数据按指定格式写入到文本文件中;应用fscanf函数读取文本文件的内容,并按指定格式存入矩阵fprintf函数调用格式为:COUNT=fprintf(FID,FORMAT,A)其中,COUNT返回所写入的数据元素个数,A存放要写入文件的数据。先按format指定的格式将数据矩阵A格式化,然后写入到Fid所指定的文件。format可以控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。fscanf函数调用格式为:[A,COUNT]=fscanf(Fid,FORMAT,SIZE)其中,A用来存放读取的数据,COUNT返回所读取的数据元素个数。Fid为文件句柄。Format可以控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值:N读取N个元素到一个列向量Inf读取整个文件[M,N]读数据到M*N的矩阵中,数据按列存放。[例3-35]:建立一数据文件cfs.dat,用于存放1-10平方和立方。[例3-36]:建立一数据文件,用于存放若干名学生的姓名和成绩。3.7.5文件位置和状态函数文件位置和状态函数有feof,ftell,frewind和fseek1.测试文件尾部的函数(feof)格式:feof(FID)功能:测试文件的尾部。其中FID为文件句柄,如果文件位置指针是该文件的尾部,返回1;否则返回0。2.返回文件指针当前位置的函数(ftell)格式:POSITION=ftell(FID)功能:返回文件指针的当前位置。返回值为从文件开始到指针当前位置的字节数。若返回值为-1表示为获取文件当前位置失败。3.设置文件读写指针的函数(frewind和fseek)格式:STATUS=fseek(FID,OFFSET,ORIGIN)功能:以指定的OFFSET相对于ORIGIN重新定位文件位置指针。其中FID为文件句柄,OFFSET表示位置指针相对移动的字节数,它的取值有3种可能:若为正整数表示向文件尾方向移动;若为负数表示向文件头方向移动;若为零表示不移动。ORIGIN表示位置指针移动的参照位置,它的取值有3种可能:‘cof’或0表示文件的当前位置,‘bof’或-1表示文件的开始位置,‘eof’或1表示文件的结束位置。若成功,STATUS返回值为0,否则返回值为-1,这时可用ferror函数获取出错信息。如语句fseek(fid,0,-1)的功能是设置文件指针为文件的开头。格式:frewind(FID)功能:设置文件位置指针为文件的开头。[例3-37]:演示数据文件的指定位置数据的读取方法。3.8程序设计的辅助函数在Matlab语言的程序设计中,有几组辅助函数可用于支持M文件的编辑,包括:数据检查函数、容错函数、串演算函数、跨空间变量传递函数、内存管理函数、目录与文件管理函数以及日期与时间函数等对这些函数的合理使用可以增强函数的“鲁棒性”或丰富函数功能。3.8.1数据检查函数1.exist函数exist(‘A’)检查A是否为已存在的变量名、函数名、文件名、目录名或类名。如果不存在返回0,如果A是变量名返回1,具体可查看帮助。exist(‘A’,‘var’)判断是否存在变量Aexist(‘A’,‘builtin’)判断是否存在Matlab内建函数Aexist(‘A’,‘file’)判断是否存在文件或目录Aexist(‘A’,‘dir’)判断是否存在目录Aexist(‘A’,‘class’)判断是否存在类名为A的类2.获取数据维数、大小等信息的函数包括ndims,size,numel,length等3.特殊数据判断函数isempty(A)如果A是空数组,则返回1,否则返回0isscalar(A)如果A是1x1的矩阵(标量),则返回1;否则返回0isvector(A)如果A是行向量或列向量,则返回1;否则返回0特殊数据判断函数(cont.)X=isinf(A)判断数组A的元素是否为无穷大,返回一个与A同型的数组。如果A(i)是无穷大,则X(i)取1;否则,X(i)取0X=isnan(A)判断数组A的元素是否为NaN,返回一个与A同型的数组。如果A(i)是NaN,则X(i)取1,否则X(i)取0。X=isfinite(A)判断数组A的元素是否为有限值,返回一个与A同型的数组。如果A(i)是有限值,则X(i)取1;否则X(i)取0[例]当A=[piNaNInf-Inf]时,分析isinf(A),isnan(A)和isfinite(A)的运算结果4.数据类型的获取与判断函数数据类型判断函数可以对数组的类型做出判断,如逻辑数组、稀疏数组、实数数组、标量数组、向量数组等,还可以判断数组中数值型数据的类型,如数值型的数据类型有双精度型(默认)、单精度、带符号整数型(int8,int16,int32,int64)和无符号整数型(uint8,uint16,uint32,uint64)常用的数据类型判断函数有:class(X)返回变量X的类型名(以字符串形式)。常用的数据类型判断函数islogical(X)如果X是逻辑数组,则返回1;否则返回0ischar(s)如果s是字符数组,则返回1;否则返回0isnumeric(A)如果A是数值数组,则返回1;否则返回0isreal(A)如果A是不带虚部的实数组,则返回1;否则返回0isinteger(A)如果A是整数型数值数组,则返回1;否则返回0isfloat(A)如果A是浮点型数值数组,则返回1;否则返回0常用的数据类型判断函数(cont.)issparse(S)如果S是稀疏数组,则返回1;否则返回0isstruct(S)如果S是构架数组,返回1;否则返回0iscell(C)如果C是元胞数组,返回1;否则返回0iscellstr(X)若X是由字符串组成的元胞数组,则返回1;否则返回0isa函数格式:isa(x,'classname'),'classname'是数据类型名或类名。功能:如果x是由'classname'指定的数据类型,则返回1;否则返回0可能的数据类型:double,logical,char,single,float,int8,int16,int32,int64,uint8,uint16,uint32,uint64,integer,numeric,cell,struct,function_handle或任何MATLAB或Java类的类名。isa函数举例[例]输入以下命令,观察执行结果a=eye(3);isa(a,'logical'),isa(a,'integer'),isa(a,'single'),isa(a,'double'),isa(a,'float')b=int8(a);isa(b,'integer'),isa(b,'int8')c=logical(a);isa(c,'logical')S.name='ZhangSan';S.age=38;isa(S,'struct'),isa(S,'char'),isa(S.name,'char')C={'Zhang','Wang','Li','Zhao'};isa(C,'cell'),iscellstr(C),isa(C,'char'),isa(C{1},'char')isfield函数格式:isfield(x,name)功能:判断由字符串name指定的标记符是否为架构数组x的域名。如果是,返回1,否则返回0。例如:clear;S=struct('name','ZhangSan','scores',[708090])isfield(S,'name')isfield(S,'scores')isfield(S,'age')这些函数在什么函数库中?elmat(基本矩阵和矩阵操作),elfun(基本数学函数)strfun(字符串函数)datatypes(数据类型函数)sparfun(稀疏矩阵)3.8.2容错函数1)error函数格式:error(‘错误信息’)程序执行到error语句时,将显示错误信息并终止程序的运行。2)warning函数warning的用法类似于函数error,不同的是:warning并不终止程序的执行,而仅给出警告信息。其它有关的函数:lasterr(给出上一个错误信息),lastwarn(给出上一个警告信息)。3)try-catch结构:格式:try语句组1catch语句组2end在执行以上程序时,将先执行语句组1,如果执行语句组1时出错,则将执行语句组2(如果执行语句组2时也出错,将终止程序的执行)。3.8.3串演算函数1.eval函数格式:eval(s)s是字符串,其内容可以是任何合法的指令、表达式、语句或M文件名。功能:将字符串s的内容作为命令或者表达式进行执行或运算。y=eval(s)将字符串s的内容作为表达式进行计算,将
本文标题:第3章_Matlab程序设计_part4
链接地址:https://www.777doc.com/doc-3827419 .html