MATLAB文件操作专业知识讲座_第1页
MATLAB文件操作专业知识讲座_第2页
MATLAB文件操作专业知识讲座_第3页
MATLAB文件操作专业知识讲座_第4页
MATLAB文件操作专业知识讲座_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB文献操作

matlab文献输入、输出(I/O)函数允许把其他格式数据文献直接读进matlab,它是以c语言文献I/O函数为基础。10/10/20231第1页高级文献输入输出

10/10/20232第2页Fileinput/outputFileimport/exportfunctions.dlmread-Readdelimitedtextfile.dlmwrite-Writedelimitedtextfile.load-LoadworkspacefromMATLAB(MAT)file.importdata-Loadworkspacevariablesdiskfile.wk1read-Readspreadsheet(WK1)file.wk1write-Writespreadsheet(WK1)file.xlsread-Readspreadsheet(XLS)file.10/10/20233第3页DLMWRITE—写ASCII分隔文献DLMWRITE(FILENAME,M,DLM)将矩阵M写入文献FILENAME,用DLM作为分隔符。指定'\t'产生tab-分隔文献。

DLMWRITE(FILENAME,M,DLM,R,C)从文献FILENAME中偏移R行,C列开始将矩阵M写入,用DLM作为分隔符。R和C都基于零(0),因此R=C=0指文献中第一数据。10/10/20234第4页DLMREAD—读ASCII分隔文献RESULT=DLMREAD(FILENAME,DELIMITER)

从分隔符为DELIMITER文献FILENAME中读取数值数据,成果由RESULT返回.用'\t'表达tab.RESULT=DLMREAD(FILENAME,DELIMITER,R,C)

从DELIMITER分隔文献FILENAME中读取数据。R和C指明文献中数据左上角R行和C列。R和C都基于零(0),因此R=0和C=0指文献中第一数据。RESULT=DLMREAD(FILENAME,DELIMITER,RANGE)

在由RANGE=[R1C1R2C2]指定范围内读,其中(R1,C1)为要读数据左上角,(R2,C2)为右下角。RANGE也能够用表单符号(spreadsheetnotation)RANGE='A1..B7'指定。

DLMREAD用零填充空分隔域。用非空白分隔符作为行结束数据文献,将产生带零填充额外最后列成果。10/10/20235第5页XLSREAD—读Excel电子表格(XLS)文献A=XLSREAD('FILENAME')返回MicrosoftExcel文献FILENAME中第一表单中数值数据[A,B]=XLSREAD('FILENAME')数值数据存入A中,文本数据存入B.[...]=XLSREAD('FILENAME','SHEETNAME')与上相同,但用表单名SHEETNAME.若表单SHEETNAME不存在,则为一错误。空单元格(Emptycells),或具有文本单元格在数值成果中产生NaN。文本打头行(Leadingrowsandcolumnsoftext)不在数值成果中产生NaN。这使得装载这样文献很方便:

TimeTemp129813991497

CityTimeTempDallas1298Tulsa1399Boise149710/10/20236第6页XLSREAD—读Excel电子表格(XLS)文献为从文献中取得有用表单名,调用具有两个输出XLSFINO,如:

[status,sheetNames]=xlsfinfo(FILENAME)当从Excel文献中读取日期域时,日期数据必须转换为MATLAB日期。如,若在Excel文献中包括:

4/12/994/13/994/14/99

象这样把数据转换为MATLAB日期:

excelDates=xlsread(FILENAME)matlabDates=datenum('30-Dec-1899')+excelDates10/10/20237第7页Fileinput/outputImagefileimport/export.imfinfo-Returninformationaboutgraphicsfile.imread-Readimagefromgraphicsfile.imwrite-Writeimagetographicsfile.Audiofileimport/export.auread-ReadNeXT/SUN(AU)soundfile.auwrite-WriteNeXT/SUN(AU)soundfile.wavread-ReadMicrosoftWAVE(WAV)soundfile.wavwrite-WriteMicrosoftWAVE(WAV)soundfile.10/10/20238第8页Fileinput/outputVideofileimport/export.aviread-Readmovie(AVI)file.aviinfo-ReturninformationaboutAVIfile.avifile-CreateanewAVIfile.movie2avi-CreateAVImoviefromMATLABmovie.10/10/20239第9页IMFINFO—图形文献信息INFO=IMFINFO(FILENAME,FMT)

