matlab_第四讲

上传人:c****d 文档编号:243018540 上传时间:2024-09-13 格式:PPT 页数:29 大小:96.50KB
返回 下载 相关 举报
matlab_第四讲_第1页
第1页 / 共29页
matlab_第四讲_第2页
第2页 / 共29页
matlab_第四讲_第3页
第3页 / 共29页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第4讲MATLAB文件操作,4.1 文件的打开与关闭,4.2 文件的读写操作,4.3 其它文件相关函数,1,4.1 文件的打开与关闭,fopen函数,fopen函数打开一个文件并对返回这个文件的文件标识数。,fid = fopen(, permission),fid, message = fopen(, permission),fid, message = fopen(, format),其中是要打开的文件名,,premission用于指定打开文件的模式,,format是一个字符串,指定文件中数据的数字格式。,2,如果文件被成功打开,在这个语句执行之后,fid将为一个正整数,message将为一个空字符。,如果文件打开失败,在这个语句执行之后,fid将为-1,message将为解释错误出现的字符串。,注:文件应在MATLAB的当前目录或搜索路径上,或在文件名中给定文件路径, 否则MATLAB找不到,3,permisson选项见下表,fopen中permission选项,permission,意义,b,以二进制形式打开(默认),t,以文本方式打开,r,以只读格式读取文件,r+,可对文件进行读写,w,删除一个已存在文件的内容(或创建一个新文件),并以只写格式打开,w+,删除一个已存在文件的内容(或创建一个新文件),并以读写格式打开,a,打开一个已存在的文件(或创建一个新文件),并以只写文件格式打开把写入的内容增加到文件的结尾,a+,打开一个已存在的文件(或创建一个新文件),并以只写文件格式打开把写入的内容增加到文件的结尾,W,不进行自动洗带的写入数据(针对于磁带机的特殊命令),A,不进行自动洗带的添加数据(针对于磁带机的特殊命令),4,例:,1.为输入二进制数据而打开文件example.dat。,fid = fopen(example.dat,r),2.以文本输出打开文件outdat。,fid = fopen(outdat,wt),fid = fopen(outdat,at),3.,打开文件junk,可以对它进行二进制输入和输出。,fid = fopen(junk, r+),fid = fopen(junk,w+),5,fclose函数,fclose函数用于关闭一文件。它的形式为,status = fclose(fid),status = fclose(all),其中fid为文件标识,status是操作结果,,如果操作成功,status为0,如果操作失败,status为-1。,函数status = fclose(all)关闭了所有的文件。如果所有的文件关闭成功,status将为0,否则为-1,6,4.2 文件的读写操作,二进制文件读写操作,fwrite函数,函数fwrite以自定义格式把二进制数据写入文件。,它的形式为:,count = fwrite(fid, array, precision),count = fwrite(fid, array, precision skip),其中fid是用于fopen打开的一个文件的文件标识,array是写出变量的数组,count是写入文件变量的数目。precision用于控制精度,选择性参数skip指定在每一次写入输出文件之前要跳过的字节数。,注:MATLAB,以列顺序输出数据,7,参数precision字符串用于指定输出数据的格式,8,fread函数,函数fread读取用用户自定义格式从一文件中读取二进制数据。,它的格式如下:,array, count = fread(fid, size, precision),array, count = fread(fid, size, precision, skip),其中fid是用于fopen打开的一个文件的文件标识,array是包含有数据的数组,count是读取文件中变量的数目,size是要读取文件中变量的数目。,参数precision和skip在函数fread和函数fwrite中有相同的意义。,9,参数size用于指定读取文件中变量的数目。这个参数有三种形式。,n准确地读取n个值。执行完相应的语句后,array将是一个包含有n个值的列向量,Inf读取文件中所有值。执行完相应的语句后,array将是一个列向量,包含有从文件所有值。,n,m从文件中精确定地读取nm个值。array是一个nm的数组。,如果fread到达文件的结尾,而输入流没有足够的位数写满指定精度的数组元素,fread就会用最后一位的数填充,或用0填充,直到得到全部的值。,10,例:,建立一数据文件magic5.dat,按二进制存放5阶魔方阵。并用fread 读取。,程序如下:,clear all,fid=fopen(magic5.dat,w);,cnt=fwrite(fid,magic(5),int32);,fclose(fid);,fid=fopen(magic5.dat,r),array,count=fread(fid,5,5,int32);,fclose(fid);,11,文件的格式化读写操作1. 文件的格式化输出,fprintf把以户自定义格式编写的格式化数据写入一个文本文件。它的形式为,count = fprintf(fid, format, val1, val2, .),fprintf(format, val1, val2, .),其中fid是我们要写入数据那个文件的文件标识,format是控制数据显示的字符串。如果fid丢失,数据将写入到标准输出设备(命令窗口)。,12,% Script file: binary_io.m,% To illustrate the use of binary i/o functions.,% 12/19/98 S. J. Chapman Original code,= input(Enter : ,s); % Prompt for,out_array = randn(1,10000); % Generate the data array,fid,msg = fopen(,w); % Open the output writing.,if fid 0,count = fwrite(fid,out_array,float64);,disp(int2str(count) values written.);,status = fclose(fid);,else,disp(msg); % Output failed. Display message.,end,fid,msg = fopen(,r); % Now try to recover the data.,if fid 0,in_array, count = fread(fid,100 100,float64);,disp(int2str(count) values read.);,status = fclose(fid);,else,disp(msg);,end,13,格式(format)字符串指定队列长度,小数精度,域宽和输出格式的其他方面。,%-12.5e,开始的标志 (必需),修饰符,(可选),域宽,(可选),精度,(可选),格式描述(必需),14,函数fprintf的格式转换指定符,指定符,描述,%c,单个字符,%d,十进制表示(有符号的),%e,科学记数法(用到小写的e,例3.1416e+00),%E,科学记数法(用到大写的e,例3.1416E+00),%f,固定点显示,%g,%e和%f中的复杂形式,多余的零将会被舍去,%G,与%g类似,只不过要用到大写的E,%o,八进制表示(无符号的),%s,字符串,%u,十进制(无符号的),%h,用十六进制表示(用小写字母af表示),%H,用十六进制表示(用大写字母AF表示),15,格式标识(修改符),标识(修改符),描述,负号(-),数据在域中左对齐,如果没有这个符号默认为右对齐,+,输出时数据带有正负号,0,如果数据的位数不够,用零填充前面的数,格式字符串的转义字符,转义序列,描述,n,换行,t,水平制表,b,退后一格,r,回车符,使屏幕光标移到当前行开关,下移到下一行,f,跳页符号,打印一个普通反斜杠,or,打印一个省略号或单一引证,%,打印一个百分号(%),16,2. 文件的格式化输入,fscanf 可以从一个文件中按用户自定义格式读取格式化数据。形式如下:,array = fscanf(fid, format),array, count = fscanf(fid, format, size),其中fid是所要读取的文件的文件标识(fileid),format是控制如何读取的格式字符串,array是接受数据的数组,输出参数count返回从文件读取的变量的个数。参数size指定从文件读取数据的数目。这个函数有以下三个类型。,n准确地读取n个值。执行完相应的语句后,array将是一个包含有n个值的列向量,Inf读取文件中所有值。执行完相应的语句后,array将是一个列向量,包含有从文件所有值。,n,m从文件中精确定地读取nm个值。Array是一个nm的数组。,格式字符串用于指定所要读取数据的格式。,如果文件中的数据与格式转换指定符不匹配,fscanf的操作就会突然中止,17,例:,clear all,fid=fopen(magic5.dat,wt);,cnt=fprintf(fid,%5d,magic(5);,fclose(fid);,fid=fopen(magic5.dat,r);,a=fscanf(fid,%5d,5 5);,18,例,:打印表格,% Script file: table.m,% Purpose:,% To create a table of square roots, squares, and,% Record of revisions:,% Date Programmer Description of change,% 12/20/98 S. J. Chapman Original code,% Print the title of the table.,fprintf( Table of Square Roots, Squares, and Cubesnn);,% Print column headings,fprintf( Number Square Root Square Cuben);,fprintf( = = = =n);,% Generate the required data,ii = 1:10;,square_root = sqrt(ii);,square = ii.2;,cube = ii.3;,% Create the output array,out = ii square_root square cube;,% Print the data,for ii = 1:10,fprintf ( %2d %11.4f %6d %8dn,out(ii,:);,end,19,格式化文件和无格式化文件的比较,格式化文件和无格式化文件的比较,格式化文件,无格式化文件,能在输出设备显示数据,不能在输出设备显示数据,能在不同的计算机上很容易地进行移植,不能在不同的计算机上很容易地进行移植,相对地,需要大量的磁盘空间,相对地,需要较少的磁盘空间,慢:需要大量的计算时间,快:需要较少的计算时间,在进行格式化的过程中,产生截断误差或四舍五入错误,不会产生截断误差或四舍五入错误,20,函数textread,命令textrea可以按列读取ascii文件中的元素,每一列中可能含有不同的数据类型。这函数读取其他程序生成的数据表时非常地有用。,这个命令的形式如下,a, b, c, . = textread(, format, n),其中代表要打开的文件的名字,format是用于每一行数据类型的字符串,n代表要读取的行数(如果没有n,则这个命令将读完这个文件)。注意输出参数的个数必须与你读取的列数相区配。,21,例:已有文件例如,假设文件test_input.dat包含下列数据,James Jones O+ 3.51 22 Yes,Sally Smith A+ 3.28 23 NO,这些数据用下面的函数读取:,first, last, blood, gpa, age, answer =.,textread(test_input.dat,%s %s %s %f %d %s),22,textread,函数可以通过在格式描述符前面加一个星号的方式来跳过某些所选项。例如,下面的语句只从文件只读取,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,23,textread函数可以略过数据文件的开头n行.,如有表格状数据文件 : grades.dat ,其第一行是非数据形式的表头,Grade1 Grade2 Grade3,78.8 55.9 45.9,99.5 66.8 78.0,89.5 77.0 56.7,则,grade1 grade2 grade3 = textread(grades.dat,%f %f %f,headerlines,1)可以忽略第一行。,24,1.exist函数用来检测工作区中的变量,内建函数或,MATLAB,搜索路径中的文件是否存在。它的形式如下,ident = exist(item);,ident = exist(item, kind);,如果“item”存在,函数就根据它的类型返回一个值。可能的结果被显示在下表中。,4.3 其它文件相关函数,25,由函数exist的返回值,值,意义,0,没有发现条目,1,条目为当前工作区的一个变量,2,条目为m文件或未知类型的文件,3,条目是一个MEX文件,4,条目是一个MDL文件,5,条目是一个内建函数,6,条目是一个p代码文件,7,条目是一个目录,26,2.函数feof用于检测当前文件的位置是否是文件的结尾。它的形式如下,stat = feof(fid),如果是文件的结尾,那么函数返回1,否则返回0。,3. 函数ftell,函数ftell返回fid对应的文件指针读/写的位置。这个位置是一个非负整数,以byte为单位,从文件的开头开始计数。返回值-1代表位置询问不成功。如果这种情况发生了,函数的形式如下:,position = ftell(fid),4. 函数frewind,函数frewind允许程序把文件指针复位到文件的开头,形式如下,frewind(fid),这个函数不返回任何状态信息。,27,5.函数fseek,函数fseek允许程序把文件指针指向文件中任意的一个位置。函数形式如下,status = fseek(fid, offset, origin),函数用offsett和origin来重设fid对应文件的文件指针。 offset表示位置指针相对移动的字节数,origin表示位置指针移动的参照位置。 origin是一个字符串,取值为下面三个中的一个。,“bof”文件的开始位置,“cof”指针中的当前位置,“eof”文件的结束位置,如果这个操作成功,status的值为0,如果操作失败status为-1。如果status为-1,,28,MATLAB可以读取很多固定格式的外部文件,包括多种表格,图像,声音,视频格式。,请在help菜单中,搜索,可看到MATLAB支持的所有文件格式和相应的读取命令,29,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!