您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第五章_文件输入输出(IO)
第五章文件I/O5.1概述5.2高级例程5.3低级例程5.4文件导入向导5.5本章小结5.1概述MATLAB提供了丰富的手段进行数据文件的输入、输出。其中,MATLAB把从磁盘或者剪贴板获取数据到MATLAB的工作空间的过程称之为导入(Importing)数据,把数据从MATLAB的工作空间中按照一定的格式保存到磁盘的过程称之为导出(Exporting)数据。MATLAB导入数据支持的文件格式种类繁多,略加分类包含文本格式文件、二进制格式文件以及其他标准格式文件。用户需要根据不同的需要(导入数据还是导出数据)以及文件的格式(文本或二进制)选择不同的文件I/O方式。MATLAB自己提供一种特殊的数据文件格式——MAT文件,这种文件是一种二进制格式文件,扩展名为.mat,它为MATLAB提供了跨平台的数据交互能力。这些*.mat文件之所以能够独立于各种平台的原因是在文件头带有设备的签名,MATLAB在载入文件时将检查这个签名,如果发现文件来源不同于当前的系统,则进行必要的转换。目前MAT文件的版本为5,它的文件格式如图5-1所示。图5-1MAT文件格式数据长度数据类型数据长度数据类型描述文字(124字节)标识版本一般MAT文件分为两个部分:文件头部和数据。其中在文件的头部主要包括一些描述性文字和相应的版本与标识,这部分占用了128个字节。此后依次是保存在MAT文件中的数据,数据是按照数据类型、数据长度和数据三个部分保存的。MAT文件不仅可以被MATLAB的函数加载,而且还能被C或者Fortran语言编写的程序读写,MATLAB提供了相应的API用于这些应用程序的编写。有关MAT文件的C/Fortran语言API参阅《MATLAB外部接口编程》一书。相对于数据导出,数据文件的读取往往是进行文件I/O比较重要的环节。在MATLAB中进行数据文件的导入有三种不同的途径,分别是高级例程、低级例程和文件导入向导。其中,MATLAB的高级文件I/O例程分别针对不同的数据文件格式提供了不同的文件I/O函数,这些函数能满足大多数情况下数据导入和导出的需要。而低级文件I/O例程则为访问任何一种类型文件的数据提供了接口,不过前提是编程人员必须知道文件的格式。否则读取的结果是错误的。文件的导入向导是供数据导入用的图形界面,用于导入已知格式的文件和有一定规则的ASCII文本文件。5.2高级例程5.2.1一般数据文件操作如前文所示,MAT文件是MATLAB独有的文件格式,提供了跨平台的数据交换能力,也是MATLAB用户最常用的数据文件格式。在MATLAB中,可以将当前工作空间中的变量保存成MAT文件,也可以将MAT文件中的数据导入到MATLAB的工作空间中,这两个过程分别使用save指令和load指令就可以完成。需要说明一点,save和load指令不仅能够加载和保存MAT格式的数据文件,而且还能够加载一般的文本格式文件。但是在文本数据文件中不能包含特殊的文件间隔符。因此,将这两个指令称之为操作一般数据文件的指令。save指令能够将当前工作空间中的变量保存到指定的数据文件中,其基本语法为save将当前工作空间中所有的变量保存到matlab.mat文件中savefilenamevar1var2......将当前工作空间中的变量var1、var2等保存到指定文件中savefilenamedata*(功能同上)其中*为通配符savefilename将当前工作空间中所有的变量保存到指定的文件中save......option按照option的不同取值保存数据save('filename',......)save指令的函数格式用法其中,option可以有如下几种可能:-append在已有的数据文件尾部追加数据-ascii保存为ASCII文本格式,数据按照八位精度保存-ascii-double保存为ASCII文本格式,数据按照十六位精度保存-ascii–tabs保存为ASCII文本格式,数据之间使用制表符作为间隔-ascii-doube–tabs上述几种选项的结合-mat保存为二进制的MAT文件格式(默认)-v4保存为版本4格式的数据文件注意:版本4的MAT文件是早期的MATLAB数据文件格式,现在已经很少使用了。若保存数据为文本格式时不指定间隔符为制表符,则数据之间使用空格作为数据之间的间隔。load指令将数据文件的数据导入到MATLAB的工作空间,其基本的语法为load将matlab.mat文件中所有的变量加载到当前的工作空间loadfilename将指定文件中所有的变量加载到当前的工作空间loadfilenamevar1var2......将指定文件中的指定变量加载到当前工作空间loadfilename-ascii将数据文件按照文本格式加载loadfilename-mat将数据文件按照MAT文件格式加载S=load(......)load指令的函数格式用法注意:使用load指令加载数据文件时,数据文件只要保存在MATLAB的搜索路径上即可,同时若不指明数据文件的扩展名,则数据文件默认按照二进制的MAT文件格式加载,否则都按照文本格式文件加载。这里结合具体的操作示例来说明save和load指令的使用方法。例子5-1save和load指令示例。在MATLAB命令行窗口中,键入下面的指令:clearall%创建变量x1=2;x2=3;x3=4;y1=0;%保存数据savexdatax1x2%察看当前路径下的MAT文件dir*.matxdata.mat%将数据保存为ASCII格式文件savexdata2.datx*-asciiclearall%加载数据——默认加载二进制格式文件loadxdatawhosNameSizeBytesClassx11x18doublearrayx21x18doublearrayGrandtotalis2elementsusing16bytes%加载ACSII格式的数据loadxdata2.datwhosNameSizeBytesClassx11x18doublearrayx21x18doublearrayxdata23x124doublearrayGrandtotalis5elementsusing40bytes例子5-1演示了使用save和load指令保存加载数据的基本过程。需要注意,保存数据文件时的通配符“*”的使用,在例子5-1的操作中,保存文本格式文件时使用了该通配符,于是MATLAB将所有以x开头的变量保存了起来。另外,在加载文本格式的数据时,将所有的数据保存在一个变量中。同样,保存数据的时候,若不保存为二进制格式的MAT文件,则最好指定数据文件的扩展名。注意:Mathworks公司推荐用户在使用MATLAB的过程中尽量使用MAT文件保存用户的数据,这样便于不同平台下的用户共享数据。5.2.2文本文件操作前面小节介绍的load和save指令只能用于读写简单格式的文本文件,在很多时候,数据文件的数据之间使用了特殊的间隔符,或者数据文件直接使用Excel电子表格形式进行保存,这时save或者load指令就不能发挥作用了,于是,MATLAB提供了相应的函数用来完成这些类型数据文件的读、写工作。在表5-1中对常用数据文件的读、写函数进行了总结。表5-1常用数据文件的读写函数文件类型函数说明csvread读取以逗号作为间隔符的文本文件csvwrite保存数据到文本文件,逗号作为间隔符dlmread按照指定的间隔符读取文本文件的数据dlmwrite按照指定间隔符将数据写入文本文件文本文件textread按照指定的格式从文本文件中读取数据xlsfinfo获取文件类型等基本信息Excel电子表格xlsread读取Excel电子表格文件的数据wk1read从Lotus1-2-3电子表格中读取数据Lotus1-2-3电子表格wk2write将数据写入Lotus1-2-3电子表格例子5-2有间隔符的文本读写。001functiondelimiter_examp002%DELIMITER_EXAMP003%读取具有不同间隔符号的文本数据文件004%创建数据005A=round(rand(2,5)*100);006%将数据A保存到csvexamp.txt007csvwrite('csvexamp.txt',A);008%在从该文件中读取数据009B=dlmread('csvexamp.txt',',');010%进行数据处理......011%将数据B保存到dlmexamp.txt,间隔符由用户输入012c=input('输入符号作为间隔符:','s');013dlmwrite('dlmexamp.txt',B,c);014disp('保存数据文件完毕!');015%显示文件的内容016disp('csvexamp.txt:')017typecsvexamp.txt018disp('dlmexamp.txt:')019typedlmexamp.txt执行例子5-2的代码,在MATLAB命令行中键入:delimiter_examp输入符号作为间隔符:Q保存数据文件完毕!csvexamp.txt:56,67,31,92,9093,24,66,59,4dlmexamp.txt:56Q67Q31Q92Q9093Q24Q66Q59Q4注意:在上面例子运行过程中,输入的间隔符Q后面有一个空格。例子5-2中使用了csvwrite、dlmread和dlmwrite函数进行了文本文件的读写。在读写过程中,需要注意不同文件数据的间隔符号。csvread和csvwrite函数可以看作是dlmread和dlmwrite函数的特殊版本。在从文本文件中读取数据的函数中,textread函数是一个比较特殊的函数,它能够按照用户的需要从文本文件中读取指定格式的数据。该函数能够读取的文本文件可以包含任何字符,同时,制定格式的时候可以采用C语言中fscanf使用的格式化字符串。例子5-3使用textread函数。假设在MATLAB的搜索路径下有一个纯文本文件包含了不同的信息,若须读取该文件的内容,可以在MATLAB命令行中键入下面的指令:typeseason.txtBroncos1420.8750yFalcons1420.8750yLions5110.3125nPatriots1510.9375yVikings970.5625y[team,w,l,wp,playoff]=textread('season.txt','%s%d%d%f%c')team='Broncos''Falcons''Lions''Patriots''Vikings'w=14145159l=2whosNameSizeBytesClassl5x140doublearrayplayoff5x110chararrayteam5x1368cellarrayw5x140doublearraywp5x140doublearrayGrandtotalis59elementsusing498bytes…例子5-4读取Excel电子表格文件的数据。在本例中使用的电子表格文件包含下列数据:日期数据这里呢?1112123134145156167NaN8Inf919那么在MATLAB中读取该电子表格文件中的数据:[a,b]=xlsread('xlsexamp.xls')a=NaNNaN1112123134145156167NaN8NaN919b=‘日期’‘数据''这里呢?'[][][][][][][][][][][][][][][][][][][]'NaN'[][]'Inf'[]whosNameSizeBytesClassa10x2160doublearrayb9x3416cellarrayGrandtotalis61elementsusing576bytes利用xlsread函数从电子表格中读取数据时,一般将所有数字量读取出来放置在双精度的数组
本文标题:第五章_文件输入输出(IO)
链接地址:https://www.777doc.com/doc-3607992 .html