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=123045006789csvread会传回一个数值矩阵其中缺席的资料将以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的内容送到字符串变量outclass(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

1 / 69
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功