返回一种包括文献名为FILENAME图像文献图像信息域构造,FMT为指定文献格式串。文献必须在目前目录或在MATLAB途径中一种目录中。若IMFINFO找不到名为FILENAME文献,它将寻找名为FILENAME.FMT文献.也许FMT值包括:'bmp'WindowsBitmap(BMP)'cur'WindowsCursorresources(CUR)'gif'GraphicsInterchangeFormat(GIF)'hdf'HierarchicalDataFormat(HDF)'ico'WindowsIconresources(ICO)'jpg'or'jpeg'JointPhotographricExpertsGroup'pcx'WindowsPaintbrush(PCX)'png'PortableNetworkGraphics(PNG)'tif'or'tiff'TaggedImageFileFormat(TIFF)'xwd'XWindowDump(XWD)若FILENAME为不只包括一种图像TIFF,HDF,ICO,或CUR文献,INFO为一种构造数组,文献中每个图像对应一种元素。例如,INFO(3)包括文献中第三个图像信息。10/10/202310第10页IMFINFO—图形文献信息INFO=IMFINFO(FILENAME)试图从文献内容推断文献格式。INFO中域集取决于文献个体及其格式,而第一种域名总是相同。也许域为:Filename文献名字符串FileModDate文献修改日期串FileSize表达文献字节数整数Format如用FMT表达文献格式串;对于JPEG与TIFF文献,返回三字符FormatVersion指明文献格式版本串或数Width表达图像像素宽度整数Height表达图像像素高度整数BitDepth表达图像每像素编比特数整数ColorType表达图像类型字符串;对于真彩色(RGB)图像为'truecolor',对于灰度级图像为'grayscale',对于索引图像为'indexed'。10/10/202311第11页IMREAD—读图形文献A=IMREAD(FILENAME,FMT)

将图像文献FILENAME读入A.若文献中包括是灰度级图像,则A为一种二维数组。若文献中包括是真彩色(RGB)图像,则A为一种三维(M×N×3)数组FILENAME为图像文献名串,FMT图像格式串。文献必须在目前目录或在MATLAB途径中一种目录中。若IMREAD找不到名为FILENAME文献,它将寻找名为FILENAME.FMT文献.也许FMT值包括:'jpg'or'jpeg'JointPhotographicExpertsGroup(JPEG)'tif'or'tiff'TaggedImageFileFormat(TIFF)'gif'GraphicsInterchangeFormat(GIF)'bmp'WindowsBitmap(BMP)'png'PortableNetworkGraphics'hdf'HierarchicalDataFormat(HDF)'pcx'WindowsPaintbrush(PCX)'xwd'XWindowDump(XWD)'cur'WindowsCursorresources(CUR)'ico'WindowsIconresources(ICO)10/10/202312第12页IMREAD—读图形文献[X,MAP]=IMREAD(FILENAME,FMT)将索引图像文献FILENAME读入X,有关colormap读入MAP。图像文献中Colormap值自动缩放到[0,1]范围内。[...]=IMREAD(FILENAME)试图从文献内容推断文献格式。数据类型

在IMREAD支持绝大多数图像文献格式中,用于存放像素每个色平面(colorplane)不超出8比特。当读取这样一种文献时,输出(A或X)类型为uint8.IMREAD也支持从BMP,TIFF和PNG文献中读取每像素16比特数据。对于16比特TIFF和PNG图像文献,输出(A或X)类型为uint16在,而对于16比特BMP图像文献,输出(A或X)类型为uint8.10/10/202313第13页IMREAD—读图形文献TIFF-specificsyntaxes

[...]=IMREAD(...,IDX)从多图像TIFF文献中读取一种图像。IDX为说明图像在文献中出现次序整数。例如,若IDX为3,IMREAD从文献中读取第三个图像。若省略该参数,IMREAD从文献中读取第一种图像。10/10/202314第14页IMREAD—读图形文献PNG-尤其语法

[...]=IMREAD(...,'BackgroundColor',BG)合成输入图像中与BG中指定颜色相反任何透明像素。若BG为'none',则不执行合成。不然,若输入图像为索引,则BG应当为[1,P]内整数,其中P为colormap长度。若输入图像为灰度图像,则BG应当为[0,1]内整数。若输入图像为RGB图像,则BG应当为[0,1]内三元素向量。字符串'BackgroundColor'可缩写(abbreviated)。10/10/202315第15页IMREAD—读图形文献IftheALPHAoutputargumentisused(seebelow),thenBGdefaultsto'none'ifnotspecifiedbytheuser.Otherwise,ifthePNGfilecontainsabackgroundcolorchunk,thatcolorisusedasthedefaultvalueforBG.IfALPHAisnotusedandthefiledoesnotcontainabackgroundcolorchunk,thenthedefaultvalueforBGis1forindexedimages;0forgrayscaleimages;and[000]forRGBimages.

