您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > matlab程序设计入门20PPT 18-档案读写
Ch18档案读写张智星jang@cs.nthu.edu.tw~jang清大资工系多媒体检索实验室MATLAB程式設計入門篇:讀寫檔案本章重点MATLAB内建许多有关档案读写的函数对二进制档案或ASCII档案都可以进行处理开启关闭储存MATLAB程式設計入門篇:讀寫檔案高阶的档案读写指令先列出常用读写档案指令,稍后将介绍用法类别支持档案格式指令一般数据MAT-MATLABworkspaceload,saveCSV-Commaseparatednumberscsvread,csvwriteDAT-FormattedtextImportdataDLM-Delimitedtextdlmread,dlmwriteTAB-Tabseparatedtext电子表格XLS-ExcelworksheetXlsreadWK1-Lotus123worksheetwk1read,wk1writeMATLAB程式設計入門篇:讀寫檔案高阶的档案读写指令(cont)类别支持档案格式指令科学资料CDF-CommonDataFormatFITS-Flexiblecdfread,cdfwriteImageTransportSystemFitsreadHDF-HierarchicalDataFormathdfread,hdfwrite电影AVI-Movieaviread影像TIFF,PNG,HDF,BMP,JPEG,GIF,PCX,XWD,CUR,ICO,RAS,PBM,PGM,PPMimread,imwrite音讯AU,SND-NeXT/Sunsoundauread,auwriteWAV-MicrosoftWavesoundwavread,wavwriteMATLAB程式設計入門篇:讀寫檔案csvread使用csvread指令来读取条件:数据文件是由逗号分开只有包含数值资料Ex:csvread01.mfprintf('data.csv的内容:\n');typedata.csv%列出data.csv的内容A=csvread('data.csv')%将data.csv的内容读到矩阵AMATLAB程式設計入門篇:讀寫檔案resultdata.csv的内容:1,2,34,56,7,8,9A=123045006789csvread会传回一个数值矩阵其中缺席的资料将以0填入。MATLAB程式設計入門篇:讀寫檔案dlmread如果数值数据的分界符号(Delimiters)不是逗点,就不能使用csvread指令,而要改用dlmread指令Ex:dlmread01.mfprintf('data.dlm的内容:\n');typedata.dlm%列出data.dlm的内容A=dlmread('data.dlm','\t')%将data.dlm的内容读到矩阵AMATLAB程式設計入門篇:讀寫檔案Resultdata.dlm的内容:123456789A=123045006789上例中data.dlm的数据是以定位键(Tab)隔开,因此dlmread指令的第二个自变量是‘\t’,以代表定位键MATLAB程式設計入門篇:讀寫檔案textread如果档案数据包含数值及字符串,我们就必须改用textread指令Ex:textread01.mfprintf('data.txt的内容:\n');typedata.txt%列出data.txt的内容[name,hobby,age]=textread('data.txt','%s%s%d')MATLAB程式設計入門篇:讀寫檔案resultdata.txt的内容:TimmyOnlineGames13AnnieChatrooms10RogerTennis41name='Timmy‘'Annie''Roger'hobby='OnlineGames''Chatrooms''Tennis'age=131041在上述范例中,data.txt包含三个字段(或是三直行的数据)textread可在第二个自变量指定数据型态例如上例中%s代表字符串,%d代表整数也同时将读入的数据设定到不同的输出自变量由于数据型态的不同,输出自变量也有不同的型态以上述范例来说,name和hobby都是字符串异值数组,而age则是数值数组。MATLAB程式設計入門篇:讀寫檔案使用定位键来分隔字段上例中,我们利用空格来分隔字段如果字段值本身也有空格?改用定位键来分隔字段Ex:textread02.mfprintf('data2.txt的内容:\n');typedata2.txt%列出data2.txt的内容[name,hobby,age]=textread('data2.txt','%s%s%d','delimiter','\t')MATLAB程式設計入門篇:讀寫檔案result结果与前一例相同textread指令中加上对分界字符(Delimiters)的定义,就可以读出由定位键所分隔的数据文件若不指定时,预设为空格键MATLAB程式設計入門篇:讀寫檔案读取文字文件textread也可以读取一个文字文件同时把档案内的每一列文字变成字符串异质数组里面的每一个元素Ex:textread03.mContents=textread('textread03.m','%s','delimiter','\n','whitespace','');class(contents)%印出contents的数据类别contents{1}%列出contents第一列contents{2}%列出contents第二列MATLAB程式設計入門篇:讀寫檔案Resultans=cellans=contents=textread('textread03.m','%s','delimiter','\n','whitespace','');ans=class(contents)%印出contents的数据类别上例使用textread读入textread03.m(也就是此范例档案),并显示此档案的第一列和第二列。textread指令的用法还有很多,功能也很强大在MATLAB下输入「helptextread」可以得到完整的技术支持。MATLAB程式設計入門篇:讀寫檔案Fileread若只是要将一个档案的内容送到一个字符串,可以使用fileread指令Ex:范例16-6:fileread01.mout=fileread(‘data2.txt’);class(out)size(out)MATLAB程式設計入門篇:讀寫檔案Resultans=charans=164上例中,fileread指令会将档案data2.txt的内容送到字符串变量outclass(out)的值是char,显示out的数据型态是字符串size(out)显示字符串out的长度是64。MATLAB程式設計入門篇:讀寫檔案影像与音讯档案有关于影像档案的读写,请参阅本书第十九章「影像显示与读写」;有关音讯档案的读写,请参阅本书第二十章「音讯读写、录制与播放」。MATLAB程式設計入門篇:讀寫檔案更繁复的档案格式一般情况下尽量采取先前介绍的指令来进行读写。数据格式比较繁复时需要一列一列读进来再进行剖析(Parsing)相关指令将在以下介绍。MATLAB程式設計入門篇:讀寫檔案开启档案无论读写ASCII或二进制档案,都必需先用fopen函数来开启档案,语法如:fid=fopen(filename,permission)其中filename表示欲读写的文件名称permission则表示欲对档案进行的处理方式,可以是下列任一字符串:l‘r’:只准读取(reading)档案l‘w’:只准写入(writing)档案l‘a’:只准加入(appending)档案l'a+':可读取及加入档案(readingandappending)省略第二个自变量,permission的默认值就是‘r’。MATLAB程式設計入門篇:讀寫檔案有关fopen在windows下,permission字符串必需能够分辨binary或ASCII档案。例如:若要读binary档案,则permission字符串必需是“rb”fopen另外支持很多permission字符串,可输入「helpfopen」得到完整的信息。fopen函数传回一个档案辨识码,通常是个非负的整数,我们可用此辨识码来对此档案进行各种读写的处理。MATLAB程式設計入門篇:讀寫檔案Ex:fopen01.m上例可知当档案不存在时,回传的fid是–1同时message会包含相关的错误信息。[fid,message]=fopen('no_such_file','r');fprintf('fid=%d\n',fid);fprintf('message=%s\n',message);fid=-1message=Sorry.Nohelpinfiguringouttheproblem...MATLAB程式設計入門篇:讀寫檔案Ex:fopen02.m若开启成功,则传回的fid是一个大于2的整数,而且传回的message是一个空字符串,例如:[fid,message]=fopen('fopen02.m','r');fprintf('fid=%d\n',fid);fprintf('message=%s\n',message);fid=3message=MATLAB程式設計入門篇:讀寫檔案Tips:fopen可传回第二个自变量来显示错误讯息。为了安全起见,最好在每次使用fopen时,都测试其传回的fid是否为有效值。MATLAB使用fid=1来代表「标准输出(StandardOutput)fid=2代表「标准错误输出」(StandardError)因此在使用这两个fid的值时,可以不必使用fopen来开启档案。MATLAB程式設計入門篇:讀寫檔案关闭档案完成档案的读写之后,可用fclose函数来关闭档案,用法如下:status=fclose(fid);若一切顺利,fclose传回0。若无法顺利关闭档案,则fclose传回-1。为避免因开启档案过多而造成系统资源浪费,一般在完成档案的读写后,即应使用fclose来关闭档案MATLAB程式設計入門篇:讀寫檔案Tips:若要一次关闭所有开启的档案,可用fclose('all')或是fcloseall。开启及关闭档案都是比较耗时的函数,因此尽量不要将他们置于循环之中,以提高程序执行效率。MATLAB程式設計入門篇:讀寫檔案读取ASCII档案fgetl函数:可将ASCII档案的内容中的某一列读出并将该列的ASCII内容以转成字符串传回。Ex:fgetl01.mfid=fopen('mean.m','r');whilefeof(fid)==0%feof测试档案指针是否已到达结束位置line=fgetl(fid);disp(line);endMATLAB程式設計入門篇:讀寫檔案读取ASCII档案(cont)执行上述程序后,MATLAB会…先在目前目录找寻mean.m若找不到,再根据搜寻路径,找出mean.m指令的位置然后再将其内容一列一列地列出。请自行动手试用此范例程序代码。输入「whichmean」可显示档案所在的路径fgets和fgetl均可由档案读取一列数据:fgetl会舍去换行字符fgets函数则保留换行字符。MATLAB程式設計入門篇:讀寫檔案应用:仿真unix的grep指令grep:用来找出包含某一特定字符串的一列functiongrep(filename,pattern)fid=fopen(filename,'r');line_number=0;whilefeof(fid)==0,line=fgetl(fid);matched=findstr(line,pattern);if~ise
本文标题:matlab程序设计入门20PPT 18-档案读写
链接地址:https://www.777doc.com/doc-870268 .html