




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西專版市級名校2024-2025學年初三第二次模擬測試化學試題含解析
- 烏蘭察布職業學院《古代文學史料學》2023-2024學年第二學期期末試卷
- 云南省隴川縣民族中學2024-2025學年高三二診模擬生物試題試卷含解析
- 吉林省輝煌聯盟九校2025年高三十二月月考生物試題含解析
- 湛江市高一上學期期末調研考試生物試題
- 環保培訓材料
- 2025年廣州市存量房買賣合同范本全文
- 2025年家居建材購銷合同范本
- 2025汽車銷售代理合同范本
- 2025年與前東家終止合同證明模板
- 黑龍江省哈爾濱市香坊區2023-2024學年八年級上學期期末數學試題
- GB/Z 43281-2023即時檢驗(POCT)設備監督員和操作員指南
- 主動披露報告表
- 煤礦一通三防知識培訓課件
- 2022年版小學《義務教育音樂課程標準》考試復習題庫
- 筑業海南省建筑工程資料表格填寫范例與指南
- 國家開放大學《廣告學概論》形考任務1-4參考答案
- 畢業論文建筑消防系統論文
- 自制移動吊車(炮車)方案
- 《咕咚來了》PPT圖文帶mpa
- (三四級)農業經理人復習阿備考題庫及答案(含理論和實操)
評論
0/150
提交評論