[A,MAP,ALPHA]=IMREAD(...)returnsthealphachannelifoneispresent;otherwiseALPHAis[].NotethatMAPmaybeemptyifthefilecontainsagrayscaleortruecolorimage.10/10/202316第16页IMREAD—读图形文献HDF-尤其语法

[...]=IMREAD(...,REF)从多图像HDF文献中读取一种图像。REF为标明图像参照数(referencenumber)整数。例如,若REF为12,IMREAD从文献中读取参照数为12图像(注意在一种HDF文献中,参照数无须与图像在文献中次序一致一。你能够用IMFINFO使图像次序与参照数协调)。若省略该参数,IMREAD从文献中读取第一种图像。10/10/202317第17页IMREAD—读图形文献ICO和CUR尤其语法

[...]=IMREAD(...,IDX)从多图像图标或光标文献中读取一种图像。IDX为说明图像在文献中出现次序整数。例如,若IDX为3,IMREAD从文献中读取第三个图像。若省略该参数,IMREAD从文献中读取第一种图像。

[A,MAP,ALPHA]=IMREAD(...)对于可用于确定透明信息资源,返回与(AND)掩码(mask)。对于光标文献,该掩码也许包括唯一有用数据。10/10/202318第18页IMREAD—读图形文献支持文献类型

JPEGAnybaselineJPEGimage;JPEGimageswithsomecommonlyusedextensionsTIFFAnybaselineTIFFimage,including1-bit,8-bit,and24-bituncompressedimages;1-bit,8-bit,and24-bitimageswithpackbitscompression;1-bitimageswithCCITTcompression;also,16-bitgrayscale,16-bitindexed,and48-bitRGBimagesGIFAny1-bitto8-bitGIFimageBMP1-bit,4-bit,8-bit,16-bit,24-bit,and32-bituncompressedimages;4-bitand8-bitrun-lengthencoded(RLE)imagesPNGAnyPNGimage,including1-bit,2-bit,4-bit,8-bit,and16-bitgrayscaleimages;8-bitand16-bitindexedimages;24-bitand48-bitRGBimagesHDF8-bitrasterimagedatasets,withorwithoutanassociatedcolormap;24-bitrasterimagedatasetsPCX1-bit,8-bit,and24-bitimagesXWD1-bitand8-bitZPixmaps;XYBitmaps;1-bitXYPixmapsICO1-bit,4-bit,and8-bituncompressedimagesCUR1-bit,4-bit,and8-bituncompressedimages10/10/202319第19页图像直方图均衡处理示例%源程序:test1.mclear,closeall%清除所有内存变量、图形窗口I=imread('pout.tif');%将图像文献pout.tif图像像素数据读入矩阵Iimshow(I)%显示图像I,图像对比度低figure,imhist(I)%在新图形窗口中显示图像I直方图。能够注意到图像%亮度范围相称狭窄,并未完全覆盖也许范围[0,255]I2=histeq(I);%对图像I作直方图均衡赔偿在整个范围内展宽亮度值并%输出到矩阵I2,因而改善了图像I对比度figure,imshow(I2)%在新图形窗口中显示新图像I2,如图1(b)figure,imhist(I2)%在新图形窗口中显示图像I2直方图,如图1(d)imwrite(I2,'pout2.png');%将对比度调整成果图像写入PNG格式文献10/10/202320第20页图像分割与标识示例%程序代码:test2.mclear,closeall,I=imread('rice.tif');imshow(I)%读取和显示8位灰度图rice.tifbackground=imopen(I,strel('disk',15));%取半径为15圆盘构造元素对图像用开运算估计背景figure,imshow(background)%显示背景图figure,surf(double(background(1:8:end,1:8:end))),zlim([0255]);%显示背景彩色表面图,对8×8格点取样set(gca,'ydir','reverse');I2=imsubtract(I,background);figure,imshow(I2)%从原图像中减去背景图像,并显示成果图I3=imadjust(I2,stretchlim(I2),[01]);figure,imshow(I3);%调整图像对比度,并显示成果图level=graythresh(I3);bw=im2bw(I3,level);figure,imshow(bw)%将灰度图像转换成二值图像[labeled,numObjects]=bwlabel(bw,4);%成份标识,4详细指定4-连通成份.grain=imcrop(labeled)%用鼠标选用实现交互式剪裁标识成份一部分RGB_label=label2rgb(labeled,@spring,'c','shuffle');%把一种标识矩阵转换成一种RGB图像figure,imshow(RGB_label)10/10/202321第21页图像分割与标识示例graindata=regionprops(labeled,'basic')%调用regionprops,为rice每一经阈值处理谷粒%返回一种基本属性构造。由BoundingBox域%返回四元素矢量:[lefttopwidthheight]。graindata(51).Area,graindata(51).BoundingBox,graindata(51).Centroidallgrains=[graindata.Area]%用点号存取graindata所有元素面积域并将该数据存入%新矢量allgrains。这个步骤简化了对面积量分析,由于%无须使用域名存取面积。max(allgrains)%找最大谷粒大小。allgrains中数据是一维,%故函数mean和std是适用。biggrain=find(allgrains==ans)%使用find指令返回该最大谷粒成份标识mean(allgrains)%求平均粒径figure,hist(allgrains,20)%作包括20个方柱显示谷粒大小分布直方图。直方图表白,%在rice图像中谷粒最一般大小在300到400个像素范围内。10/10/202322第22页低级文献输入输出10/10/202323第23页Fileinput/outputFileopeningandclosing.fopen-Openfile.fclose-Closefile.FormattedfileI/O.fgetl-Readlinefromfile,discardnewlinecharacter.fgets-Readlinefromfile,keepnewlinecharacter.fprintf-Writeformatteddatatofile.fscanf-Readformatteddatafromfile.input-Promptforuserinput.textread-Readformatteddatafromtextfile.BinaryfileI/O.fread-Readbinarydatafromfile.fwrite-Writebinarydatatofile.10/10/202324第24页打开和关闭文献打开文献语法:

fid=fopen(filename,permission)%以指定格式打开文献[fid,message]=fopen(filename,permission)%返回打开文献信息说明:fid为返回文献指针(FileIdentifier),一般是一种非负整数,假如返回-1,则表达无法打开文献;message用来显示打开文献信息,假如无法打开,则显示错误信息;filename为文献名,是字符串,假如文献不在MATLAB搜索途径中,则需要指定文献途径;permission为指定文献打开模式,有下列几个模式:'r':只读文献'r+':读写文献'w':删除已存在文献内容或建立新文献,并只写文献'w+':删除已存在文献内容或建立新文献,并读写文献'a':以只写方式建立并打开一种新文献或打开一种已存在文献,只能在文献末尾添加内容'a+':以读写方式建立并打开一种新文献或打开一种已存在文献,在文献末尾添加内容fopenpermission参数在打开文献时还可标明文献格式,假如打开文本格式文献,在后添加字母“t”,假如打开二进制格式文献,则在permission参数后添加字母“b”,如'wb'、'rb+'等。10/10/202325第25页打开和关闭文献关闭文献打开文献进行读写操作后,应立即关闭文献,删除文献指针。语法:status=fclose(fid)%关闭文献指针所指文献status=fclose('all')%关闭所有打开文献说明:status为关闭文献指针所指文献状态,假如成功则返回0,假如失败则返回-1;fid为所打开文献指针。【例】打开和关闭一种文本文献。文本文献“Ex0805.txt”,在MATLAB环境中显示文献内容如下:typeEx0805.txt

a123b45610/10/202326第26页打开和关闭文献使用fopen和fclose打开和关闭文献:[fid,message]=fopen('Ex0805.txt','w+') %打开文献读写

fid=3message=''iffid==-1disp('无法打开该文献')elsedisp('成功打开该文献')end

成功打开该文献status=fclose(fid)%关闭文献status=010/10/202327第27页读写格式化文献fscanffscanf命令为读格式化文献数据。语法: [a,count]=fscanf(fid,format,size) %读取格式化数据说明:fid为文献指针,所指为需要读取格式化文献;format指定读取数据格式,指定格式必须和文献中数据格式相同,不然读取数据也许会出现错误,以“%”开头,有%c、%d、%e、%f、%g、%i、%o、%s、%u、%x等(与C语言相同);count为成功读取数据元素个数,可省略;a返回读取数据;size为需要读取数据个数,假如省略,则读到文献末尾,size取值能够有:n:读n个数据到一种列向量inf:读到文献末尾,数据放到一种列向量[m,n]:读出数据个数为m×n,数据放到矩阵中,读出数据按列次序填充矩阵,不够数据用0弥补。10/10/202328第28页读写格式化文献【例】读取Ex0805.txt文献前四个字符。

