MATLAB文件操作代碼_第1頁
MATLAB文件操作代碼_第2頁
MATLAB文件操作代碼_第3頁
MATLAB文件操作代碼_第4頁
MATLAB文件操作代碼_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

MATLAB文件操作

matlab文件輸入、輸出(I/O)函數(shù)允許把其它格式的數(shù)據(jù)文件直接讀進(jìn)matlab,它是以c語言文件I/O函數(shù)為基礎(chǔ)的。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'產(chǎn)生tab-分隔的文件。

DLMWRITE(FILENAME,M,DLM,R,C)

從文件FILENAME中偏移R行,C列開始將矩陣

M寫入,用DLM作為分隔符。R和C都基于零(0)的,所以R=C=0指文件中第一數(shù)據(jù)。1/21/20244

DLMREAD—讀ASCII分隔的文件RESULT=DLMREAD(FILENAME,DELIMITER)

從分隔符為DELIMITER的文件FILENAME中讀取數(shù)值數(shù)據(jù),結(jié)果由RESULT返回.用'\t'表示tab.RESULT=DLMREAD(FILENAME,DELIMITER,R,C)

從DELIMITER分隔的文件FILENAME中讀取數(shù)據(jù)。R和C指明文件中數(shù)據(jù)的左上角R行和C列。R和C都基于零(0)的,所以R=0和C=0指文件中第一數(shù)據(jù)。RESULT=DLMREAD(FILENAME,DELIMITER,RANGE)

在由RANGE=[R1C1R2C2]指定的范圍內(nèi)讀,其中(R1,C1)為要讀的數(shù)據(jù)的左上角,(R2,C2)為右下角。RANGE也可以用表單符號(spreadsheetnotation)RANGE='A1..B7'指定。

DLMREAD用零填充空分隔域。用非空白分隔符作為行結(jié)束的數(shù)據(jù)文件,將產(chǎn)生帶零填充的額外的最后列的結(jié)果。1/21/20245

XLSREAD—讀Excel電子表格(XLS)文件

A=XLSREAD('FILENAME')

返回MicrosoftExcel文件FILENAME中的第一表單中的數(shù)值數(shù)據(jù)[A,B]=XLSREAD('FILENAME')

數(shù)值數(shù)據(jù)存入A中,文本數(shù)據(jù)存入

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

與上相同,但用表單名SHEETNAME.若表單SHEETNAME不存在,則為一錯誤??諉卧?Emptycells),或具有文本的單元格在數(shù)值結(jié)果中產(chǎn)生NaN。

文本打頭行(Leadingrowsandcolumnsoftext)不在數(shù)值結(jié)果中產(chǎn)生NaN。這使得裝載這樣的文件很方便:

TimeTemp129813991497

CityTimeTempDallas1298Tulsa1399Boise14971/21/20246XLSREAD—讀Excel電子表格(XLS)文件

為從文件中獲得有用的表單名,調(diào)用具有兩個輸出的XLSFINO,如:

[status,sheetNames]=xlsfinfo(FILENAME)

當(dāng)從Excel文件中讀取日期域時,日期數(shù)據(jù)必須轉(zhuǎn)換為MATLAB日期。如,若在Excel文件中包含:

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

象這樣把數(shù)據(jù)轉(zhuǎn)換為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的圖像文件的圖像信息域的結(jié)構(gòu),F(xiàn)MT為指定文件格式的串。文件必須在當(dāng)前目錄或在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為一個結(jié)構(gòu)數(shù)組,文件中每個圖像對應(yīng)一個元素。比如,INFO(3)包含文件中第三個圖像的信息。1/21/202410IMFINFO—圖形文件信息INFO=IMFINFO(FILENAME)試圖從文件內(nèi)容推斷文件格式。INFO中的域集取決于文件個體及其格式,而第一個域名總是相同的??赡艿挠?yàn)椋篎ilename文件名字符串FileModDate文件修改日期串FileSize表示文件字節(jié)數(shù)的整數(shù)Format如用FMT表示的文件格式串;對于JPEG與TIFF文件,返回三字符FormatVersion指明文件格式版本的串或數(shù)Width表示圖像像素寬度的整數(shù)Height表示圖像像素高度的整數(shù)BitDepth表示圖像每像素編比特?cái)?shù)的整數(shù)ColorType

