MATLAB文件操作代码_第1页
MATLAB文件操作代码_第2页
MATLAB文件操作代码_第3页
MATLAB文件操作代码_第4页
MATLAB文件操作代码_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

MATLAB文件操作

matlab文件输入、输出(I/O)函数允许把其它格式的数据文件直接读进matlab,它是以c语言文件I/O函数为基础的。1/21/20241高级文件的输入输出

1/21/20242Fileinput/outputFileimport/exportfunctions.dlmread-Readdelimitedtextfile.dlmwrite-Writedelimitedtextfile.load-LoadworkspacefromMATLAB(MAT)file.importdata-Loadworkspacevariablesdiskfile.wk1read-Readspreadsheet(WK1)file.wk1write-Writespreadsheet(WK1)file.xlsread-Readspreadsheet(XLS)file.1/21/20243DLMWRITE—写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指文件中第一数据。1/21/20244

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用零填充空分隔域。用非空白分隔符作为行结束的数据文件,将产生带零填充的额外的最后列的结果。1/21/20245

XLSREAD—读Excel电子表格(XLS)文件

A=XLSREAD('FILENAME')

返回MicrosoftExcel文件FILENAME中的第一表单中的数值数据[A,B]=XLSREAD('FILENAME')

数值数据存入A中,文本数据存入

B.[...]=XLSREAD('FILENAME','SHEETNAME')

与上相同,但用表单名SHEETNAME.若表单SHEETNAME不存在,则为一错误。空单元格(Emptycells),或具有文本的单元格在数值结果中产生NaN。

文本打头行(Leadingrowsandcolumnsoftext)不在数值结果中产生NaN。这使得装载这样的文件很方便:

TimeTemp129813991497

CityTimeTempDallas1298Tulsa1399Boise14971/21/20246XLSREAD—读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')+excelDates1/21/20247Fileinput/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.1/21/20248Fileinput/outputVideofileimport/export.aviread-Readmovie(AVI)file.aviinfo-ReturninformationaboutAVIfile.avifile-CreateanewAVIfile.movie2avi-CreateAVImoviefromMATLABmovie.1/21/20249

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)包含文件中第三个图像的信息。1/21/202410IMFINFO—图形文件信息INFO=IMFINFO(FILENAME)试图从文件内容推断文件格式。INFO中的域集取决于文件个体及其格式,而第一个域名总是相同的。可能的域为:Filename文件名字符串FileModDate文件修改日期串FileSize表示文件字节数的整数Format如用FMT表示的文件格式串;对于JPEG与TIFF文件,返回三字符FormatVersion指明文件格式版本的串或数Width表示图像像素宽度的整数Height表示图像像素高度的整数BitDepth表示图像每像素编比特数的整数ColorType

表示图像类型的字符串;对于真彩色(RGB)图像为'truecolor',对于灰度级图像为'grayscale',对于索引图像为'indexed'。1/21/202411

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)1/21/202412

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.1/21/202413

IMREAD—读图形文件TIFF-specificsyntaxes

[...]=IMREAD(...,IDX)

从多图像TIFF文件中读取一个图像。

IDX为说明图像在文件中出现顺序的整数。比如,若IDX为3,IMREAD从文件中读取第三个图像。若省略该参数,IMREAD从文件中读取第一个图像。1/21/202414IMREAD—读图形文件

PNG-特别语法

[...]=IMREAD(...,'BackgroundColor',BG)

合成输入图像中与BG中指定的颜色相反的任何透明像素。若BG为'none',则不执行合成。否则,若输入图像为索引的,则BG应该为[1,P]内的整数,其中

P为colormap长度。若输入图像为灰度图像,则BG应该为[0,1]内的整数。若输入图像为RGB图像,则BG应该为[0,1]内的三元素向量。字符串'BackgroundColor'可缩写(abbreviated)。1/21/202415

IMREAD—读图形文件IftheALPHAoutputargumentisused(seebelow),thenBGdefaultsto'none'ifnotspecifiedbytheuser.Otherwise,ifthePNGfilecontainsabackgroundcolorchunk,thatcolorisusedasthedefaultvalueforBG.IfALPHAisnotusedandthefiledoesnotcontainabackgroundcolorchunk,thenthedefaultvalueforBGis1forindexedimages;0forgrayscaleimages;and[000]forRGBimages.

[A,MAP,ALPHA]=IMREAD(...)returnsthealphachannelifoneispresent;otherwiseALPHAis[].NotethatMAPmaybeemptyifthefilecontainsagrayscaleortruecolorimage.1/21/202416

IMREAD—读图形文件

HDF-特别语法

[...]=IMREAD(...,REF)

从多图像HDF文件中读取一个图像。REF为标明图像的参照数(referencenumber)的整数。比如,若REF为12,IMREAD从文件中读取参照数为12的图像(注意在一个HDF文件中,参照数不必与图像在文件中的顺序一致一。你可以用IMFINFO使图像顺序与参照数协调)。若省略该参数,IMREAD从文件中读取第一个图像。1/21/202417