fid=fopen('Ex0805.txt')

fid=3

a1=fscanf(fid,'%s',4)%以字符串格式读取四个数据a1=a123

fclose(fid)

ans=010/10/202329第29页读写格式化文献fprintffprintf命令为写格式化数据。语法: count=fprintf(fid,format,a,…)

说明:fid为文献指针,所指为二进制文献;a为矩阵数据,将a写到fid指向文献;format为写入格式,除了包括fscanf命令数据格式之外,尚有%E、%G、%X,并具有对齐格式-(左对齐)、+(右对齐)、0(补齐位数),尚有转义字符;count为成功写入数据个数。10/10/202330第30页读写格式化文献【例】使用Ex0805.txt文献进行读取和写入数据。a='%Thisisaexample.';fid=fopen('Ex0805.txt','a+') %打开Ex0805.txt文献在末尾添加fid=3fprintf(fid,'%s',a) %写入a到文献末尾ans=19fclose(fid) %关闭文献ans=0fid=fopen('Ex0805.txt','r') %打开Ex0803.txt文献只读fid=3fscanf(fid,'%s') %读取文献所有内容ans=a123b456%Thisisaexample.fclose(fid)ans=0程序分析:在向文献中写入数据后,先关闭文献,然后再打开文献则从文献开头读取数据,假如写完数据后直接读取数据,则实际读取数据位置将从写入最后一种数据之后开始。10/10/202331第31页读写格式化文献fgetl和fgets

fgetl和fgets命令都是用来读取文献下一行,二者差异是fgetl会舍去换行符,而fgets则保存换行符。语法:

tline=fgetl(fid)%读取文献下一行,不包括换行符 tline=fgets(fid)%读取文献下一行,包括换行符 tline=fgets(fid,nchar)%限制读取文献字符个数说明:

fid为文献指针;tline为以字符串形式返回值,假如到文献末尾则返回-1;nchar为最多返回字符个数。10/10/202332第32页读写格式化文献【例】以行形式读取Ex0805.txt文献。

fid=fopen('Ex0805.txt','r');%打开Ex0803.txt文献只读fgetl(fid)%读取第一行数据ans=a123

fgets(fid)%读取第二行数据ans=b456

fgets(fid,10)%读取第三行数据,限制10个字符ans=%Thisisa

fgets(fid,10)ans=example.10/10/202333第33页读写格式化文献TEXTREAD

从文本文献中读取格式化数据。A=TEXTREAD('FILENAME')A=TEXTREAD('FILENAME','',N)A=TEXTREAD('FILENAME','',param,value,...)A=TEXTREAD('FILENAME','',N,param,value,...)从文献FILENAME中读取数值数据到单个变量中。假如文献包括任何文本数据,则产生错误。[A,B,C,...]=TEXTREAD('FILENAME','FORMAT')[A,B,C,...]=TEXTREAD('FILENAME','FORMAT',N)[A,B,C,...]=TEXTREAD('FILENAME','FORMAT',param,value,...)[A,B,C,...]=TEXTREAD('FILENAME','FORMAT',N,param,value,...)从文献FILENAME中读取数值数据到多种变量A,B,C,等中.每个返回参数类型由FORMAT串给定。返回参数个数必须与FORMAT串中转换标识(conversionspecifiers)个数一致。要是文献中域比格式串中少,将产生错误。要取得更多信息,见背面“格式串”。若指定了N,则重用格式串N次;若N为-1(或未指定),则TEXTREAD读取整个文献。若提供了param,value对,则顾客可配备选项定制了TEXTREAD行为.10/10/202334第34页读写格式化文献TEXTREAD通过从文献中匹配与转换字符组工作。一种输入域定义为一种非空白字符串,始终到下一种空白或分隔符,或宽度耗尽(exhausted)。反复分隔字符很主要,而反复空白字符被当作一种。格式串若FORMAT串为空,TEXTREAD只读数值数据。FORMAT串可含空白字符(被忽视),一般字符(预期来匹配输入中下一种非空白字符),或转换说明。支持转换说明:

%n–读一种数:float或integer(返回double数组)%5n读多达5位数字或直到下一分隔符%d-读符号速整数值(返回double数组)%5d读一种读多达5位数字或直到下一分隔符%u-读一种整数值(返回double数组)%5u读一种读多达5位数字或直到下一分隔符10/10/202335第35页读写格式化文献%f-readafloatingpointvalue(returnsdoublearray)%5freadsupto5digitsoruntilnextdelimiter%s-readawhitespaceseparatedstring(returnscellstr)%5sreadsupto5charactersoruntilwhitespace%q-reada(possiblydoublequoted)string(returnscellstr)%5qreadsupto5non-quotecharactersoruntilwhitespace%c-readcharacterorwhitespace(returnschararray)%5creadsupto5charactersincludingwhitespace%[...]-readscharactersmatchingcharactersbetweenthebracketsuntilfirstnon-matchingcharacterorwhitespace(returnscellstr)use%[]...]toinclude]%5[...]readsupto5characters%[^...]-readscharactersnotmatchingcharactersbetweenthebracketsuntilfirstmatchingcharacterorwhitespace(returnscellstr)use%[^]...]toexclude]%5[^...]readsupto5characters10/10/202336第36页读写格式化文献Note:Formatstringsareinterpretedaswithsprintfbeforeparsing.Forexample,textread('mydata.dat','%s\t')willsearchforatabnotthecharacter'\'followedbythecharacter't'.SeetheLanguageReferenceGuideoraCmanualforcompletedetails.Using%*insteadof%inaconversioncausesTEXTREADtoskipthematchingcharactersintheinput(andnooutputiscreatedforthisconversion).The%canbefollowedbyanoptionalfieldwidthtohandlefixedwidthfields.Forexample%5dreadsa5digitinteger.Inadditionthe%fformatsupportstheform%<width>.<prec>f.USERCONFIGURABLEOPTIONSPossibleparam/valueoptionsare:'bufsize'-maximumstringlengthinbytes(defaultis4095)'commentstyle'-oneof'matlab'--charactersafter%areignored'shell'--charactersafter#areignored'c'--charactersbetween/*and*/areignored'c++'--charactersafter//areignored'delimiter'-delimitercharacters(defaultisnone)'emptyvalue'-emptycellvalueindelimitedfiles(defaultis0)'endofline'-endoflinecharacter(defaultdeterminedfromfile)'expchars'-exponentcharacters(defaultis'eEdD')'headerlines'-numberoflinesatbeginningoffiletoskip'whitespace'-whitespacecharacters(defaultis'\b\t')TEXTREADisusefulforreadingtextfileswithaknownformat.Bothfixedandfreeformatfilescanbehandled.10/10/202337第37页读写格式化文献Examples:Supposethetextfilemydata.datcontainsdatainthefollowingform:SallyType112.3445YesJoeType223.5460NoBillType134.9012No

Readeachcolumnintoavariable[names,types,x,y,answer]=textread('mydata.dat','%s%s%f%d%s');

Readfirstcolumnintoacellarray(skippingrestofline)[names]=textread('mydata.dat','%s%*[^\n]')

Readfirstcharacterintochararray(skippingrestofline)[initials]=textread('mydata.dat','%c%*[^\n]')

Readfileasafixedformatfilewhileskippingthedoubles[names,types,y,answer]=textread('mydata.dat','%9c%5s%*f%2d%3s');

ReadfileandmatchTypeliteral[names,typenum,x,y,answer]=textread('mydata.dat','%sType%d%f%d%s');

Readm-fileintocellarrayofstringsfile=textread('fft.m','%s','delimiter','\n','whitespace','');10/10/202338第38页读写格式化文献Toreadallnumericdatafromadelimitedtextfile,useasingleoutputargument,emptyformatstring,andtheappropriatedelimiter.Forexample,supposedata.csvcontains:1,2,3,45,6,7,89,10,11,12

Readthewholematrixintoasinglevariable:[data]=textread('data.csv','','delimiter',',');

Readthefirsttwocolumnsintotwovariables:[col1,col2]=textread('data.csv','%n%n%*[^\n]','delimiter',',');

Forfileswithemptycells,usetheemptyvalueparameter.Supposedata.csvcontains:1,2,3,4,,67,8,9,,11,12

Readthefilelikethis,usingNaNinemptycells:[data]=textread('data.csv','','delimiter',',','emptyvalue',NaN);10/10/202339第39页读写二进制数据读数据fread命令读二进制数据。语法: [a,count]=fread(fid,size,precision,skip)说明:

fid为文献指针;size与fscanf命令含义相同;precision为一种字符串,用来指定读取数据精度,即数据类型,有'uchar'、'schar'、'int8'、'int16'、'int32'、'int64'、'unit8'、'unit16'、'unit32'、'unit64'、'single'、'float32'、'double'、'float64'等,可省略;a为矩阵数据;count为成功读取数据元素个数,可省略;skip为每读取一种数据后跳过字节数,可省略。10/10/202340第40页读写二进制数据写数据fwrite命令为写二进制数据。语法: count=fwrite(fid,a,precision,skip) %写二进制数据说明:fid为文献指针;a为矩阵数据;precision和skip参数含义与fread命令相同;count为成功写入数据个数。【例】写入数据到MAT文献中,并读取数据。10/10/202341第41页读写二进制数据x1=1:10;[fid,message]=fopen('Ex0805.mat','a')%打开文献添加数据fid=4message=''count1=fwrite(fid,x1) %写入数据count1=10x2=11:15;count2=fwrite(fid,x2) %添加数据count2=5status=fclose(fid);fid=fopen('Ex0805.mat','r');%打开文献只读a1=fread(fid,[2,5]) %读取数据a12=fread(fid,[1,5])a2=1112131415fclose(fid);10/10/202342第42页Fileinput/outputFile位置.feof-Testforend-of-file.ferror-Inquirefileerrorstatus.frewind-Rewindfile.fseek-Setfilepositionindicator.ftell-Getfilepositionindicator.10/10/202343第43页Fileinput/outputFilenamehandling——文献名处理fileparts-Filenameparts.filesep-Directoryseparatorforthisplatform.fullfile-Buildfullfilenamefromparts.matlabroot-RootdirectoryofMATLABinstallation.mexext-MEXfilenameextensionforthisplatform.partialpath-Partialpathnames.pathsep-Pathseparatorforthisplatform.prefdir-Preferencedirectoryname.tempdir-Gettemporarydirectory.tempname-Gettemporaryfile.10/10/202344第44页文献定位fseek命令fseek命令用来移动文献位置指针。语法: status=fseek(fid,offset,origin)说明:fid为文献指针;offset指定移动字节数,假如offset>0,则向后移动,不然向前移动,等于0则不移动;status为返回值,假如移动成功则返回0,不然返回-1;origin指定移动位置指针参照起点:'bof'或-1:文献开头'cof'或0:文献目前位置'eof'或1:文献末尾。10/10/202345第45页文献定位ftell命令 ftell命令是用来获取文献位置指针目前位置。语法: pos=ftell(fid)%获取目前指针位置说明:

pos指字节数,目前位置指针指在此字节数之后。frewind命令

frewind命令用来将文献位置指针移到文献开头。语法: frewind(fid)feof命令

feof命令用来测试位置指针是否在文献结束位置,假如是则返回1,不然返回0。语法: feof(fid)10/10/202346第46页文献定位【例】创建两个mat文献,在Ex0808_1.mat文献中写入1~10数据,并进行求和,在Ex0808_2.mat文献中写入1、2、3三个数据,将第二个数据与前面所求和进行相乘运算。程序保存在Ex0808.m文献中,程序代码如下:%Ex0808文献读取和定位x=1:10;s=0;fid1=fopen('Ex0808_1.mat','w+') %打开文献读写数据fwrite(fid1,x); %写入数据frewind(fid1); %指针移到文献开头whilefeof(fid1)==0 %判断是否到文献末尾 a1=fread(fid1,1) %读取数据 ifisempty(a1)==0 %判断是否为空值 s=a1+s %求和 endendfclose(fid1);y=[123];fid2=fopen('Ex0808_2.mat','w+') %打开文献读写数据fwrite(fid2,y) %写入数据fseek(fid2,-2,'eof') %指针移动到第二个数据a2=fread(fid2,1) %读取数据s=s*a2fclose(fid2);10/10/202347第47页文献定位运行成果得出:s=110程序说明:使用文献位置控制就能够不用反复打开和关闭文献,而直接从文献中读写数据;使用while循环构造,从文献中读取数据,直到文献末尾;当文献位置指针移动到文献最后时,取出数据为空值,但feof函数返回0,因此用isempty函数判断是否为空值来判断是否到文献最后,文献指针再向下移则到文献末尾,feof函数返回1;“fseek(fid2,-2,'eof')”语句是将文献位置指针从末尾向前2个数据。10/10/202348第48页Fileinput/outputStringconversion—字符串转换.sprintf-Writeformatteddatatostring.sscanf-Readstringunderformatcontrol.strread-Readformatteddatafromtextstring.10/10/202349第49页字符串转换SPRINTFWriteformatteddatatostring.