表示圖像類型的字符串;對于真彩色(RGB)圖像為'truecolor',對于灰度級圖像為'grayscale',對于索引圖像為'indexed'。1/21/202411

IMREAD—讀圖形文件A=IMREAD(FILENAME,FMT)

將圖像文件FILENAME讀入A.若文件中包含的是灰度級圖像,則A為一個二維數(shù)組。若文件中包含的是真彩色(RGB)圖像,則A為一個三維(M×N×3)數(shù)組FILENAME為圖像文件名串,FMT圖像格式串。文件必須在當(dāng)前目錄或在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,相關(guān)colormap讀入MAP。圖像文件中的Colormap

值自動縮放到[0,1]范圍內(nèi)。[...]=IMREAD(FILENAME)

試圖從文件內(nèi)容推斷文件格式。數(shù)據(jù)類型

在IMREAD支持的絕大多數(shù)圖像文件格式中,用于存儲像素的每個色平面(colorplane)不超過8比特。當(dāng)讀取這樣的一個文件時,輸出(A或X)的類型為

uint8.IMREAD也支持從BMP,TIFF和PNG文件中讀取每像素16比特的數(shù)據(jù)。對于16比特的TIFF和PNG圖像文件,輸出(A或X)的類型為

uint16在,而對于16比特BMP圖像文件,輸出(A或X)的類型為

uint8.1/21/202413

IMREAD—讀圖形文件TIFF-specificsyntaxes

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

從多圖像TIFF文件中讀取一個圖像。

IDX為說明圖像在文件中出現(xiàn)順序的整數(shù)。比如,若IDX為3,IMREAD從文件中讀取第三個圖像。若省略該參數(shù),IMREAD從文件中讀取第一個圖像。1/21/202414IMREAD—讀圖形文件

PNG-特別語法

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

合成輸入圖像中與BG中指定的顏色相反的任何透明像素。若BG為'none',則不執(zhí)行合成。否則,若輸入圖像為索引的,則BG應(yīng)該為[1,P]內(nèi)的整數(shù),其中

P為colormap長度。若輸入圖像為灰度圖像,則BG應(yīng)該為[0,1]內(nèi)的整數(shù)。若輸入圖像為RGB圖像,則BG應(yīng)該為[0,1]內(nèi)的三元素向量。字符串'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為標(biāo)明圖像的參照數(shù)(referencenumber)的整數(shù)。比如,若REF為12,IMREAD從文件中讀取參照數(shù)為12的圖像(注意在一個HDF文件中,參照數(shù)不必與圖像在文件中的順序一致一。你可以用IMFINFO使圖像順序與參照數(shù)協(xié)調(diào))。若省略該參數(shù),IMREAD從文件中讀取第一個圖像。1/21/202417

IMREAD—讀圖形文件ICO和CUR特別語法

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

從多圖像圖標(biāo)或光標(biāo)文件中讀取一個圖像。IDX為說明圖像在文件中出現(xiàn)順序的整數(shù)。比如,若IDX為3,IMREAD從文件中讀取第三個圖像。若省略該參數(shù),IMREAD從文件中讀取第一個圖像。

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

對于可用于確定透明信息的資源,返回與(AND)掩碼(mask)。對于光標(biāo)文件,該掩碼可能包含唯一有用的數(shù)據(jù)。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%清除所有內(nèi)存變量、圖形窗口I=imread('pout.tif');%將圖像文件pout.tif的圖像像素?cái)?shù)據(jù)讀入矩陣Iimshow(I)%顯示圖像I,圖像對比度低figure,imhist(I)%在新圖形窗口中顯示圖像I的直方圖??梢宰⒁獾綀D像

%亮度范圍相當(dāng)狹窄,并未完全覆蓋可能的范圍[0,255]I2=histeq(I);%對圖像I作直方圖均衡補(bǔ)償在整個范圍內(nèi)展寬亮度值并