IMREAD—读图形文件ICO和CUR特别语法

[...]=IMREAD(...,IDX)

从多图像图标或光标文件中读取一个图像。IDX为说明图像在文件中出现顺序的整数。比如,若IDX为3,IMREAD从文件中读取第三个图像。若省略该参数,IMREAD从文件中读取第一个图像。

[A,MAP,ALPHA]=IMREAD(...)

对于可用于确定透明信息的资源,返回与(AND)掩码(mask)。对于光标文件,该掩码可能包含唯一有用的数据。1/21/202418

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-bitXYPixmaps

ICO1-bit,4-bit,and8-bituncompressedimagesCUR1-bit,4-bit,and8-bituncompressedimages1/21/202419图像直方图均衡处理示例%源程序: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格式的文件1/21/202420图像分割与标记示例%程序代码: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)1/21/202421图像分割与标记示例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个像素的范围内。1/21/202422低级文件的输入输出1/21/202423Fileinput/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.1/21/202424打开和关闭文件打开文件语法:

fid=fopen(filename,permission)%以指定格式打开文件

[fid,message]=fopen(filename,permission)%返回打开文件的信息说明:

fid为返回的文件指针(FileIdentifier),通常是一个非负的整数,如果返回-1,则表示无法打开文件;message用来显示打开文件的信息,如果无法打开,则显示错误信息;filename为文件名,是字符串,如果文件不在MATLAB的搜索路径中,则需要指定文件路径;permission为指定文件的打开模式,有以下几种模式:'r':只读文件'r+':读写文件'w':删除已存在文件内容或建立新文件,并只写文件'w+':删除已存在文件内容或建立新文件,并读写文件'a':以只写方式建立并打开一个新文件或打开一个已存在的文件,只能在文件末尾添加内容'a+':以读写方式建立并打开一个新文件或打开一个已存在的文件,在文件末尾添加内容fopen的permission参数在打开文件时还可标明文件格式,如果打开文本格式文件,在后添加字母“t”,如果打开二进制格式文件,则在permission参数后添加字母“b”,如'wb'、'rb+'等。1/21/202425打开和关闭文件关闭文件打开文件进行读写操作后,应立即关闭文件,删除文件指针。语法:

status=fclose(fid)%关闭文件指针所指的文件

status=fclose('all')%关闭所有打开的文件说明:status为关闭文件指针所指文件的状态,如果成功则返回0,如果失败则返回-1;fid为所打开的文件指针。【例】打开和关闭一个文本文件。文本文件“Ex0805.txt”,在MATLAB环境中显示的文件内容如下:typeEx0805.txt

a123b4561/21/202426打开和关闭文件使用fopen和fclose打开和关闭文件:[fid,message]=fopen('Ex0805.txt','w+') %打开文件读写

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

成功打开该文件status=fclose(fid)%关闭文件status=01/21/202427读写格式化文件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填补。1/21/202428读写格式化文件【例】读取Ex0805.txt文件的前四个字符。

fid=fopen('Ex0805.txt')

fid=3

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

fclose(fid)

ans=01/21/202429读写格式化文件fprintffprintf命令为写格式化数据。语法:

count=fprintf(fid,format,a,…)

说明:

fid为文件指针,所指为二进制文件;a为矩阵数据,将a写到fid指向的文件;format为写入的格式,除了包含fscanf命令的数据格式之外,还有%E、%G、%X,并具有对齐格式-(左对齐)、+(右对齐)、0(补齐位数),还有转义字符;count为成功写入数据的个数。1/21/202430读写格式化文件【例】使用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程序分析:在向文件中写入数据后,先关闭文件,然后再打开文件则从文件开头读取数据,如果写完数据后直接读取数据,则实际读取数据的位置将从写入的最后一个数据之后开始。1/21/202431读写格式化文件fgetl和fgets

fgetl和fgets命令都是用来读取文件的下一行,两者的差别是fgetl会舍去换行符,而fgets则保留换行符。语法:

tline=fgetl(fid)%读取文件的下一行,不包括换行符

tline=fgets(fid)%读取文件的下一行,包括换行符

tline=fgets(fid,nchar)%限制读取文件字符个数说明:

fid为文件指针;tline为以字符串形式的返回值,如果到文件末尾则返回-1;nchar为最多返回的字符个数。1/21/202432读写格式化文件【例】以行的形式读取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.1/21/202433读写格式化文件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的行为.1/21/202434读写格式化文件TEXTREAD通过从文件中匹配与转换字符组工作。一个输入域定义为一个非空白字符的串,一直到下一个空白或分隔符,或宽度耗尽(exhausted)。重复的分隔字符很重要,而重复的空白字符被看成一个。格式串若FORMAT串为空,TEXTREAD只读数值数据。