[S,ERRMSG]=SPRINTF(FORMAT,A,...)formatsthedataintherealpartofmatrixA(andinanyadditionalmatrixarguments),undercontrolofthespecifiedFORMATstring,andreturnsitintheMATLABstringvariableS.ERRMSGisanoptionaloutputargumentthatreturnsanerrormessagestringifanerroroccurredoranemptymatrixifanerrordidnotoccur.SPRINTFisthesameasFPRINTFexceptthatitreturnsthedatainaMATLABstringvariableratherthanwritingittoafile.

FORMATisastringcontainingClanguageconversionspecifications.Conversionspecificationsinvolvethecharacter%,optionalflags,optionalwidthandprecisionfields,optionalsubtypespecifier,andconversioncharactersd,i,o,u,x,X,f,e,E,g,G,c,ands.SeetheLanguageReferenceGuideoraCmanualforcompletedetails.

Thespecialformats\n,\r,\t,\b,\fcanbeusedtoproducelinefeed,carriagereturn,tab,backspace,andformfeedcharactersrespectively.Use\\toproduceabackslashcharacterand%%toproducethepercentcharacter.10/10/202350第50页字符串转换SPRINTFbehaveslikeANSICwithcertainexceptionsandextensions.Theseinclude:

1.ANSICrequiresanintegercastofadoubleargumenttocorrectlyuseanintegerconversionspecifierliked.Asimiliarconversionisrequiredwhenusingsuchaspecifierwithnon-integralMATLABvalues.UseFIX,FLOOR,CEILorROUNDonadoubleargumenttoexplicitlyconvertnon-integralMATLABvaluestointegralvaluesifyouplantouseanintegerconversionspecifierliked.Otherwise,anynon-integralMATLABvalueswillbeoutputtedusingtheformatwheretheintegerconversionspecifierletterhasbeenreplacedbye.2.Thefollowingnon-standardsubtypespecifiersaresupportedforconversioncharacterso,u,x,andX.t-TheunderlyingCdatatypeisafloatratherthananunsignedinteger.b-TheunderlyingCdatatypeisadoubleratherthananunsignedinteger.Forexample,toprintoutinhexadoublevalueuseaformatlike'%bx'.3.SPRINTFis"vectorized"forthecasewhenAisnonscalar.TheformatstringisrecycledthroughtheelementsofA(columnwise)untilalltheelementsareusedup.Itisthenrecycledinasimilarmannerthroughanyadditionalmatrixarguments.10/10/202351第51页字符串转换Seethereferencepageintheonlinehelpforotherexceptions,extensions,orplatform-specificbehavior.

Examplessprintf('%0.5g',(1+sqrt(5))/2)1.618sprintf('%0.5g',1/eps)4.5036e+15sprintf('%15.5f',1/eps)4503599627370496.00000sprintf('%d',round(pi))3sprintf('%s','hello')hellosprintf('Thearrayis%dx%d.',2,3)Thearrayis2x3.sprintf('\n')isthelineterminationcharacteronallplatforms.10/10/202352第52页字符串转换SSCANFReadstringunderformatcontrol.

[A,COUNT,ERRMSG,NEXTINDEX]=SSCANF(S,FORMAT,SIZE)readsdatafromMATLABstringvariableS,convertsitaccordingtothespecifiedFORMATstring,andreturnsitinmatrixA.COUNTisanoptionaloutputargumentthatreturnsthenumberofelementssuccessfullyread.ERRMSGisanoptionaloutputargumentthatreturnsanerrormessagestringifanerroroccurredoranemptymatrixifanerrordidnotoccur.NEXTINDEXisanoptionaloutputargumentspecifyingonemorethanthenumberofcharactersscannedinS.SSCANFisthesameasFSCANFexceptthatitreadsthedatafromaMATLABstringvariableratherthanreadingitfromafile.

SIZEisoptional;itputsalimitonthenumberofelementsthatcanbescannedfromthestring;ifnotspecified,theentirestringisconsidered;ifspecified,validentriesare:NreadatmostNelementsintoacolumnvector.infreadatmosttotheendofthestring.[M,N]readatmostM*Nelementsfillingatleasta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论