%輸出到矩陣I2,因而改進(jìn)了圖像I的對比度figure,imshow(I2)%在新圖形窗口中顯示新圖像I2,如圖1(b)figure,imhist(I2)%在新圖形窗口中顯示圖像I2的直方圖,如圖1(d)imwrite(I2,'pout2.png');%將對比度調(diào)節(jié)的結(jié)果圖像寫入PNG格式的文件1/21/202420圖像分割與標(biāo)記示例%程序代碼:test2.mclear,closeall,I=imread('rice.tif');imshow(I)%讀取和顯示8位灰度圖rice.tifbackground=imopen(I,strel('disk',15));%取半徑為15的圓盤結(jié)構(gòu)元素對圖像用開運(yùn)算估計(jì)背景figure,imshow(background)%顯示背景圖figure,surf(double(background(1:8:end,1:8:end))),zlim([0255]);%顯示背景的彩色表面圖,對8×8格點(diǎn)取樣set(gca,'ydir','reverse');I2=imsubtract(I,background);figure,imshow(I2)%從原圖像中減去背景圖像,并顯示結(jié)果圖I3=imadjust(I2,stretchlim(I2),[01]);figure,imshow(I3);%調(diào)節(jié)圖像對比度,并顯示結(jié)果圖level=graythresh(I3);bw=im2bw(I3,level);figure,imshow(bw)%將灰度圖像轉(zhuǎn)換成二值圖像[labeled,numObjects]=bwlabel(bw,4);%成份標(biāo)記,4具體指定4-連通成份.grain=imcrop(labeled)%用鼠標(biāo)選取實(shí)現(xiàn)交互式剪裁標(biāo)記成份的一部分RGB_label=label2rgb(labeled,@spring,'c','shuffle');%把一個標(biāo)記矩陣轉(zhuǎn)換成一個RGB圖像figure,imshow(RGB_label)1/21/202421圖像分割與標(biāo)記示例graindata=regionprops(labeled,'basic')%調(diào)用regionprops,為rice的每一經(jīng)閾值處理的谷粒

%返回一個基本屬性的結(jié)構(gòu)。由BoundingBox的域

%返回四元素矢量:[lefttopwidthheight]。graindata(51).Area,graindata(51).BoundingBox,graindata(51).Centroidallgrains=[graindata.Area]%用點(diǎn)號存取graindata

的所有元素的面積域并將該數(shù)據(jù)存入

%新的矢量allgrains。這個步驟簡化了對面積量的分析,因?yàn)?/p>

%不必使用域名存取面積。max(allgrains)%找最大谷粒的大小。allgrains中的數(shù)據(jù)是一維的,%故函數(shù)mean和std是適用的。biggrain=find(allgrains==ans)%使用find指令返回該最大谷粒的成份標(biāo)記mean(allgrains)%求平均粒徑figure,hist(allgrains,20)%作包含20個方柱的顯示谷粒大小分布的直方圖。直方圖表明,

%在rice圖像中谷粒最通常的大小在300到400個像素的范圍內(nèi)。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打開和關(guān)閉文件打開文件語法:

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

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

fid為返回的文件指針(FileIdentifier),通常是一個非負(fù)的整數(shù),如果返回-1,則表示無法打開文件;message用來顯示打開文件的信息,如果無法打開,則顯示錯誤信息;filename為文件名,是字符串,如果文件不在MATLAB的搜索路徑中,則需要指定文件路徑;permission為指定文件的打開模式,有以下幾種模式:'r':只讀文件'r+':讀寫文件'w':刪除已存在文件內(nèi)容或建立新文件,并只寫文件'w+':刪除已存在文件內(nèi)容或建立新文件,并讀寫文件'a':以只寫方式建立并打開一個新文件或打開一個已存在的文件,只能在文件末尾添加內(nèi)容'a+':以讀寫方式建立并打開一個新文件或打開一個已存在的文件,在文件末尾添加內(nèi)容fopen的permission參數(shù)在打開文件時還可標(biāo)明文件格式,如果打開文本格式文件,在后添加字母“t”,如果打開二進(jìn)制格式文件,則在permission參數(shù)后添加字母“b”,如'wb'、'rb+'等。1/21/202425打開和關(guān)閉文件關(guān)閉文件打開文件進(jìn)行讀寫操作后,應(yīng)立即關(guān)閉文件,刪除文件指針。語法:

status=fclose(fid)%關(guān)閉文件指針?biāo)傅奈募?/p>

status=fclose('all')%關(guān)閉所有打開的文件說明:status為關(guān)閉文件指針?biāo)肝募臓顟B(tài),如果成功則返回0,如果失敗則返回-1;fid為所打開的文件指針。【例】打開和關(guān)閉一個文本文件。文本文件“Ex0805.txt”,在MATLAB環(huán)境中顯示的文件內(nèi)容如下:typeEx0805.txt

a123b4561/21/202426打開和關(guān)閉文件使用fopen和fclose打開和關(guān)閉文件:[fid,message]=fopen('Ex0805.txt','w+') %打開文件讀寫

fid=3message=''iffid==-1disp('無法打開該文件')elsedisp('成功打開該文件')end

成功打開該文件status=fclose(fid)%關(guān)閉文件status=01/21/202427讀寫格式化文件fscanffscanf命令為讀格式化文件數(shù)據(jù)。語法:

[a,count]=fscanf(fid,format,size) %讀取格式化數(shù)據(jù)說明:fid為文件指針,所指為需要讀取的格式化文件;format指定讀取數(shù)據(jù)格式,指定的格式必須和文件中的數(shù)據(jù)格式相同,否則讀取的數(shù)據(jù)可能會出現(xiàn)錯誤,以“%”開頭,有%c、%d、%e、%f、%g、%i、%o、%s、%u、%x等(與C語言相同);count為成功讀取的數(shù)據(jù)元素個數(shù),可省略;a返回讀取的數(shù)據(jù);size為需要讀取的數(shù)據(jù)個數(shù),如果省略,則讀到文件末尾,size的取值可以有:n:讀n個數(shù)據(jù)到一個列向量inf:讀到文件末尾,數(shù)據(jù)放到一個列向量[m,n]:讀出的數(shù)據(jù)個數(shù)為m×n,數(shù)據(jù)放到矩陣中,讀出的數(shù)據(jù)按列的順序填充矩陣,不夠的數(shù)據(jù)用0填補(bǔ)。1/21/202428讀寫格式化文件【例】讀取Ex0805.txt文件的前四個字符。

fid=fopen('Ex0805.txt')

fid=3

a1=fscanf(fid,'%s',4)%以字符串格式讀取四個數(shù)據(jù)a1=a123

fclose(fid)

ans=01/21/202429讀寫格式化文件fprintffprintf命令為寫格式化數(shù)據(jù)。語法:

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

說明:

fid為文件指針,所指為二進(jìn)制文件;a為矩陣數(shù)據(jù),將a寫到fid指向的文件;format為寫入的格式,除了包含fscanf命令的數(shù)據(jù)格式之外,還有%E、%G、%X,并具有對齊格式-(左對齊)、+(右對齊)、0(補(bǔ)齊位數(shù)),還有轉(zhuǎn)義字符;count為成功寫入數(shù)據(jù)的個數(shù)。1/21/202430讀寫格式化文件【例】使用Ex0805.txt文件進(jìn)行讀取和寫入數(shù)據(jù)。a='%Thisisaexample.';fid=fopen('Ex0805.txt','a+') %打開Ex0805.txt文件在末尾添加fid=3fprintf(fid,'%s',a) %寫入a到文件末尾ans=19fclose(fid) %關(guān)閉文件ans=0fid=fopen('Ex0805.txt','r') %打開Ex0803.txt文件只讀fid=3fscanf(fid,'%s') %讀取文件所有內(nèi)容ans=a123b456%Thisisaexample.fclose(fid)ans=0程序分析:在向文件中寫入數(shù)據(jù)后,先關(guān)閉文件,然后再打開文件則從文件開頭讀取數(shù)據(jù),如果寫完數(shù)據(jù)后直接讀取數(shù)據(jù),則實(shí)際讀取數(shù)據(jù)的位置將從寫入的最后一個數(shù)據(jù)之后開始。1/21/202431讀寫格式化文件fgetl和fgets

