版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MATLAB文獻(xiàn)操作
matlab文獻(xiàn)輸入、輸出(I/O)函數(shù)允許把其他格式數(shù)據(jù)文獻(xiàn)直接讀進(jìn)matlab,它是以c語言文獻(xiàn)I/O函數(shù)為基礎(chǔ)。10/10/20231第1頁高級(jí)文獻(xiàn)輸入輸出
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分隔文獻(xiàn)DLMWRITE(FILENAME,M,DLM)將矩陣M寫入文獻(xiàn)FILENAME,用DLM作為分隔符。指定'\t'產(chǎn)生tab-分隔文獻(xiàn)。
DLMWRITE(FILENAME,M,DLM,R,C)從文獻(xiàn)FILENAME中偏移R行,C列開始將矩陣M寫入,用DLM作為分隔符。R和C都基于零(0),因此R=C=0指文獻(xiàn)中第一數(shù)據(jù)。10/10/20234第4頁DLMREAD—讀ASCII分隔文獻(xiàn)RESULT=DLMREAD(FILENAME,DELIMITER)
從分隔符為DELIMITER文獻(xiàn)FILENAME中讀取數(shù)值數(shù)據(jù),成果由RESULT返回.用'\t'表達(dá)tab.RESULT=DLMREAD(FILENAME,DELIMITER,R,C)
從DELIMITER分隔文獻(xiàn)FILENAME中讀取數(shù)據(jù)。R和C指明文獻(xiàn)中數(shù)據(jù)左上角R行和C列。R和C都基于零(0),因此R=0和C=0指文獻(xiàn)中第一數(shù)據(jù)。RESULT=DLMREAD(FILENAME,DELIMITER,RANGE)
在由RANGE=[R1C1R2C2]指定范圍內(nèi)讀,其中(R1,C1)為要讀數(shù)據(jù)左上角,(R2,C2)為右下角。RANGE也能夠用表單符號(hào)(spreadsheetnotation)RANGE='A1..B7'指定。
DLMREAD用零填充空分隔域。用非空白分隔符作為行結(jié)束數(shù)據(jù)文獻(xiàn),將產(chǎn)生帶零填充額外最后列成果。10/10/20235第5頁XLSREAD—讀Excel電子表格(XLS)文獻(xiàn)A=XLSREAD('FILENAME')返回MicrosoftExcel文獻(xiàn)FILENAME中第一表單中數(shù)值數(shù)據(jù)[A,B]=XLSREAD('FILENAME')數(shù)值數(shù)據(jù)存入A中,文本數(shù)據(jù)存入B.[...]=XLSREAD('FILENAME','SHEETNAME')與上相同,但用表單名SHEETNAME.若表單SHEETNAME不存在,則為一錯(cuò)誤??諉卧?Emptycells),或具有文本單元格在數(shù)值成果中產(chǎn)生NaN。文本打頭行(Leadingrowsandcolumnsoftext)不在數(shù)值成果中產(chǎn)生NaN。這使得裝載這樣文獻(xiàn)很方便:
TimeTemp129813991497
CityTimeTempDallas1298Tulsa1399Boise149710/10/20236第6頁XLSREAD—讀Excel電子表格(XLS)文獻(xiàn)為從文獻(xiàn)中取得有用表單名,調(diào)用具有兩個(gè)輸出XLSFINO,如:
[status,sheetNames]=xlsfinfo(FILENAME)當(dāng)從Excel文獻(xiàn)中讀取日期域時(shí),日期數(shù)據(jù)必須轉(zhuǎn)換為MATLAB日期。如,若在Excel文獻(xiàn)中包括:
4/12/994/13/994/14/99
象這樣把數(shù)據(jù)轉(zhuǎn)換為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—圖形文獻(xiàn)信息INFO=IMFINFO(FILENAME,FMT)
返回一種包括文獻(xiàn)名為FILENAME圖像文獻(xiàn)圖像信息域構(gòu)造,F(xiàn)MT為指定文獻(xiàn)格式串。文獻(xiàn)必須在目前目錄或在MATLAB途徑中一種目錄中。若IMFINFO找不到名為FILENAME文獻(xiàn),它將尋找名為FILENAME.FMT文獻(xiàn).也許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文獻(xiàn),INFO為一種構(gòu)造數(shù)組,文獻(xiàn)中每個(gè)圖像對(duì)應(yīng)一種元素。例如,INFO(3)包括文獻(xiàn)中第三個(gè)圖像信息。10/10/202310第10頁IMFINFO—圖形文獻(xiàn)信息INFO=IMFINFO(FILENAME)試圖從文獻(xiàn)內(nèi)容推斷文獻(xiàn)格式。INFO中域集取決于文獻(xiàn)個(gè)體及其格式,而第一種域名總是相同。也許域?yàn)椋篎ilename文獻(xiàn)名字符串FileModDate文獻(xiàn)修改日期串FileSize表達(dá)文獻(xiàn)字節(jié)數(shù)整數(shù)Format如用FMT表達(dá)文獻(xiàn)格式串;對(duì)于JPEG與TIFF文獻(xiàn),返回三字符FormatVersion指明文獻(xiàn)格式版本串或數(shù)Width表達(dá)圖像像素寬度整數(shù)Height表達(dá)圖像像素高度整數(shù)BitDepth表達(dá)圖像每像素編比特?cái)?shù)整數(shù)ColorType表達(dá)圖像類型字符串;對(duì)于真彩色(RGB)圖像為'truecolor',對(duì)于灰度級(jí)圖像為'grayscale',對(duì)于索引圖像為'indexed'。10/10/202311第11頁IMREAD—讀圖形文獻(xiàn)A=IMREAD(FILENAME,FMT)
將圖像文獻(xiàn)FILENAME讀入A.若文獻(xiàn)中包括是灰度級(jí)圖像,則A為一種二維數(shù)組。若文獻(xiàn)中包括是真彩色(RGB)圖像,則A為一種三維(M×N×3)數(shù)組FILENAME為圖像文獻(xiàn)名串,FMT圖像格式串。文獻(xiàn)必須在目前目錄或在MATLAB途徑中一種目錄中。若IMREAD找不到名為FILENAME文獻(xiàn),它將尋找名為FILENAME.FMT文獻(xiàn).也許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—讀圖形文獻(xiàn)[X,MAP]=IMREAD(FILENAME,FMT)將索引圖像文獻(xiàn)FILENAME讀入X,有關(guān)colormap讀入MAP。圖像文獻(xiàn)中Colormap值自動(dòng)縮放到[0,1]范圍內(nèi)。[...]=IMREAD(FILENAME)試圖從文獻(xiàn)內(nèi)容推斷文獻(xiàn)格式。數(shù)據(jù)類型
在IMREAD支持絕大多數(shù)圖像文獻(xiàn)格式中,用于存放像素每個(gè)色平面(colorplane)不超出8比特。當(dāng)讀取這樣一種文獻(xiàn)時(shí),輸出(A或X)類型為uint8.IMREAD也支持從BMP,TIFF和PNG文獻(xiàn)中讀取每像素16比特?cái)?shù)據(jù)。對(duì)于16比特TIFF和PNG圖像文獻(xiàn),輸出(A或X)類型為uint16在,而對(duì)于16比特BMP圖像文獻(xiàn),輸出(A或X)類型為uint8.10/10/202313第13頁IMREAD—讀圖形文獻(xiàn)TIFF-specificsyntaxes
[...]=IMREAD(...,IDX)從多圖像TIFF文獻(xiàn)中讀取一種圖像。IDX為說明圖像在文獻(xiàn)中出現(xiàn)次序整數(shù)。例如,若IDX為3,IMREAD從文獻(xiàn)中讀取第三個(gè)圖像。若省略該參數(shù),IMREAD從文獻(xiàn)中讀取第一種圖像。10/10/202314第14頁IMREAD—讀圖形文獻(xiàn)PNG-尤其語法
[...]=IMREAD(...,'BackgroundColor',BG)合成輸入圖像中與BG中指定顏色相反任何透明像素。若BG為'none',則不執(zhí)行合成。不然,若輸入圖像為索引,則BG應(yīng)當(dāng)為[1,P]內(nèi)整數(shù),其中P為colormap長(zhǎng)度。若輸入圖像為灰度圖像,則BG應(yīng)當(dāng)為[0,1]內(nèi)整數(shù)。若輸入圖像為RGB圖像,則BG應(yīng)當(dāng)為[0,1]內(nèi)三元素向量。字符串'BackgroundColor'可縮寫(abbreviated)。10/10/202315第15頁IMREAD—讀圖形文獻(xiàn)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—讀圖形文獻(xiàn)HDF-尤其語法
[...]=IMREAD(...,REF)從多圖像HDF文獻(xiàn)中讀取一種圖像。REF為標(biāo)明圖像參照數(shù)(referencenumber)整數(shù)。例如,若REF為12,IMREAD從文獻(xiàn)中讀取參照數(shù)為12圖像(注意在一種HDF文獻(xiàn)中,參照數(shù)無須與圖像在文獻(xiàn)中次序一致一。你能夠用IMFINFO使圖像次序與參照數(shù)協(xié)調(diào))。若省略該參數(shù),IMREAD從文獻(xiàn)中讀取第一種圖像。10/10/202317第17頁IMREAD—讀圖形文獻(xiàn)ICO和CUR尤其語法
[...]=IMREAD(...,IDX)從多圖像圖標(biāo)或光標(biāo)文獻(xiàn)中讀取一種圖像。IDX為說明圖像在文獻(xiàn)中出現(xiàn)次序整數(shù)。例如,若IDX為3,IMREAD從文獻(xiàn)中讀取第三個(gè)圖像。若省略該參數(shù),IMREAD從文獻(xiàn)中讀取第一種圖像。
[A,MAP,ALPHA]=IMREAD(...)對(duì)于可用于確定透明信息資源,返回與(AND)掩碼(mask)。對(duì)于光標(biāo)文獻(xiàn),該掩碼也許包括唯一有用數(shù)據(jù)。10/10/202318第18頁IMREAD—讀圖形文獻(xiàn)支持文獻(xiàn)類型
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%清除所有內(nèi)存變量、圖形窗口I=imread('pout.tif');%將圖像文獻(xiàn)pout.tif圖像像素?cái)?shù)據(jù)讀入矩陣Iimshow(I)%顯示圖像I,圖像對(duì)比度低figure,imhist(I)%在新圖形窗口中顯示圖像I直方圖。能夠注意到圖像%亮度范圍相稱狹窄,并未完全覆蓋也許范圍[0,255]I2=histeq(I);%對(duì)圖像I作直方圖均衡賠償在整個(gè)范圍內(nèi)展寬亮度值并%輸出到矩陣I2,因而改善了圖像I對(duì)比度figure,imshow(I2)%在新圖形窗口中顯示新圖像I2,如圖1(b)figure,imhist(I2)%在新圖形窗口中顯示圖像I2直方圖,如圖1(d)imwrite(I2,'pout2.png');%將對(duì)比度調(diào)整成果圖像寫入PNG格式文獻(xiàn)10/10/202320第20頁圖像分割與標(biāo)識(shí)示例%程序代碼:test2.mclear,closeall,I=imread('rice.tif');imshow(I)%讀取和顯示8位灰度圖rice.tifbackground=imopen(I,strel('disk',15));%取半徑為15圓盤構(gòu)造元素對(duì)圖像用開運(yùn)算估計(jì)背景figure,imshow(background)%顯示背景圖figure,surf(double(background(1:8:end,1:8:end))),zlim([0255]);%顯示背景彩色表面圖,對(duì)8×8格點(diǎn)取樣set(gca,'ydir','reverse');I2=imsubtract(I,background);figure,imshow(I2)%從原圖像中減去背景圖像,并顯示成果圖I3=imadjust(I2,stretchlim(I2),[01]);figure,imshow(I3);%調(diào)整圖像對(duì)比度,并顯示成果圖level=graythresh(I3);bw=im2bw(I3,level);figure,imshow(bw)%將灰度圖像轉(zhuǎn)換成二值圖像[labeled,numObjects]=bwlabel(bw,4);%成份標(biāo)識(shí),4詳細(xì)指定4-連通成份.grain=imcrop(labeled)%用鼠標(biāo)選用實(shí)現(xiàn)交互式剪裁標(biāo)識(shí)成份一部分RGB_label=label2rgb(labeled,@spring,'c','shuffle');%把一種標(biāo)識(shí)矩陣轉(zhuǎn)換成一種RGB圖像figure,imshow(RGB_label)10/10/202321第21頁圖像分割與標(biāo)識(shí)示例graindata=regionprops(labeled,'basic')%調(diào)用regionprops,為rice每一經(jīng)閾值處理谷粒%返回一種基本屬性構(gòu)造。由BoundingBox域%返回四元素矢量:[lefttopwidthheight]。graindata(51).Area,graindata(51).BoundingBox,graindata(51).Centroidallgrains=[graindata.Area]%用點(diǎn)號(hào)存取graindata所有元素面積域并將該數(shù)據(jù)存入%新矢量allgrains。這個(gè)步驟簡(jiǎn)化了對(duì)面積量分析,由于%無須使用域名存取面積。max(allgrains)%找最大谷粒大小。allgrains中數(shù)據(jù)是一維,%故函數(shù)mean和std是適用。biggrain=find(allgrains==ans)%使用find指令返回該最大谷粒成份標(biāo)識(shí)mean(allgrains)%求平均粒徑figure,hist(allgrains,20)%作包括20個(gè)方柱顯示谷粒大小分布直方圖。直方圖表白,%在rice圖像中谷粒最一般大小在300到400個(gè)像素范圍內(nèi)。10/10/202322第22頁低級(jí)文獻(xiàn)輸入輸出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頁打開和關(guān)閉文獻(xiàn)打開文獻(xiàn)語法:
fid=fopen(filename,permission)%以指定格式打開文獻(xiàn)[fid,message]=fopen(filename,permission)%返回打開文獻(xiàn)信息說明:fid為返回文獻(xiàn)指針(FileIdentifier),一般是一種非負(fù)整數(shù),假如返回-1,則表達(dá)無法打開文獻(xiàn);message用來顯示打開文獻(xiàn)信息,假如無法打開,則顯示錯(cuò)誤信息;filename為文獻(xiàn)名,是字符串,假如文獻(xiàn)不在MATLAB搜索途徑中,則需要指定文獻(xiàn)途徑;permission為指定文獻(xiàn)打開模式,有下列幾個(gè)模式:'r':只讀文獻(xiàn)'r+':讀寫文獻(xiàn)'w':刪除已存在文獻(xiàn)內(nèi)容或建立新文獻(xiàn),并只寫文獻(xiàn)'w+':刪除已存在文獻(xiàn)內(nèi)容或建立新文獻(xiàn),并讀寫文獻(xiàn)'a':以只寫方式建立并打開一種新文獻(xiàn)或打開一種已存在文獻(xiàn),只能在文獻(xiàn)末尾添加內(nèi)容'a+':以讀寫方式建立并打開一種新文獻(xiàn)或打開一種已存在文獻(xiàn),在文獻(xiàn)末尾添加內(nèi)容fopenpermission參數(shù)在打開文獻(xiàn)時(shí)還可標(biāo)明文獻(xiàn)格式,假如打開文本格式文獻(xiàn),在后添加字母“t”,假如打開二進(jìn)制格式文獻(xiàn),則在permission參數(shù)后添加字母“b”,如'wb'、'rb+'等。10/10/202325第25頁打開和關(guān)閉文獻(xiàn)關(guān)閉文獻(xiàn)打開文獻(xiàn)進(jìn)行讀寫操作后,應(yīng)立即關(guān)閉文獻(xiàn),刪除文獻(xiàn)指針。語法:status=fclose(fid)%關(guān)閉文獻(xiàn)指針?biāo)肝墨I(xiàn)status=fclose('all')%關(guān)閉所有打開文獻(xiàn)說明:status為關(guān)閉文獻(xiàn)指針?biāo)肝墨I(xiàn)狀態(tài),假如成功則返回0,假如失敗則返回-1;fid為所打開文獻(xiàn)指針?!纠看蜷_和關(guān)閉一種文本文獻(xiàn)。文本文獻(xiàn)“Ex0805.txt”,在MATLAB環(huán)境中顯示文獻(xiàn)內(nèi)容如下:typeEx0805.txt
a123b45610/10/202326第26頁打開和關(guān)閉文獻(xiàn)使用fopen和fclose打開和關(guān)閉文獻(xiàn):[fid,message]=fopen('Ex0805.txt','w+') %打開文獻(xiàn)讀寫
fid=3message=''iffid==-1disp('無法打開該文獻(xiàn)')elsedisp('成功打開該文獻(xiàn)')end
成功打開該文獻(xiàn)status=fclose(fid)%關(guān)閉文獻(xiàn)status=010/10/202327第27頁讀寫格式化文獻(xiàn)fscanffscanf命令為讀格式化文獻(xiàn)數(shù)據(jù)。語法: [a,count]=fscanf(fid,format,size) %讀取格式化數(shù)據(jù)說明:fid為文獻(xiàn)指針,所指為需要讀取格式化文獻(xiàn);format指定讀取數(shù)據(jù)格式,指定格式必須和文獻(xiàn)中數(shù)據(jù)格式相同,不然讀取數(shù)據(jù)也許會(huì)出現(xiàn)錯(cuò)誤,以“%”開頭,有%c、%d、%e、%f、%g、%i、%o、%s、%u、%x等(與C語言相同);count為成功讀取數(shù)據(jù)元素個(gè)數(shù),可省略;a返回讀取數(shù)據(jù);size為需要讀取數(shù)據(jù)個(gè)數(shù),假如省略,則讀到文獻(xiàn)末尾,size取值能夠有:n:讀n個(gè)數(shù)據(jù)到一種列向量inf:讀到文獻(xiàn)末尾,數(shù)據(jù)放到一種列向量[m,n]:讀出數(shù)據(jù)個(gè)數(shù)為m×n,數(shù)據(jù)放到矩陣中,讀出數(shù)據(jù)按列次序填充矩陣,不夠數(shù)據(jù)用0彌補(bǔ)。10/10/202328第28頁讀寫格式化文獻(xiàn)【例】讀取Ex0805.txt文獻(xiàn)前四個(gè)字符。
fid=fopen('Ex0805.txt')
fid=3
a1=fscanf(fid,'%s',4)%以字符串格式讀取四個(gè)數(shù)據(jù)a1=a123
fclose(fid)
ans=010/10/202329第29頁讀寫格式化文獻(xiàn)fprintffprintf命令為寫格式化數(shù)據(jù)。語法: count=fprintf(fid,format,a,…)
說明:fid為文獻(xiàn)指針,所指為二進(jìn)制文獻(xiàn);a為矩陣數(shù)據(jù),將a寫到fid指向文獻(xiàn);format為寫入格式,除了包括fscanf命令數(shù)據(jù)格式之外,尚有%E、%G、%X,并具有對(duì)齊格式-(左對(duì)齊)、+(右對(duì)齊)、0(補(bǔ)齊位數(shù)),尚有轉(zhuǎn)義字符;count為成功寫入數(shù)據(jù)個(gè)數(shù)。10/10/202330第30頁讀寫格式化文獻(xiàn)【例】使用Ex0805.txt文獻(xiàn)進(jìn)行讀取和寫入數(shù)據(jù)。a='%Thisisaexample.';fid=fopen('Ex0805.txt','a+') %打開Ex0805.txt文獻(xiàn)在末尾添加fid=3fprintf(fid,'%s',a) %寫入a到文獻(xiàn)末尾ans=19fclose(fid) %關(guān)閉文獻(xiàn)ans=0fid=fopen('Ex0805.txt','r') %打開Ex0803.txt文獻(xiàn)只讀fid=3fscanf(fid,'%s') %讀取文獻(xiàn)所有內(nèi)容ans=a123b456%Thisisaexample.fclose(fid)ans=0程序分析:在向文獻(xiàn)中寫入數(shù)據(jù)后,先關(guān)閉文獻(xiàn),然后再打開文獻(xiàn)則從文獻(xiàn)開頭讀取數(shù)據(jù),假如寫完數(shù)據(jù)后直接讀取數(shù)據(jù),則實(shí)際讀取數(shù)據(jù)位置將從寫入最后一種數(shù)據(jù)之后開始。10/10/202331第31頁讀寫格式化文獻(xiàn)fgetl和fgets
fgetl和fgets命令都是用來讀取文獻(xiàn)下一行,二者差異是fgetl會(huì)舍去換行符,而fgets則保存換行符。語法:
tline=fgetl(fid)%讀取文獻(xiàn)下一行,不包括換行符 tline=fgets(fid)%讀取文獻(xiàn)下一行,包括換行符 tline=fgets(fid,nchar)%限制讀取文獻(xiàn)字符個(gè)數(shù)說明:
fid為文獻(xiàn)指針;tline為以字符串形式返回值,假如到文獻(xiàn)末尾則返回-1;nchar為最多返回字符個(gè)數(shù)。10/10/202332第32頁讀寫格式化文獻(xiàn)【例】以行形式讀取Ex0805.txt文獻(xiàn)。
fid=fopen('Ex0805.txt','r');%打開Ex0803.txt文獻(xiàn)只讀fgetl(fid)%讀取第一行數(shù)據(jù)ans=a123
fgets(fid)%讀取第二行數(shù)據(jù)ans=b456
fgets(fid,10)%讀取第三行數(shù)據(jù),限制10個(gè)字符ans=%Thisisa
fgets(fid,10)ans=example.10/10/202333第33頁讀寫格式化文獻(xiàn)TEXTREAD
從文本文獻(xiàn)中讀取格式化數(shù)據(jù)。A=TEXTREAD('FILENAME')A=TEXTREAD('FILENAME','',N)A=TEXTREAD('FILENAME','',param,value,...)A=TEXTREAD('FILENAME','',N,param,value,...)從文獻(xiàn)FILENAME中讀取數(shù)值數(shù)據(jù)到單個(gè)變量中。假如文獻(xiàn)包括任何文本數(shù)據(jù),則產(chǎn)生錯(cuò)誤。[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,...)從文獻(xiàn)FILENAME中讀取數(shù)值數(shù)據(jù)到多種變量A,B,C,等中.每個(gè)返回參數(shù)類型由FORMAT串給定。返回參數(shù)個(gè)數(shù)必須與FORMAT串中轉(zhuǎn)換標(biāo)識(shí)(conversionspecifiers)個(gè)數(shù)一致。要是文獻(xiàn)中域比格式串中少,將產(chǎn)生錯(cuò)誤。要取得更多信息,見背面“格式串”。若指定了N,則重用格式串N次;若N為-1(或未指定),則TEXTREAD讀取整個(gè)文獻(xiàn)。若提供了param,value對(duì),則顧客可配備選項(xiàng)定制了TEXTREAD行為.10/10/202334第34頁讀寫格式化文獻(xiàn)TEXTREAD通過從文獻(xiàn)中匹配與轉(zhuǎn)換字符組工作。一種輸入域定義為一種非空白字符串,始終到下一種空白或分隔符,或?qū)挾群谋M(exhausted)。反復(fù)分隔字符很主要,而反復(fù)空白字符被當(dāng)作一種。格式串若FORMAT串為空,TEXTREAD只讀數(shù)值數(shù)據(jù)。FORMAT串可含空白字符(被忽視),一般字符(預(yù)期來匹配輸入中下一種非空白字符),或轉(zhuǎn)換說明。支持轉(zhuǎn)換說明:
%n–讀一種數(shù):float或integer(返回double數(shù)組)%5n讀多達(dá)5位數(shù)字或直到下一分隔符%d-讀符號(hào)速整數(shù)值(返回double數(shù)組)%5d讀一種讀多達(dá)5位數(shù)字或直到下一分隔符%u-讀一種整數(shù)值(返回double數(shù)組)%5u讀一種讀多達(dá)5位數(shù)字或直到下一分隔符10/10/202335第35頁讀寫格式化文獻(xiàn)%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頁讀寫格式化文獻(xiàn)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頁讀寫格式化文獻(xiàn)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頁讀寫格式化文獻(xiàn)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頁讀寫二進(jìn)制數(shù)據(jù)讀數(shù)據(jù)fread命令讀二進(jìn)制數(shù)據(jù)。語法: [a,count]=fread(fid,size,precision,skip)說明:
fid為文獻(xiàn)指針;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ù)元素個(gè)數(shù),可省略;skip為每讀取一種數(shù)據(jù)后跳過字節(jié)數(shù),可省略。10/10/202340第40頁讀寫二進(jìn)制數(shù)據(jù)寫數(shù)據(jù)fwrite命令為寫二進(jìn)制數(shù)據(jù)。語法: count=fwrite(fid,a,precision,skip) %寫二進(jìn)制數(shù)據(jù)說明:fid為文獻(xiàn)指針;a為矩陣數(shù)據(jù);precision和skip參數(shù)含義與fread命令相同;count為成功寫入數(shù)據(jù)個(gè)數(shù)?!纠繉懭霐?shù)據(jù)到MAT文獻(xiàn)中,并讀取數(shù)據(jù)。10/10/202341第41頁讀寫二進(jìn)制數(shù)據(jù)x1=1:10;[fid,message]=fopen('Ex0805.mat','a')%打開文獻(xiàn)添加數(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');%打開文獻(xiàn)只讀a1=fread(fid,[2,5]) %讀取數(shù)據(jù)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——文獻(xiàn)名處理fileparts-Filenameparts.filesep-Directoryseparatorforthisplatform.fullfile-Buildfullfilenamefromparts.matlabroot-RootdirectoryofMATLABinstallation.mexext-MEXfilenameextensionforthisplatform.partialpath-Partialpathnames.pathsep-Pathseparatorforthisplatform.prefdir-Preferencedirectoryname.tempdir-Gettemporarydirectory.tempname-Gettemporaryfile.10/10/202344第44頁文獻(xiàn)定位fseek命令fseek命令用來移動(dòng)文獻(xiàn)位置指針。語法: status=fseek(fid,offset,origin)說明:fid為文獻(xiàn)指針;offset指定移動(dòng)字節(jié)數(shù),假如offset>0,則向后移動(dòng),不然向前移動(dòng),等于0則不移動(dòng);status為返回值,假如移動(dòng)成功則返回0,不然返回-1;origin指定移動(dòng)位置指針參照起點(diǎn):'bof'或-1:文獻(xiàn)開頭'cof'或0:文獻(xiàn)目前位置'eof'或1:文獻(xiàn)末尾。10/10/202345第45頁文獻(xiàn)定位ftell命令 ftell命令是用來獲取文獻(xiàn)位置指針目前位置。語法: pos=ftell(fid)%獲取目前指針位置說明:
pos指字節(jié)數(shù),目前位置指針指在此字節(jié)數(shù)之后。frewind命令
frewind命令用來將文獻(xiàn)位置指針移到文獻(xiàn)開頭。語法: frewind(fid)feof命令
feof命令用來測(cè)試位置指針是否在文獻(xiàn)結(jié)束位置,假如是則返回1,不然返回0。語法: feof(fid)10/10/202346第46頁文獻(xiàn)定位【例】創(chuàng)建兩個(gè)mat文獻(xiàn),在Ex0808_1.mat文獻(xiàn)中寫入1~10數(shù)據(jù),并進(jìn)行求和,在Ex0808_2.mat文獻(xiàn)中寫入1、2、3三個(gè)數(shù)據(jù),將第二個(gè)數(shù)據(jù)與前面所求和進(jìn)行相乘運(yùn)算。程序保存在Ex0808.m文獻(xiàn)中,程序代碼如下:%Ex0808文獻(xiàn)讀取和定位x=1:10;s=0;fid1=fopen('Ex0808_1.mat','w+') %打開文獻(xiàn)讀寫數(shù)據(jù)fwrite(fid1,x); %寫入數(shù)據(jù)frewind(fid1); %指針移到文獻(xiàn)開頭whilefeof(fid1)==0 %判斷是否到文獻(xiàn)末尾 a1=fread(fid1,1) %讀取數(shù)據(jù) ifisempty(a1)==0 %判斷是否為空值 s=a1+s %求和 endendfclose(fid1);y=[123];fid2=fopen('Ex0808_2.mat','w+') %打開文獻(xiàn)讀寫數(shù)據(jù)fwrite(fid2,y) %寫入數(shù)據(jù)fseek(fid2,-2,'eof') %指針移動(dòng)到第二個(gè)數(shù)據(jù)a2=fread(fid2,1) %讀取數(shù)據(jù)s=s*a2fclose(fid2);10/10/202347第47頁文獻(xiàn)定位運(yùn)行成果得出:s=110程序說明:使用文獻(xiàn)位置控制就能夠不用反復(fù)打開和關(guān)閉文獻(xiàn),而直接從文獻(xiàn)中讀寫數(shù)據(jù);使用while循環(huán)構(gòu)造,從文獻(xiàn)中讀取數(shù)據(jù),直到文獻(xiàn)末尾;當(dāng)文獻(xiàn)位置指針移動(dòng)到文獻(xiàn)最后時(shí),取出數(shù)據(jù)為空值,但feof函數(shù)返回0,因此用isempty函數(shù)判斷是否為空值來判斷是否到文獻(xiàn)最后,文獻(xiàn)指針再向下移則到文獻(xiàn)末尾,feof函數(shù)返回1;“fseek(fid2,-2,'eof')”語句是將文獻(xiàn)位置指針從末尾向前2個(gè)數(shù)據(jù)。10/10/202348第48頁Fileinput/outputStringconversion—字符串轉(zhuǎn)換.sprintf-Writeformatteddatatostring.sscanf-Readstringunderformatcontrol.strread-Readformatteddatafromtextstring.10/10/202349第49頁字符串轉(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.10/10/202350第50頁字符串轉(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.10/10/202351第51頁字符串轉(zhuǎn)換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頁字符串轉(zhuǎn)換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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年05月中國(guó)郵政儲(chǔ)蓄銀行總行內(nèi)控合規(guī)部(反洗錢中心)社會(huì)招考筆試歷年參考題庫附帶答案詳解
- 二零二五年度養(yǎng)老社區(qū)入住與子女贍養(yǎng)協(xié)議3篇
- 2024年中國(guó)浴室套件市場(chǎng)調(diào)查研究報(bào)告
- 2025年度圖書館多媒體資源制作外包服務(wù)協(xié)議3篇
- 2024年團(tuán)頭魴苗項(xiàng)目可行性研究報(bào)告
- 《慣性式弛張篩的動(dòng)力學(xué)分析》
- 2024年中國(guó)手動(dòng)操作控制器市場(chǎng)調(diào)查研究報(bào)告
- 2025年度信用反擔(dān)保合同正規(guī)范本助力企業(yè)融資創(chuàng)新3篇
- 2024年中國(guó)姻緣餅市場(chǎng)調(diào)查研究報(bào)告
- 2024年05月湖北九江銀行總行部門社會(huì)招考(524)筆試歷年參考題庫附帶答案詳解
- 2025年1月普通高等學(xué)校招生全國(guó)統(tǒng)一考試適應(yīng)性測(cè)試(八省聯(lián)考)英語試題
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之21:“7支持-7.5成文信息”(雷澤佳編制-2025B0)
- 2024年度大數(shù)據(jù)支撐下的B2B電子商務(wù)購銷服務(wù)合同3篇
- 廣東省廣州市2025屆高三上學(xué)期12月調(diào)研測(cè)試語文試卷(含答案)
- 2023-2024年電商直播行業(yè)現(xiàn)狀及發(fā)展趨勢(shì)研究報(bào)告
- 【9歷期末】安徽省利辛縣部分學(xué)校2023~2024學(xué)年九年級(jí)上學(xué)期期末考試歷史試卷
- GB/T 44949-2024智能熱沖壓成形生產(chǎn)線
- 阜陽市重點(diǎn)中學(xué)2025屆高考數(shù)學(xué)全真模擬密押卷含解析
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)(2024版)宣傳海報(bào)
- 2024-2025學(xué)年統(tǒng)編版七年級(jí)語文上學(xué)期期末真題復(fù)習(xí) 專題01 古詩文名篇名句默寫
- 2024-2030年中國(guó)企業(yè)大學(xué)建設(shè)行業(yè)轉(zhuǎn)型升級(jí)模式及投資規(guī)劃分析報(bào)告
評(píng)論
0/150
提交評(píng)論