FORMAT串可含空白字符(被忽略),普通字符(预期来匹配输入中下一个非空白字符),或转换说明。支持的转换说明:

%n–读一个数:float或integer(返回double数组)%5n读多达5位数字或直到下一分隔符%d-读符号速整数值(返回double数组)%5d读一个读多达5位数字或直到下一分隔符%u-读一个整数值(返回double数组)%5u读一个读多达5位数字或直到下一分隔符1/21/202435读写格式化文件%f-readafloatingpointvalue(returnsdoublearray)%5freadsupto5digitsoruntilnextdelimiter%s-readawhitespaceseparatedstring(returnscellstr)%5sreadsupto5charactersoruntilwhitespace

%q-reada(possiblydoublequoted)string(returnscellstr)%5qreadsupto5non-quotecharactersoruntilwhitespace

%c-readcharacterorwhitespace(returnschararray)%5creadsupto5charactersincludingwhitespace

%[...]-readscharactersmatchingcharactersbetweenthebracketsuntilfirstnon-matchingcharacteror

whitespace(returnscellstr)use%[]...]toinclude]%5[...]readsupto5characters%[^...]-readscharactersnotmatchingcharactersbetweenthebracketsuntilfirstmatchingcharacterorwhitespace

(returnscellstr)use%[^]...]toexclude]%5[^...]readsupto5characters1/21/202436读写格式化文件

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.1/21/202437读写格式化文件

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','');1/21/202438读写格式化文件

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);1/21/202439读写二进制数据读数据

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为每读取一个数据后跳过的字节数,可省略。1/21/202440读写二进制数据写数据fwrite命令为写二进制数据。语法:

count=fwrite(fid,a,precision,skip) %写二进制数据说明:fid为文件指针;a为矩阵数据;precision和skip参数含义与fread命令相同;count为成功写入数据的个数。【例】写入数据到MAT文件中,并读取数据。1/21/202441读写二进制数据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);1/21/202442Fileinput/outputFile位置.feof-Testforend-of-file.ferror-Inquirefileerrorstatus.frewind-Rewindfile.fseek-Setfilepositionindicator.ftell-Getfilepositionindicator.1/21/202443Fileinput/outputFilenamehandling——文件名处理fileparts-Filenameparts.filesep-Directoryseparatorforthisplatform.fullfile-Buildfullfilenamefromparts.matlabroot-RootdirectoryofMATLABinstallation.mexext-MEXfilenameextensionforthisplatform.partialpath-Partialpathnames.pathsep-Pathseparatorforthisplatform.prefdir-Preferencedirectoryname.tempdir-Gettemporarydirectory.tempname-Gettemporaryfile.1/21/202444文件定位fseek命令fseek命令用来移动文件位置指针。语法:

status=fseek(fid,offset,origin)说明:fid为文件指针;offset指定移动的字节数,如果offset>0,则向后移动,否则向前移动,等于0则不移动;status为返回值,如果移动成功则返回0,否则返回-1;origin指定移动位置指针的参考起点:'bof'或-1:文件的开头'cof'或0:文件的当前位置'eof'或1:文件的末尾。1/21/202445文件定位ftell命令

ftell命令是用来获取文件位置指针的当前位置。语法:

pos=ftell(fid)%获取当前指针位置说明:

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

frewind命令用来将文件位置指针移到文件的开头。语法:

frewind(fid)feof命令

feof命令用来测试位置指针是否在文件结束位置,如果是则返回1,否则返回0。语法:

feof(fid)1/21/202446文件定位【例】创建两个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);1/21/202447文件定位运行结果得出:s=110程序说明:使用文件位置控制就可以不用反复打开和关闭文件,而直接从文件中读写数据;使用while循环结构,从文件中读取数据,直到文件末尾;当文件位置指针移动到文件最后时,取出的数据为空值,但feof函数返回0,因此用isempty函数判断是否为空值来判断是否到文件最后,文件指针再向下移则到文件末尾,feof函数返回1;“fseek(fid2,-2,'eof')”语句是将文件位置指针从末尾向前2个数据。1/21/202448Fileinput/outputStringconversion—字符串转换.sprintf-Writeformatteddatatostring.sscanf-Readstringunderformatcontrol.strread-Readformatteddatafromtextstring.1/21/202449字符串转换

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.1/21/202450字符串转换

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.1/21/202451字符串转换

Seethereferencepageintheonlinehelpforotherexceptions,extensions,orplatform-specificbehavior.

Examples

sprintf('%0.5g',(1+sqrt(5))/2)1.618sprintf('%0.5g',1/eps)4.5036e+15sprintf('%15.5f',1/eps)4503599627370496.00000

sprintf('%d',round(pi))3

sprintf('%s','hello')hello

sprintf('Thearrayis%d

温馨提示

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

评论

0/150

提交评论