fgetl和fgets命令都是用來讀取文件的下一行,兩者的差別是fgetl會舍去換行符,而fgets則保留換行符。語法:

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

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

tline=fgets(fid,nchar)%限制讀取文件字符個數(shù)說明:

fid為文件指針;tline為以字符串形式的返回值,如果到文件末尾則返回-1;nchar為最多返回的字符個數(shù)。1/21/202432讀寫格式化文件【例】以行的形式讀取Ex0805.txt文件。

fid=fopen('Ex0805.txt','r');%打開Ex0803.txt文件只讀

fgetl(fid)%讀取第一行數(shù)據(jù)ans=a123

fgets(fid)%讀取第二行數(shù)據(jù)ans=b456

fgets(fid,10)%讀取第三行數(shù)據(jù),限制10個字符ans=%Thisisa

fgets(fid,10)ans=example.1/21/202433讀寫格式化文件TEXTREAD

從文本文件中讀取格式化數(shù)據(jù)。

A=TEXTREAD('FILENAME')A=TEXTREAD('FILENAME','',N)A=TEXTREAD('FILENAME','',param,value,...)A=TEXTREAD('FILENAME','',N,param,value,...)從文件FILENAME

中讀取數(shù)值數(shù)據(jù)到單個變量中。如果文件包含任何文本數(shù)據(jù),則產(chǎn)生錯誤。

[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

中讀取數(shù)值數(shù)據(jù)到多個變量A,B,C,等中.每個返回參數(shù)的類型由FORMAT串給定。返回參數(shù)的個數(shù)必須與FORMAT串中的轉(zhuǎn)換標(biāo)識(conversionspecifiers)個數(shù)一致。要是文件中的域比格式串中少,將產(chǎn)生錯誤。要獲得更多信息,見后面的“格式串”。若指定了N,則重用格式串N次;若N為-1(或未指定),則TEXTREAD讀取整個文件。若提供了param,value對,則用戶可配置選項(xiàng)定制了TEXTREAD的行為.1/21/202434讀寫格式化文件TEXTREAD通過從文件中匹配與轉(zhuǎn)換字符組工作。一個輸入域定義為一個非空白字符的串,一直到下一個空白或分隔符,或?qū)挾群谋M(exhausted)。重復(fù)的分隔字符很重要,而重復(fù)的空白字符被看成一個。格式串若FORMAT串為空,TEXTREAD只讀數(shù)值數(shù)據(jù)。

FORMAT串可含空白字符(被忽略),普通字符(預(yù)期來匹配輸入中下一個非空白字符),或轉(zhuǎn)換說明。支持的轉(zhuǎn)換說明:

%n–讀一個數(shù):float或integer(返回double數(shù)組)%5n讀多達(dá)5位數(shù)字或直到下一分隔符%d-讀符號速整數(shù)值(返回double數(shù)組)%5d讀一個讀多達(dá)5位數(shù)字或直到下一分隔符%u-讀一個整數(shù)值(返回double數(shù)組)%5u讀一個讀多達(dá)5位數(shù)字或直到下一分隔符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讀寫二進(jìn)制數(shù)據(jù)讀數(shù)據(jù)

fread命令讀二進(jìn)制數(shù)據(jù)。語法:

[a,count]=fread(fid,size,precision,skip)說明:

fid為文件指針;size與fscanf命令含義相同;precision為一個字符串,用來指定讀取數(shù)據(jù)的精度,即數(shù)據(jù)類型,有'uchar'、'schar'、'int8'、'int16'、'int32'、'int64'、'unit8'、'unit16'、'unit32'、'unit64'、'single'、'float32'、'double'、'float64'等,可省略;a為矩陣數(shù)據(jù);count為成功讀取的數(shù)據(jù)元素個數(shù),可省略;skip為每讀取一個數(shù)據(jù)后跳過的字節(jié)數(shù),可省略。1/21/202440讀寫二進(jìn)制數(shù)據(jù)寫數(shù)據(jù)fwrite命令為寫二進(jìn)制數(shù)據(jù)。語法:

count=fwrite(fid,a,precision,skip) %寫二進(jìn)制數(shù)據(jù)說明:fid為文件指針;a為矩陣數(shù)據(jù);precision和skip參數(shù)含義與fread命令相同;count為成功寫入數(shù)據(jù)的個數(shù)。【例】寫入數(shù)據(jù)到MAT文件中,并讀取數(shù)據(jù)。1/21/202441讀寫二進(jìn)制數(shù)據(jù)x1=1:10;[fid,message]=fopen('Ex0805.mat','a')%打開文件添加數(shù)據(jù)fid=4message=''count1=fwrite(fid,x1) %寫入數(shù)據(jù)count1=10x2=11:15;count2=fwrite(fid,x2) %添加數(shù)據(jù)count2=5status=fclose(fid);fid=fopen('Ex0805.mat','r');%打開文件只讀a1=fread(fid,[2,5]) %讀取數(shù)據(jù)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指定移動的字節(jié)數(shù),如果offset>0,則向后移動,否則向前移動,等于0則不移動;status為返回值,如果移動成功則返回0,否則返回-1;origin指定移動位置指針的參考起點(diǎn):'bof'或-1:文件的開頭'cof'或0:文件的當(dāng)前位置'eof'或1:文件的末尾。1/21/202445文件定位ftell命令

ftell命令是用來獲取文件位置指針的當(dāng)前位置。語法:

pos=ftell(fid)%獲取當(dāng)前指針位置說明:

pos指字節(jié)數(shù),當(dāng)前位置指針指在此字節(jié)數(shù)之后。frewind命令

frewind命令用來將文件位置指針移到文件的開頭。語法:

frewind(fid)feof命令

feof命令用來測試位置指針是否在文件結(jié)束位置,如果是則返回1,否則返回0。語法:

feof(fid)1/21/202446文件定位【例】創(chuàng)建兩個mat文件,在Ex0808_1.mat文件中寫入1~10的數(shù)據(jù),并進(jìn)行求和,在Ex0808_2.mat文件中寫入1、2、3三個數(shù)據(jù),將第二個數(shù)據(jù)與前面所求的和進(jìn)行相乘運(yùn)算。程序保存在Ex0808.m文件中,程序代碼如下:%Ex0808文件讀取和定位x=1:10;s=0;fid1=fopen('Ex0808_1.mat','w+') %打開文件讀寫數(shù)據(jù)fwrite(fid1,x); %寫入數(shù)據(jù)frewind(fid1); %指針移到文件開頭whilefeof(fid1)==0 %判斷是否到文件末尾

a1=fread(fid1,1) %讀取數(shù)據(jù)

ifisempty(a1)==0 %判斷是否為空值

s=a1+s %求和

endendfclose(fid1);y=[123];fid2=fopen('Ex0808_2.mat','w+') %打開文件讀寫數(shù)據(jù)fwrite(fid2,y) %寫入數(shù)據(jù)fseek(fid2,-2,'eof') %指針移動到第二個數(shù)據(jù)a2=fread(fid2,1) %讀取數(shù)據(jù)s=s*a2fclose(fid2);1/21/202447文件定位運(yùn)行結(jié)果得出:s=110程序說明:使用文件位置控制就可以不用反復(fù)打開和關(guān)閉文件,而直接從文件中讀寫數(shù)據(jù);使用while循環(huán)結(jié)構(gòu),從文件中讀取數(shù)據(jù),直到文件末尾;當(dāng)文件位置指針移動到文件最后時,取出的數(shù)據(jù)為空值,但feof函數(shù)返回0,因此用isempty函數(shù)判斷是否為空值來判斷是否到文件最后,文件指針再向下移則到文件末尾,feof函數(shù)返回1;“fseek(fid2,-2,'eof')”語句是將文件位置指針從末尾向前2個數(shù)據(jù)。1/21/202448Fileinput/outputStringconversion—字符串轉(zhuǎn)換.sprintf-Writeformatteddatatostring.sscanf-Readstringunderformatcontrol.strread-Readformatteddatafromtextstring.1/21/202449字符串轉(zhuǎn)換

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字符串轉(zhuǎn)換

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字符串轉(zhuǎn)換

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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論