MATLAB程序設(shè)計與工程應(yīng)用 課件 向軍 第6-8章 MATLAB中的高級數(shù)據(jù)類型- 數(shù)據(jù)的可視化_第1頁
MATLAB程序設(shè)計與工程應(yīng)用 課件 向軍 第6-8章 MATLAB中的高級數(shù)據(jù)類型- 數(shù)據(jù)的可視化_第2頁
MATLAB程序設(shè)計與工程應(yīng)用 課件 向軍 第6-8章 MATLAB中的高級數(shù)據(jù)類型- 數(shù)據(jù)的可視化_第3頁
MATLAB程序設(shè)計與工程應(yīng)用 課件 向軍 第6-8章 MATLAB中的高級數(shù)據(jù)類型- 數(shù)據(jù)的可視化_第4頁
MATLAB程序設(shè)計與工程應(yīng)用 課件 向軍 第6-8章 MATLAB中的高級數(shù)據(jù)類型- 數(shù)據(jù)的可視化_第5頁
已閱讀5頁,還剩219頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

MATLABProgrammingandEngineeringApplicationMATLAB程序設(shè)計與工程應(yīng)用本書知識結(jié)構(gòu)第6章MATLAB中的高級數(shù)據(jù)類型6.1元胞數(shù)組了解元胞數(shù)組的概念、作用及其與普通數(shù)組的區(qū)別,掌握元胞數(shù)組的創(chuàng)建及訪問方法,了解元胞數(shù)組在函數(shù)定義中的應(yīng)用。6.2結(jié)構(gòu)體數(shù)組了解結(jié)構(gòu)體和結(jié)構(gòu)體數(shù)組的概念和基本組成,掌握結(jié)構(gòu)體數(shù)組的創(chuàng)建和訪問方法,了解嵌套結(jié)構(gòu)體的概念及應(yīng)用,掌握結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)的使用方法。6.3表格掌握表格的基本結(jié)構(gòu)組成,掌握表格的創(chuàng)建、查看和數(shù)據(jù)訪問的常用方法,掌握表格數(shù)據(jù)的常見處理方法。6.1元胞數(shù)組6.1.1元胞數(shù)組的創(chuàng)建當(dāng)要將數(shù)據(jù)放入元胞數(shù)組中時,只需要將這些數(shù)據(jù)用逗號分隔,并依次放在一對大括號中。這里通過一個例子體會元胞數(shù)組的概念及其與普通數(shù)組的區(qū)別。用如下命令分別創(chuàng)建一個最簡單的元胞數(shù)組cellArr和一個普通的數(shù)組arr:>>cellArr={1,2,3}cellArr=1×3cell數(shù)組{[1]}{[2]}{[3]}>>arr=[1,2,3]arr=1236.1元胞數(shù)組由此可見,創(chuàng)建普通數(shù)組時,是將數(shù)組中的各元素依次放在一對中括號中,而創(chuàng)建元胞數(shù)組時,是將各元素依次放在一對大括號中,放在大括號中的每個元素稱為元胞(Cell)。在命令行窗口顯示的執(zhí)行結(jié)果中,元胞數(shù)組中的每個元胞分別用一對大括號包圍。對普通的數(shù)組,直接依次列出其中的各元素。利用whos命令查看所創(chuàng)建的cellArr和arr變量的屬性,結(jié)果如下:>>whosNameSizeBytes

ClassAttributesarr

1x324

doublecellArr

1x3336

cell其中cellArr的類型屬性(Class)為cell,說明這是一個1×3元胞數(shù)組。6.1元胞數(shù)組元胞數(shù)組的創(chuàng)建

元胞數(shù)組更一般的形式是,每個元胞都可能是各不相同的數(shù)據(jù)類型。例如,如下命令創(chuàng)建了一個元胞數(shù)組myCell:>>myCell={1,2,3;'text',[11;22;33],{112233}}myCell=2×3cell數(shù)組{[1]}{[2]}{[3]}{'text'}{3×1double}{1×3cell}需要注意的是,與普通數(shù)組一樣,元胞數(shù)組的每一行也必須具有相同的列數(shù)。6.1元胞數(shù)組cell函數(shù)調(diào)用cell函數(shù)首先創(chuàng)建一個空的元胞數(shù)組,之后即可向其中添加元胞。該函數(shù)有以下幾種基本調(diào)用格式:C

=cell(n)

C

=cell(sz1,...,szN)

C

=cell(sz)

其中,參數(shù)n和sz1、sz2、…、szN都是整型參數(shù);sz為一個行向量,其中的每個參數(shù)也是整數(shù)。上述3種調(diào)用格式分別返回一個n×n、sz1×...×szN

和sz(1)×...×sz(N)

元胞數(shù)組。例如,cell(2,3)和cell([23])都返回一個2×3元胞數(shù)組。6.1元胞數(shù)組6.1.2元胞數(shù)組中數(shù)據(jù)的訪問對元胞數(shù)組,可以有兩種基本的訪問操作,即元胞索引和內(nèi)容索引訪問。元胞索引指的是元胞數(shù)組中的各元素,每個元素是一個元胞。元胞中保存的具體數(shù)據(jù)稱為內(nèi)容索引。上述兩種索引都可以像普通數(shù)組一樣通過下標(biāo)進(jìn)行訪問。但是,元胞索引的下標(biāo)必須放在小括號中,內(nèi)容索引的下標(biāo)必須放在大括號中。6.1元胞數(shù)組元胞索引的訪問小括號中的索引下標(biāo)用于訪問元胞索引,返回結(jié)果是一個元胞(11元胞數(shù)組),或者多個元胞構(gòu)成的元胞數(shù)組。例如,用如下命令創(chuàng)建一個2×3元胞數(shù)組C:>>C={'one','two','three';1,2,3}C=2×3cell數(shù)組{'one'}{'two'}{'three'}{[1]}{[2]}{[3]}則如下命令及其結(jié)果分別為:>>C1=C(1,2)

%元胞索引,返回一個元胞C1=1×1cell數(shù)組{'two'}>>C2=C(1:2,1:2) %元胞索引,訪問多個元胞,得到一個新的元胞數(shù)組C2=2×2cell數(shù)組{'one'}{'two'}{[1]}{[2]}6.1元胞數(shù)組內(nèi)容索引的訪問通過將索引下標(biāo)放在大括號中,可以訪問元胞數(shù)組中指定元胞的內(nèi)容,即元胞中存儲的數(shù)字、文本或其他數(shù)據(jù)。例如,對前面創(chuàng)建的元胞數(shù)組C,如下命令可以訪問最后一個元胞中存儲的數(shù)據(jù):>>C{1,2}ans='two'得到的結(jié)果是一個字符向量。注意到顯示的結(jié)果中沒有加大括號,說明是元胞中保存的具體數(shù)據(jù)(內(nèi)容索引),而不是元胞本身(元胞索引)。6.1元胞數(shù)組利用這種方法還可以同時訪問一個元胞數(shù)組中多個元胞的數(shù)據(jù),返回的各數(shù)據(jù)以逗號分隔,分別返回給不同的變量。例如,對前面創(chuàng)建的2×3元胞數(shù)組C,如下命令返回其中第2列的兩個元胞數(shù)據(jù),并分別賦給變量a和b:>>[a,b]=C{:,2}a='two'b=2需要注意的是,如果每個元胞包含不同類型的數(shù)據(jù),則返回的這些數(shù)據(jù)不能同時分配給一個變量,或者賦給某個普通數(shù)組。當(dāng)返回的每個元胞數(shù)據(jù)都具有相同的類型時,可以將其用[]指定放到一個數(shù)組變量中。例如,>>a=[C{2,1:2}] a=1×3126.1元胞數(shù)組6.1.3字符向量元胞數(shù)組前面已經(jīng)說過,如果將多個字符向量放在一對中括號中,是將這些字符向量拼起來構(gòu)成一個新的字符向量。如果多個字符向量分別代表不同的含義(例如分別作為多個文件的文件名),則可以將其放在一對大括號中,作為一個元胞數(shù)組中的元素,此時各字符向量不會合并連接。字符向量元胞數(shù)組的創(chuàng)建如果一個元胞數(shù)組的元素均為字符向量,則稱為字符向量元胞數(shù)組。將用單引號括起來的每個字符向量分別用逗號、空格或者分號分隔,再用大括號括起來,即可創(chuàng)建字符向量元胞數(shù)組。6.1元胞數(shù)組例如,如下命令創(chuàng)建一個字符向量元胞數(shù)組:>>chrArr={'張三','李四','Alice'}chrArr=1×3cell數(shù)組{'張三'}{'李四'}{'Alice'}在得到的結(jié)果中,每個字符向量都用大括號括起來,表示一個元胞。比較如下命令及其結(jié)果:>>chrArr1=['張三','李四','Alice']chrArr1='張三李四Alice'得到的charArr1為一個新的字符向量。6.1元胞數(shù)組元胞數(shù)組維數(shù)的獲取前面介紹的內(nèi)置函數(shù)strlength用于獲取用雙引號括起來的字符串的長度。對于字符向量元胞數(shù)組,該函數(shù)用于獲取元胞數(shù)組中每個元胞字符向量的長度,返回結(jié)果是一個數(shù)值型數(shù)組,其維數(shù)等于元胞數(shù)組的維數(shù)。例如,>>chrArr={'張三','李四','Alice'}>>strlength(chrArr)ans=225注意:對字符向量元胞數(shù)組,length函數(shù)返回的是元胞數(shù)組中元胞的個數(shù),即字符向量的個數(shù)。比較:>>length(chrArr)ans=36.1元胞數(shù)組字符向量的比較前面介紹的strcmp和strcmpi等函數(shù)用于比較字符向量、字符串和字符串?dāng)?shù)組,也可以用于對兩個字符向量元胞數(shù)組進(jìn)行比較。參加比較的可以是一個字符向量和一個字符向量元胞數(shù)組,也可以是兩個字符向量元胞數(shù)組。如果參加比較的是兩個字符向量元胞數(shù)組,則兩個數(shù)組的大小必須相同。此時,返回結(jié)果是一個大小等于元胞數(shù)組大小的邏輯型數(shù)組。6.1元胞數(shù)組例如,>>s1='upon';>>s2={'Once','upon';'a','time'}; %字符向量與字符向量元胞數(shù)組進(jìn)行比較>>tf=strcmp(s1,s2)tf=2x2logical數(shù)組 %返回大小與元胞數(shù)組相同的邏輯型數(shù)組01006.1元胞數(shù)組6.1.4元胞數(shù)組與函數(shù)的可變個數(shù)參數(shù)元胞數(shù)組是MATLAB中一種重要的數(shù)據(jù)類型,具有很強(qiáng)的靈活性,利用這一特點(diǎn)可以實現(xiàn)高級功能和操作。例如,利用元胞數(shù)組可以存儲任意類型和任意個數(shù)的數(shù)據(jù),如果將元胞數(shù)組作為函數(shù)的參數(shù),則可以允許函數(shù)接收不同類型和個數(shù)的參數(shù),并據(jù)此實現(xiàn)不同的功能。可變個數(shù)參數(shù)的定義在定義函數(shù)時,如果用varargin和varargout關(guān)鍵字作為函數(shù)的輸入和輸出參數(shù),則表示該函數(shù)可以接收不同個數(shù)的參數(shù)。此外,在自定義的函數(shù)體中,還可以通過nargin和nargout關(guān)鍵字獲取調(diào)用自定義函數(shù)時所給定的輸入輸出參數(shù)個數(shù)。6.1元胞數(shù)組關(guān)鍵字varargin的全稱是Variable-lengthinputargumentlist(可變長度輸入?yún)?shù)列表),varargout的全稱是Variable-lengthoutputargumentlist(可變長度輸出參數(shù)列表)。這兩個關(guān)鍵字通常放在函數(shù)聲明語句中,分別作為函數(shù)的輸入?yún)?shù)和輸出參數(shù),從而是的函數(shù)能夠接收任意數(shù)量的輸入?yún)?shù),返回需要個數(shù)的輸出參數(shù)。具體使用時,將這兩個關(guān)鍵字分別放在函數(shù)輸入?yún)?shù)和輸出參數(shù)列表的最后。在調(diào)用執(zhí)行函數(shù)時,varargin和varargout都分別是一個1N的元胞數(shù)組,其中N是函數(shù)接收到的輸入?yún)?shù)個數(shù),但不包括在函數(shù)中明確聲明的其他參數(shù)。如果除了這些明確聲明的參數(shù)以外,函數(shù)沒有接收或返回任何其他參數(shù),則varargin和varargin為空的元胞數(shù)組。6.1元胞數(shù)組例如,定義如下函數(shù):functionmyFun(varargin)celldisp(varargin)end如下語句調(diào)用上述函數(shù):myFun(ones(3),'sometext',pi)其中3個輸入?yún)?shù)將賦給元胞數(shù)組變量varargin,再執(zhí)行函數(shù)體中的celldisp()函數(shù),顯示出其中3個元胞的內(nèi)容:varargin{1}=111111111varargin{2}=sometextvarargin{3}=3.14166.1元胞數(shù)組參數(shù)個數(shù)的檢查和獲取如果在函數(shù)定義中,參數(shù)的個數(shù)是確定的,則MATLAB能夠自動檢查函數(shù)的入口參數(shù)個數(shù)是否正確。當(dāng)發(fā)現(xiàn)調(diào)用時所給實參個數(shù)與函數(shù)定義中規(guī)定的形參個數(shù)不一致時,會自動發(fā)出提示。例如,假設(shè)有如下函數(shù)定義:function[x,y]=myFun(a,b,c)該函數(shù)需要3個輸入?yún)?shù),有2個輸出參數(shù)。如果用如下語句調(diào)用上述函數(shù):[X,Y]=myFun(1,2,3,4)由于給定的實在參數(shù)有4個,因此執(zhí)行時,將顯示如下錯誤提示:錯誤使用myFun輸入?yún)?shù)太多。6.1元胞數(shù)組在MATLAB程序中,函數(shù)的入口參數(shù)可以有可選位置參數(shù)、重復(fù)參數(shù)以及不同個數(shù)的名值對參數(shù),同一個函數(shù)也可以根據(jù)實現(xiàn)的具體功能返回不同個數(shù)的出口參數(shù)等,這就需要在函數(shù)體中自動確定參數(shù)的個數(shù)。這是通過調(diào)用MATLAB種提供的nargin和nargout兩個專用內(nèi)置函數(shù)實現(xiàn)的。nargin和nargout函數(shù)分別返回的是調(diào)用時主程序向函數(shù)傳遞的入口和出口參數(shù)的個數(shù),這兩個函數(shù)只能用在自己定義的函數(shù)中,不能用在主程序中。注意nargin函數(shù)返回的入口參數(shù)個數(shù)中,包括位置參數(shù)、可選位置參數(shù)和重復(fù)參數(shù),但不包括名值對參數(shù)。6.1元胞數(shù)組實例6-1函數(shù)的可變個數(shù)參數(shù)16.1元胞數(shù)組實例6-2函數(shù)的可變個數(shù)參數(shù)26.1元胞數(shù)組實例6-3參數(shù)個數(shù)的檢查6.1元胞數(shù)組實例6-4輸出參數(shù)個數(shù)的獲取創(chuàng)建一個函數(shù)求入口向量參數(shù)中所有元素的累加和,如果有兩個出口參數(shù),則同時返回入口向量中所有元素的平均值。6.2結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組(StructureArray)中的每個元素是一個結(jié)構(gòu)體(Structure),每個結(jié)構(gòu)體由多個字段或者域(Field)構(gòu)成,每個字段有一個字段名和字段值,各字段的值可以是不同類型的數(shù)據(jù)。因此與元胞數(shù)組類似,結(jié)構(gòu)體數(shù)組是一種可以存儲多個不同類型數(shù)據(jù)的數(shù)據(jù)容器。結(jié)構(gòu)體數(shù)組的基本組成可以用圖6-1表示。與其他數(shù)組類似,結(jié)構(gòu)體數(shù)組可以具有任意維度,同時具有以下屬性:(1)結(jié)構(gòu)體數(shù)組中的所有元素(結(jié)構(gòu)體)都具有相同名稱和個數(shù)的字段;(2)同一個元素的各字段值可以具有不同的數(shù)據(jù)類型;(3)不同元素中的同名字段可以包含不同類型或大小的數(shù)據(jù)。6.2結(jié)構(gòu)體數(shù)組6.2結(jié)構(gòu)體數(shù)組6.2.1結(jié)構(gòu)體數(shù)組的創(chuàng)建結(jié)構(gòu)體標(biāo)量的創(chuàng)建

結(jié)構(gòu)體數(shù)組中的每個元素都是一個結(jié)構(gòu)體,單獨(dú)的一個結(jié)構(gòu)體是一個標(biāo)量。創(chuàng)建結(jié)構(gòu)體標(biāo)量時,只需要依次給定該元素的各字段名,并為其賦值即可。具體格式如下:

結(jié)構(gòu)體名.字段名=字段值例如,如下命令:>>="張三";>>student.number=1234;>>student.score=[926574];結(jié)構(gòu)體。6.2結(jié)構(gòu)體數(shù)組創(chuàng)建了一個名為student結(jié)構(gòu)體,每個結(jié)構(gòu)體包含的字段有:name(姓名)、number(學(xué)號)、score(3次測驗成績),并且直接用賦值語句為3個字段賦值。執(zhí)行上述命令后,在命令行窗口用whos命令可以查看該結(jié)構(gòu)體的相關(guān)屬性:>>whosNameSizeBytesClassAttributesstudent1x1686struct其中的類型屬性(Class)為struct,說明這是一個結(jié)構(gòu)體。6.2結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的創(chuàng)建

由多個具有相同字段的結(jié)構(gòu)體可以構(gòu)成一個結(jié)構(gòu)體數(shù)組,其中的每個元素都是結(jié)構(gòu)體。要創(chuàng)建這樣的結(jié)構(gòu)體數(shù)組,對數(shù)組中的每個結(jié)構(gòu)體分別設(shè)置字段值即可。在程序中,首先用索引下標(biāo)訪問結(jié)構(gòu)體數(shù)組中指定的結(jié)構(gòu)體元素,然后利用前面創(chuàng)建結(jié)構(gòu)體相同的方法為該元素設(shè)置各字段值。

例如,如下語句創(chuàng)建了結(jié)構(gòu)體數(shù)組s:

s(1).name="張三";s(1).number=1234;s(1).score=[926574];

s(2).name="李四";s(1).number=1235;s(1).score=[608590];

其中有兩個元素,每個元素包括name、number和score三個字段。

6.2結(jié)構(gòu)體數(shù)組struct()函數(shù)

除了上述方法外,還可以調(diào)用內(nèi)置函數(shù)struct創(chuàng)建結(jié)構(gòu)體和結(jié)構(gòu)體數(shù)組,該函數(shù)的基本調(diào)用格式如下:s=

struct(field1,value1,...,fieldN,valueN)

其中field1、field2、…為字段名,value1、value2、…為各字段的取值。

在具體調(diào)用上述函數(shù)時,可以創(chuàng)建一個結(jié)構(gòu)體標(biāo)量或結(jié)構(gòu)體數(shù)組。如果入口參數(shù)這三所有字段名和字段值都不是元胞數(shù)組,則返回一個結(jié)構(gòu)體或者結(jié)構(gòu)體數(shù)組中的一個元素。6.2結(jié)構(gòu)體數(shù)組例如,如下命令及其執(zhí)行結(jié)果為:>>s=struct('x','a','y',[123])創(chuàng)建了一個結(jié)構(gòu)體s,其中包括兩個x和y兩個字段,第2和第4個參數(shù)分別為兩個字段的值。命令執(zhí)行結(jié)果如下:s=包含以下字段的struct:x:'a'y:[123]6.2結(jié)構(gòu)體數(shù)組如果用這種方法創(chuàng)建的多個結(jié)構(gòu)體具有相同的字段,則這些結(jié)構(gòu)體可以構(gòu)成一個結(jié)構(gòu)體數(shù)組。例如,用如下兩條命令>>s(1)=struct('x','a','y',[123]);>>s(2)=struct('x','b','y',[456]);分別創(chuàng)建了一個結(jié)構(gòu)體s(1)和s(2),這兩個結(jié)構(gòu)體分別作為兩個元素,構(gòu)成結(jié)構(gòu)體數(shù)組s。6.2結(jié)構(gòu)體數(shù)組6.2.2結(jié)構(gòu)體數(shù)組的訪問和操作結(jié)構(gòu)體數(shù)組的查看

用前面介紹的方法創(chuàng)建的結(jié)構(gòu)體標(biāo)量或者結(jié)構(gòu)體數(shù)組,可以調(diào)用disp函數(shù)查看。例如,對前面創(chuàng)建的student結(jié)構(gòu)體標(biāo)量,用如下命令>>disp(student)查看,得到如下結(jié)果:

name:"張三"number:1234score:[926574]注意:對于結(jié)構(gòu)體標(biāo)量,調(diào)用disp函數(shù)可以顯示所有的字段名和字段值。對于結(jié)構(gòu)體數(shù)組,只顯示字段名,不顯示字段值。如果希望同時顯示出字段值,需要分別對其中的各元素調(diào)用disp函數(shù)進(jìn)行。6.2結(jié)構(gòu)體數(shù)組除了上述方法外,也可以通過變量子窗口觀察所創(chuàng)建的結(jié)構(gòu)體數(shù)組。具體操作方法是:在工作區(qū)子窗口中雙擊結(jié)構(gòu)體數(shù)組變量名,即可打開變量子窗口,在其中以表格的形式顯示結(jié)構(gòu)體數(shù)組。雙擊6.2結(jié)構(gòu)體數(shù)組字段名和字段值的訪問在程序中,調(diào)用內(nèi)置函數(shù)fieldnames可以獲取結(jié)構(gòu)體數(shù)組的字段名,返回一個由所有字段名構(gòu)成的元胞數(shù)組。例如,對例6-5中創(chuàng)建的結(jié)構(gòu)體數(shù)組sarr,如下命令>>fd=fieldnames(sarr)返回元胞數(shù)組列向量fd,結(jié)果如下:fd=3×1cell數(shù)組{'f1'}{'f2'}{'f3'}6.2結(jié)構(gòu)體數(shù)組之后即可采用內(nèi)容索引方法獲得用字符向量表示的各字段名稱。例如,如下命令>>fd{1}獲取第一個字段的字段名,結(jié)果如下:ans='f1'而如下命令可以獲取結(jié)構(gòu)體中字段的個數(shù):>>length(fd)ans=36.2結(jié)構(gòu)體數(shù)組訪問結(jié)構(gòu)體中指定字段值的基本方法是用小圓點(diǎn)運(yùn)算符實現(xiàn),也可以調(diào)用內(nèi)置函數(shù)getfield和setfield實現(xiàn)。例如,如下兩條命令:>>student.number>>getfield(student,"number")都是訪問其中的number字段,得到如下結(jié)果:ans=12346.2結(jié)構(gòu)體數(shù)組而如下命令>>setfield(student,"number",1235)將結(jié)構(gòu)體student中的number字段值修改為1235,執(zhí)行結(jié)果如下:ans=包含以下字段的struct:name:"張三"number:1235score:[926574]對于含有多個元素的結(jié)構(gòu)體數(shù)組,調(diào)用getfield和setfield函數(shù)時,還可以指定元素下標(biāo)。例如,如下命令:>>getfield(sarr,{1},'f2')訪問sarr結(jié)構(gòu)體數(shù)組中第一個元素的f2字段,得到如下結(jié)果:ans='a'需要注意的是,下標(biāo)必須放在一對大括號中。6.2結(jié)構(gòu)體數(shù)組而如下命令>>setfield(student,"number",1235)將結(jié)構(gòu)體student中的number字段值修改為1235,執(zhí)行結(jié)果如下:ans=包含以下字段的struct:name:"張三"number:1235score:[926574]對于含有多個元素的結(jié)構(gòu)體數(shù)組,調(diào)用getfield和setfield函數(shù)時,還可以指定元素下標(biāo)。例如,如下命令:>>getfield(sarr,{1},'f2')訪問sarr結(jié)構(gòu)體數(shù)組中第一個元素的f2字段,得到如下結(jié)果:ans='a'需要注意的是,下標(biāo)必須放在一對大括號中。6.2結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組元素的遍歷對結(jié)構(gòu)體數(shù)組,根據(jù)程序的需要,可能一次訪問一個元素的多個字段值,也可能一次訪問多個元素的同一個字段值,還可能一次訪問多個元素的多個字段值甚至是整個結(jié)構(gòu)體數(shù)組。作為例子,首先用如下命令創(chuàng)建結(jié)構(gòu)體stu:>>stu=struct('name',{'張三','李四','王五'},...'ID',{'001','002','003'},...'score',{90,80,'缺考'})6.2結(jié)構(gòu)體數(shù)組在變量觀察子窗口觀察得到的結(jié)構(gòu)體stu如圖6-3所示。該結(jié)構(gòu)體數(shù)組中有3個元素,每個元素有3個字段。3個元素的字段name和ID的取值都為字符向量,而第1和2個元素中字段score的取值為數(shù)值型數(shù)據(jù),第3個元素的score字段取值為字符向量。6.2結(jié)構(gòu)體數(shù)組(1)多個元素同一個字段值的訪問為了訪問結(jié)構(gòu)體數(shù)組stu中多個元素的同一個字段,基本的方法是在結(jié)構(gòu)體數(shù)組名后用小圓點(diǎn)運(yùn)算符直接跟上字段名。例如score字段,可以用如下命令:>>stu.score此時在命令行窗口將依次返回各元素的score字段值,得到如下結(jié)果:ans=90ans=80ans='缺考'需要注意的是,如果在上述命令中給定了返回值變量,并且是一個標(biāo)量,則只返回結(jié)構(gòu)體數(shù)組中第一個元素的score值。為了同時返回所有元素的字段值,可以設(shè)置與元素個數(shù)相同的返回值變量列表。6.2結(jié)構(gòu)體數(shù)組(2)同一個元素多個字段值的訪問在這種情況下,首先用普通數(shù)組的方法,利用索引下標(biāo)指定數(shù)組中需要訪問的元素,之后用小圓點(diǎn)運(yùn)算符依次訪問指定字段即可。由于一般情況下各字段值的數(shù)據(jù)類型不相同,因此一般將返回結(jié)果放到元胞數(shù)組中。例如,要顯示結(jié)構(gòu)體stu中第一個學(xué)生的所有字段信息,可以用如下命令:>>s1={stu(1).name,stu(1).ID,stu(1).score}s1=1×3cell數(shù)組{'張三'}{'001'}{[90]}6.2結(jié)構(gòu)體數(shù)組(3)結(jié)構(gòu)體數(shù)組元素的遍歷所謂遍歷,是依次訪問結(jié)構(gòu)體數(shù)組中所有元素的所有字段,或者多個元素的若干個字段值。為實現(xiàn)遍歷,只需要將前述兩種情況綜合應(yīng)用,并進(jìn)行循環(huán)訪問即可。例如,將stu結(jié)構(gòu)體中所有學(xué)生的所有信息以列表的形式顯示,可以用如下程序段實現(xiàn):n=length(stu); %獲取結(jié)構(gòu)體數(shù)組中元素的個數(shù)fprintf('姓名學(xué)號成績\n');fprintf('------------------\n');fori=1:nfprintf('%s%s%3d\n',stu(i).name,stu(i).ID,stu(i).score);end6.2結(jié)構(gòu)體數(shù)組實例6-6結(jié)構(gòu)體數(shù)組的創(chuàng)建與訪問創(chuàng)建一個結(jié)構(gòu)體數(shù)組stu,其中的字段name、ID、score和avg分別用于存放各學(xué)生的姓名、學(xué)號、4門課程的測驗成績和平均成績。之后實現(xiàn)如下功能:(1)計算每個學(xué)生4門課程的平均成績,并保存到結(jié)構(gòu)體中;(2)求所有學(xué)生的平均成績avg0。在程序中,設(shè)置name字段的值是1′3元胞數(shù)組行向量,因此得到的stu也是1′3結(jié)構(gòu)體數(shù)組,其中的每個元素有4個字段,字段名分別為name、ID、score和avg。字段avg的值設(shè)為空數(shù)組,在程序后面通過for循環(huán)計算得到各學(xué)生的平均成績后,再作為字段值保存到結(jié)構(gòu)體中。6.2結(jié)構(gòu)體數(shù)組6.2結(jié)構(gòu)體數(shù)組由于字段score中每個學(xué)生4門課程的成績是普通的數(shù)值型數(shù)組,因此在for循環(huán)中,stu(i).score返回的是一個普通的數(shù)值型數(shù)組,調(diào)用內(nèi)置函數(shù)mean即可求得到數(shù)組中4門課程的平均值。在程序的最后,表達(dá)式[stu.avg]返回的也是一個數(shù)值型數(shù)組,因此也是通過內(nèi)置函數(shù)mean()求得3個學(xué)生的平均成績。程序運(yùn)行后,在變量觀察窗口和命令行窗口顯示的結(jié)果如圖6-4所示。6.2結(jié)構(gòu)體數(shù)組字段的增加和刪除要在已有的結(jié)構(gòu)體數(shù)組中所增加一個字段,直接為數(shù)組中某個指定的元素對應(yīng)該字段賦值即可。例如,要向?qū)嵗?-6中所創(chuàng)建的結(jié)構(gòu)體數(shù)組stu中增加一個字段total,可以用如下命令:>>stu(1).total=[]執(zhí)行結(jié)果如下:如果需要刪除結(jié)構(gòu)體數(shù)組中的指定字段,可以調(diào)用內(nèi)置函數(shù)rmfield。例如,如下命令:>>stu=rmfield(stu,'total')刪除結(jié)構(gòu)體數(shù)組stu中剛增加的字段total。6.2結(jié)構(gòu)體數(shù)組6.2.4函數(shù)的結(jié)構(gòu)體參數(shù)實例6-8結(jié)構(gòu)體作為函數(shù)參數(shù)將實例6-6中求所有學(xué)生所有課程平均成績的功能用函數(shù)實現(xiàn)。(1)將結(jié)構(gòu)體作為參數(shù)。注意:函數(shù)avgc中求出了每個學(xué)生的平均成績,但并未保存到主程序的結(jié)構(gòu)體stu中,捐贈本題數(shù)組這的字段avg仍然保持為空白。6.2結(jié)構(gòu)體數(shù)組(2)將字段作為參數(shù)。在該程序中,如下語句ss=[stu.score];獲取結(jié)構(gòu)體數(shù)組stu中所有元素的score字段值,得到一個普通的數(shù)值型數(shù)組ss,再調(diào)用mean()函數(shù)可以求得數(shù)組中所有數(shù)值型數(shù)據(jù)的平均值。6.3表格在MATLAB中,表格(Table)也是一種高級的數(shù)據(jù)結(jié)構(gòu)或者數(shù)據(jù)容器,與元胞數(shù)組和結(jié)構(gòu)體數(shù)組類似,其中可以保存多種不同類型的數(shù)據(jù)。表格適用于列向數(shù)據(jù)或表格數(shù)據(jù),這些數(shù)據(jù)通常以列形式存儲于文本文件或電子表格中。一般情況下,表格中的每一列對應(yīng)一個變量,稱為列變量。圖6-7是在MATLAB變量觀察子窗口中顯示的一個表格及其中保存的數(shù)據(jù),該表共有5行4列,因此共有4個列變量,變量名分別是Gender和Age等。6.3表格表格中每一行的所有列構(gòu)成一條記錄。同一行的各列變量取值可以具有不同的數(shù)據(jù)類型,但必須具有相同的行數(shù)。由此可見,表格可以認(rèn)為是結(jié)構(gòu)體數(shù)組的推廣。表格中的每一行相當(dāng)于結(jié)構(gòu)體數(shù)組中的一個元素,而每一列相當(dāng)于結(jié)構(gòu)體中的一個字段。6.3表格在程序中,創(chuàng)建表格最常用的方法是調(diào)用table函數(shù)實現(xiàn)。該函數(shù)具有多種調(diào)用格式,下面分別介紹。(1)第一種調(diào)用格式T=table(var1,...,varN)在這種調(diào)用格式中,參數(shù)var1,...,varN為列變量,變量的個數(shù)即為列數(shù)。各變量的取值一般為多行數(shù)組,可以是普通數(shù)組、元胞數(shù)組、結(jié)構(gòu)體數(shù)組等,數(shù)組的行數(shù)決定表格的行數(shù)。6.3.1表格的創(chuàng)建和查看table()函數(shù)6.3表格例如,如下命令分別創(chuàng)建了6個變量:>>LastName={'Sanchez';'Johnson';'Li';'Diaz';'Brown'};>>Age=[38;43;38;40;49];>>Smoker=logical([1;0;1;0;1]);>>Height=[71;69;64;67;64];>>Weight=[176;163;131;133;119];>>BloodPressure=[12493;10977;12583;11775;12280];將這6個變量作為列變量,用如下命令即可創(chuàng)建一個表格:>>T=table(LastName,Age,Smoker,Height,Weight,BloodPressure)得到如下結(jié)果:6.3表格6.3表格(2)第二種調(diào)用格式T=table('Size',sz,'VariableTypes',varTypes)在這種調(diào)用格式中,創(chuàng)建一個表格并為具有指定數(shù)據(jù)類型的變量預(yù)分配空間。其中參數(shù)sz是一個只有兩個元素的數(shù)值型向量,向量中的第一個元素指定表格的行數(shù),第二個元素指定表格的列數(shù)。參數(shù)varTypes為字符向量元胞數(shù)組,用于指定各列變量的數(shù)據(jù)類型,可以是'double'、'single'、'int8'、'int16'、'uint32'、'uint64'、'logical'、'string'、'cell'、'struct'等。6.3表格例如,如下命令:>>sz=[43];>>varTypes={'double','datetime','string'};>>T=table('Size',sz,'VariableTypes',varTypes)創(chuàng)建一個表格T,其中數(shù)組sz的兩個元素4和3分別指定表格共有4行3列。元胞數(shù)組varTypes長度為3,等于表格的列數(shù),其中的3個元素分別指定表格的3個列變量取值類型分別為雙精度型、日期時間型和字符串型。創(chuàng)建的表格如下:注意,如果沒有指定各列變量的名稱,則默認(rèn)各列變量依次命名為Var1、Var2、…。6.3表格(3)第三種調(diào)用格式T=table(___,'VariableNames',varNames,'RowNames',rowNames)這種格式是在前面兩種格式的基礎(chǔ)上,附加名-值對參數(shù),用于指定表格中列變量(varNames)和各行(rowNames)的名稱,其中varNames必須為行向量,rowNames必須為列向量,一般情況下都是字符向量元胞數(shù)組。從R2019b版本開始,列變量名稱和行名稱可以包含任何字符,包括空格和非ASCII碼字符,也可以由任何字符(而不僅僅是字母)開頭。6.3表格例如,如下命令:>>sz=[43];>>varTypes={'double','datetime','string'};>>varNames={'score','datetime','name'};>>rowNames={'1#';'2#';'3#';'4#'};>>Tab0=table('Size',sz,

'VariableTypes',varTypes,...'VariableNames',varNames,...

'RowNames',rowNames)6.3表格這種方法主要利用變量觀察子窗口實現(xiàn),不僅可以隨意設(shè)置列變量和行,還可以很方便地設(shè)置列變量的數(shù)據(jù)類型,向表格中添加記錄數(shù)據(jù)等。下面介紹具體操作步驟。(1)在命令行創(chuàng)建調(diào)用table()函數(shù)創(chuàng)建一個空表格。>>T=table在工作區(qū)中雙擊所創(chuàng)建的表格變量T,打開變量觀察子窗口,其中顯示一個空表格,表格中還沒有任何變量和數(shù)據(jù),如圖6-8(a)所示。

圖形化創(chuàng)建方法6.3表格(2)雙擊單元格,進(jìn)入編輯狀態(tài),將數(shù)據(jù)填入指定的單元格,如圖6-8(b)所示。(3)一旦填入數(shù)據(jù),將自動為該列分配一個列變量,默認(rèn)變量名依次為Var1、Var2等。依次雙擊各變量名,進(jìn)入編輯狀態(tài),可以為列變量重新命名,如圖6-8(c)所示。6.3表格(5)在命令行窗口輸入如下命令:>>T.Properties.RowNames{1}='1#';將設(shè)置表格第一行的名稱為'1#'。執(zhí)行后,將第一行按語句中設(shè)置的字符向量命名,同時后面各行自動命名為'Row2'、'Row3'等。之后,雙擊各行名,可以根據(jù)需要對其重新命名,如圖6-8(d)所示。6.3表格在MATLAB中,可以通過名稱、數(shù)值索引或數(shù)據(jù)類型指定行和變量,使用小括號、大括號或點(diǎn)索引對表格進(jìn)行索引訪問。其中,使用小括號可以選擇表格中的一個數(shù)據(jù)子集,返回一個新的表格;使用大括號和點(diǎn)索引可以對表格中指定的單元格進(jìn)行訪問,返回單元格中保存的數(shù)據(jù)。利用這些基本方法都可以實現(xiàn)表格數(shù)據(jù)的添加和刪除等。6.3.2表格中數(shù)據(jù)的訪問

表格數(shù)據(jù)的基本訪問方法點(diǎn)索引訪問法類似于結(jié)構(gòu)體數(shù)組的訪問,具體格式是在表格名后面緊跟一個小圓點(diǎn),之后給定需要訪問的列變量。6.3表格(1)當(dāng)列變量名稱是合法的MATLAB標(biāo)識符時,可以將其直接放在小圓點(diǎn)后面,以指定需要訪問的列。其中合法的標(biāo)識符以字母開頭,只能包括字母、數(shù)字和下劃線。例如,對圖6-8(d)所示表格T,使用如下命令:>>T.scoreans=908070訪問表格T中名為score的第3列,返回一個列向量。6.3表格(2)如果列變量名不是合法的標(biāo)識符,例如其中帶有空格等,此時必須將其放在小括號中。例如,假設(shè)將表格T的第三列名稱改為'Totalscore',中間有一個空格,不是合法的標(biāo)識符,因此不能用上述第一種方法進(jìn)行訪問,而只能用如下命令:>>T.('Totalscore')(3)如果利用該列的索引編號指定需要訪問的列,也必須將編號放在小括號中。例如,如下命令>>T.(3)訪問表格T中的第3列。6.3表格上述點(diǎn)索引法可以一次訪問表格中的一列數(shù)據(jù),返回結(jié)果一般為列向量。為了訪問表格中指定行和指定列,可以使用小括號或大括號。在這兩種方法中,需要同時指定行和列的索引編號,或者行名稱和列變量名。其中行和列的索引編號直接放在小括號或者大括號中,而行或列變量名稱必須加單引號并放在大括號中。小括號索引法和大括號索引法分別類似于元胞數(shù)組的元胞索引訪問和內(nèi)容索引訪問。其中小括號索引法返回的結(jié)果是一個新的表格,而大括號索引法返回結(jié)果是一個數(shù)組(數(shù)值型數(shù)組、字符串?dāng)?shù)組或元胞數(shù)組)。6.3表格進(jìn)行表格行和列數(shù)據(jù)的添加和刪除等操作,大多數(shù)都可以通過程序語句或者命令來實現(xiàn),也可以在變量觀察窗口直接進(jìn)行操作。這里仍然根據(jù)圖6-8(d)所示表格T,介紹如何在程序中實現(xiàn)表格數(shù)據(jù)的添加和刪除等操作。要修改指定單元格的數(shù)據(jù),可以采用前面的點(diǎn)索引或大括號索引法指定需要修改的單元格,并將數(shù)據(jù)賦給單元格。例如,如下兩條命令>>T{1,3}=100>>T{1,'score'}=100的功能都是將表格T中第1行第3列數(shù)據(jù)修改為100。

表格數(shù)據(jù)的添加和刪除6.3表格需要注意以下幾點(diǎn):(1)如果需要修改的指定單元格是數(shù)值型標(biāo)量,則可將數(shù)據(jù)直接作為上述賦值語句右側(cè)的表達(dá)式。(2)如果需要修改的指定單元格是字符向量,則必須將字符向量放在大括號中,再作為上述賦值語句右側(cè)的表達(dá)式。例如,>>T{1,1}={'011'}(3)要同時修改多行多列數(shù)據(jù),可以將這些數(shù)據(jù)按照所處的行列位置構(gòu)成二維數(shù)組。如果這些數(shù)據(jù)都是數(shù)值型數(shù)據(jù),則可以構(gòu)成普通的數(shù)值型數(shù)組。如果這些數(shù)據(jù)具有不同的數(shù)據(jù)類型,或者有些數(shù)據(jù)是字符串,則可以構(gòu)成元胞數(shù)組。6.3表格對已經(jīng)保存有數(shù)據(jù)的表格,可以向其中追加一些記錄數(shù)據(jù),或者刪除不需要的記錄。由于同一行的不同列可能具有不同的數(shù)據(jù)類型,因此要向表格中添加新行,可以將需要添加的各列數(shù)據(jù)構(gòu)成一個元胞數(shù)組,然后用數(shù)組按行拼接的方法將元胞數(shù)組垂直串聯(lián)到表格的末尾。例如,如下命令向T中添加一個新行記錄:

行和列的添加和刪除6.3表格6.3表格為表格添加一個新的列,可以采用點(diǎn)索引方法。例如,如下命令:>>T.age=[18;20;19]向初始表格T中添加一個列變量,變量名稱為age,并用一個長度為3的列向量為該列賦值。如果該列中的數(shù)據(jù)為字符向量,必須采用字符向量元胞數(shù)組賦值。無論什么數(shù)據(jù)類型,行數(shù)必須與表格的原來行數(shù)相同,這里表格T的初始行數(shù)為3。如果需要刪除表格中某一行或某一列數(shù)據(jù),可以索引到指定行或列,然后用一個空數(shù)組為其賦值。例如,要刪除前面添加的第4行數(shù)據(jù),可以用如下命令:>>T('Row4',:)=[]要刪除前面添加的age列,可以用如下命令:>>T(:,5)=[]6.3表格對表格中保存的各種數(shù)據(jù),可以利用前面的方法進(jìn)行訪問和讀取,然后自行編制程序?qū)ζ渥鞲鞣N統(tǒng)計計算和分析處理。此外,MATLAB中也提供了一些函數(shù),可以直接調(diào)用,實現(xiàn)相應(yīng)的功能。表格數(shù)據(jù)的統(tǒng)計調(diào)用

summary

函數(shù)可以實現(xiàn)表格的匯總,包括查看表格中每個變量的數(shù)據(jù)類型、說明、單位和其他統(tǒng)計信息。例如,對圖6-8(d)所示表格T,執(zhí)行如下命令>>summary(T)將在命令行窗口顯示如下匯總結(jié)果:6.3.3表格數(shù)據(jù)的統(tǒng)計和排序6.3表格Variables:ID:3×1cellarrayofcharactervectorsname:3×1cellarrayofcharactervectorsscore:3×1doubleValues:Min70Median80Max90date:3×1cellarrayofcharactervectors其中列出了表格T中所有4個列變量。每個列變量的大小都為3×1,其中第1、2和4列為字符向量元胞數(shù)組,score列為雙精度型數(shù)組。6.3表格對于數(shù)值型數(shù)據(jù)列,還將匯總該列所有數(shù)據(jù)的最小值(Min)、最大值(Max)和中間值(Median)等統(tǒng)計信息。如果表格中某些行或者某些列都是數(shù)值型數(shù)據(jù),調(diào)用mean、max和min等內(nèi)置函數(shù)可以求取這些數(shù)據(jù)的平均值、最大值、最小值。例如,在表格T中,score列中的數(shù)據(jù)都是雙精度數(shù)值型數(shù)據(jù),則如下命令:>>mean(T{:,3})>>max(T{:,3})>>min(T{:,3})分別計算該列數(shù)據(jù)的平均值、最大值和最小值。6.3表格實例6-9表格數(shù)據(jù)的統(tǒng)計將實例6-6的功能用表格實現(xiàn)。注意到程序中定義的score列變量取值為3×4矩陣,因此表格中的score字段共包括4列。6.3表格表格數(shù)據(jù)的排序表格由行和列變量構(gòu)成,每一行還可以有一個行名稱。對表格進(jìn)行排序,指的是根據(jù)指定的列變量或者行名稱進(jìn)行按行排序,因此一般用sortrows函數(shù)對表格進(jìn)行排序。利用sortrows函數(shù)對表格進(jìn)行排序時,其基本調(diào)用格式如下:

B=sortrows(tbl,var,dir)其中,參數(shù)tbl為表格名稱,var可以為行名稱或列變量名稱,dir指定遞增或遞減排序。6.3表格實例6-10表格數(shù)據(jù)的排序6.3表格創(chuàng)建的原始表格第一次排序6.3表格創(chuàng)建的原始表格第二次排序MATLABProgrammingandEngineeringApplicationMATLAB程序設(shè)計與工程應(yīng)用本書知識結(jié)構(gòu)第7章文件及文件操作7.1MATLAB中常用的文件格式了解文件的概念以及MATLAB中常用的文件格式。7.2MAT文件了解MAT文件的作用及其與M文件的區(qū)別,掌握利用MAT文件實現(xiàn)MATLAB工作區(qū)中變量的保存、加載以及文件內(nèi)容的查看方法。7.3文件文件和電子表格文件了解文本文件和電子表格文件的概念及其作用,掌握這兩種文件中數(shù)據(jù)的導(dǎo)入和導(dǎo)出方法。7.4低級文件操作了解文件中數(shù)據(jù)的兩種基本保存格式(文本模式和二進(jìn)制模式),掌握文本模式和二進(jìn)制模式下文件的低級操作和基本訪問方法。7.1MATLAB中常用的文件格式MATLAB中的文件可以用多種格式分別存儲程序和不同的數(shù)據(jù),典型的有M文件、MAT文件和各種數(shù)據(jù)文件(文本文件、圖像和音視頻文件、電子表格、科學(xué)數(shù)據(jù)文件等)。一般情況下,文件保存在硬盤和U盤等存儲介質(zhì)中,停電或者關(guān)閉MATLAB后,文件中保存的數(shù)據(jù)信息不會丟失。所有的文件都有一個文件名作為標(biāo)識,同時有擴(kuò)展名以說明文件的屬性。例如,前面介紹的M文件,擴(kuò)展名為.m,用于保存MATLAB程序或者函數(shù),而用于保存數(shù)據(jù)的MAT文件,擴(kuò)展名為.mat。MATLAB中支持的常用數(shù)據(jù)文件格式如表7-1所示。7.1MATLAB中常用的文件格式7.2MAT文件MAT文件是MATLAB中專用的二進(jìn)制文件,用于存儲工作區(qū)中的變量。在MATLAB版本不斷更新的過程中,相應(yīng)的MAT文件版本也從4.0更新到最新的7.3版本。該版本的MAT文件使用基于HDF5格式(HierarchicalDataFormat,層次數(shù)據(jù)格式),可以存儲不同類型的圖像和數(shù)碼數(shù)據(jù),并且可以在不同類型的機(jī)器上傳輸,同時還有統(tǒng)一處理這種文件格式的函數(shù)庫。HDF5格式要求使用一些存儲空間開銷來描述文件內(nèi)容,因此當(dāng)存儲元胞數(shù)組、結(jié)構(gòu)體數(shù)組等數(shù)據(jù)容器時,MAT文件將比較大。為此,當(dāng)將數(shù)據(jù)寫入到MAT文件時,MATLAB會對數(shù)據(jù)進(jìn)行壓縮以節(jié)省存儲空間。數(shù)據(jù)壓縮和解壓縮會降低所有保存操作和部分加載操作的速度。在大多數(shù)情況下,降低文件大小所花費(fèi)的額外時間是值得的。7.2MAT文件7.2.1工作區(qū)變量的保存和加載在啟動MATLAB工作的過程中,工作區(qū)將保存所有的變量。退出MATLAB時,工作區(qū)中所有的變量都將被清除。如果在下次工作時,還能夠使用和訪問這些變量,可以將當(dāng)前工作區(qū)中的所有變量保存到后綴為.mat的MAT文件。之后,只需重新加載該文件,即可重新使用文件中保存的這些工作區(qū)變量。7.2MAT文件

變量的保存要將所有工作區(qū)變量保存到MAT文件,可以在MATLAB主頁選項卡的變量按鈕組中點(diǎn)擊保存工作區(qū)按鈕。如果只需要保存部分變量,可以在工作區(qū)子窗口中選擇所需的變量,之后右鍵點(diǎn)擊,在彈出的快捷菜單中再單擊另存為...按鈕。此外,還可以將所選的變量從工作區(qū)子窗口拖放到當(dāng)前文件夾子窗口,此時將自動創(chuàng)建一個名為untitled.mat的文件,并將所有選中的變量保存到該文件中。7.2MAT文件除了上述交互方式以外,還可以調(diào)用save函數(shù),以編程方式保存工作區(qū)變量。例如,要將所有當(dāng)前工作區(qū)變量保存到文件var.mat,可以使用如下命令:>>save('var')其中的參數(shù)指定保存的文件名,文件后綴默認(rèn)為.mat,不需要給出。如下命令>>save('var','a','b')將只保存變量a和b到var.mat文件中。7.2MAT文件

變量的加載要將原來保存在MAT文件中的變量重新加載到工作區(qū),可以在當(dāng)前文件夾子窗口中雙擊該MAT文件。如果只需要從MAT文件中加載部分變量,可以在主頁選項卡的變量按鈕組中,點(diǎn)擊導(dǎo)入數(shù)據(jù)按鈕,之后選擇并打開要加載的MAT文件。此時,將打開導(dǎo)入向?qū)υ捒蛑校鐖D7-1所示。在對話框左側(cè)的變量列表中,單擊某變量,將在右側(cè)對變量的值和屬性進(jìn)行預(yù)覽。通過單擊勾選變量名前面的復(fù)選框,可以選擇需要導(dǎo)入的變量。7.2MAT文件圖7-1導(dǎo)入數(shù)據(jù)向?qū)υ捒?.2MAT文件除此之外,還可以在程序或者在命令行窗口通過調(diào)用load函數(shù)加載保存的變量。例如,要加載文件var.mat中的所有變量,可以使用如下命令:>>load('var')如果只需要加載文件中的部分變量,可以使用如下格式:>>load('var','T','a')將數(shù)據(jù)加載到MATLAB工作區(qū)時,導(dǎo)入的變量將會覆蓋工作區(qū)中同名的現(xiàn)有變量。為了避免覆蓋,可以使用load函數(shù)將變量加載到結(jié)構(gòu)體中。例如,S=load('var')會將文件var.mat中的所有變量加載到結(jié)構(gòu)體S中。需要時,只需要從該結(jié)構(gòu)體中獲取指定的變量即可。7.2MAT文件7.2.2MAT文件內(nèi)容的查看MAT文件是MATLAB中采用的標(biāo)準(zhǔn)格式文件,文件中所有信息采用Unicode編碼表示,因此這種文件不能用記事本等應(yīng)用程序查看或編輯,只能在MATLAB環(huán)境中查看文件內(nèi)容。要在將MAT文件加載到工作區(qū)之前查看該文件中的變量,可以在當(dāng)前文件夾子窗口中單擊選中該文件。此時,該文件中保存的所有變量信息將顯示在詳細(xì)信息子窗口中,如圖7-2所示。一般情況下,該子窗口位于當(dāng)前文件夾子窗口下面。7.3文本文件和電子表格文件文本文件通常用于保存數(shù)值和文本數(shù)據(jù)以及變量名稱和行名稱等信息,在MATLAB程序中,可以使用導(dǎo)入工具或內(nèi)置函數(shù)將數(shù)據(jù)從文本文件導(dǎo)入表格中,也可以將表格、元胞數(shù)組或數(shù)值數(shù)組中包含的數(shù)據(jù)從MATLAB工作區(qū)導(dǎo)出到文本文件。電子表格文件通常指的是MicrosoftExcel電子表格。在電子表格文件中讀寫數(shù)據(jù),包括將.xls和.xlsx文件中的數(shù)據(jù)寫入MATLAB中的表格、矩陣或數(shù)組。7.3文本文件和電子表格文件將數(shù)據(jù)導(dǎo)出到文本文件和電子表格文件,導(dǎo)出的數(shù)據(jù)可以是工作區(qū)中的數(shù)值型數(shù)組、元胞數(shù)組和表格。對這三種數(shù)據(jù),MATLAB中都提供了專門的函數(shù)。7.3.1數(shù)據(jù)的導(dǎo)出

相關(guān)內(nèi)置函數(shù)對工作區(qū)中的普通數(shù)組、元胞數(shù)組和表格數(shù)據(jù),MATLAB分別提供了內(nèi)置函數(shù)writematrix、writecell和writetable,將這些數(shù)據(jù)導(dǎo)出到文本文件。三個函數(shù)具有類似的調(diào)用格式和用法。這里以writematrix為例進(jìn)行介紹。7.3文本文件和電子表格文件函數(shù)writematrix將數(shù)組中的所有數(shù)據(jù)寫入到文本文件,其基本調(diào)用格式為:writematrix(A,filename,Name,Value)

(1)如果沒有filename參數(shù),則默認(rèn)將數(shù)組變量的名稱作為文件名,并附加擴(kuò)展名

.txt。如果需要另外指定文件名,則必須同時包括文件名和擴(kuò)展名。其中,擴(kuò)展名決定了導(dǎo)出文件的格式。對文本文件,擴(kuò)展名可以是.txt、.dat

.csv;對電子表格文件,擴(kuò)展名可以是.xls或.xlsx等。(2)默認(rèn)情況下,導(dǎo)出的文件位于當(dāng)前文件夾。在參數(shù)filename中,也可以根據(jù)需要指定其他文件夾。例如,'C:\myFolder\myTextFile.csv'。(3)如果參數(shù)filename指定的文件不存在,則執(zhí)行該函數(shù)導(dǎo)出數(shù)據(jù)時會自動創(chuàng)建該文件。如果指定的文件存在,則導(dǎo)出的數(shù)據(jù)將覆蓋原文件。7.3文本文件和電子表格文件(1)'WriteMode'

:寫入模式。對文本文件,該參數(shù)值可以是'overwrite'或'append',分別表示覆蓋文件和將數(shù)據(jù)追加到文件。默認(rèn)為覆蓋文件,則保存數(shù)據(jù)時,將清除文件中原來的內(nèi)容。如果指定的文件不存在,則直接創(chuàng)建一個新的文件,并將數(shù)據(jù)保存到文件中。對電子表格文件,該參數(shù)值可以是'inplace'、'overwritesheet'、'append'或'replacefile'。當(dāng)參數(shù)值為默認(rèn)的'inplace'時,表示僅更新輸入數(shù)據(jù)占用的范圍。如果沒有指定工作表,則寫入函數(shù)會寫入第一個工作表。

數(shù)據(jù)導(dǎo)出的屬性設(shè)置7.3文本文件和電子表格文件如果該參數(shù)值設(shè)置為'overwritesheet',則保存數(shù)據(jù)時將清空指定的工作表,并將輸入數(shù)據(jù)寫入已清空的工作表。如果沒有指定工作表,則寫入函數(shù)會清空第一個工作表,并將輸入數(shù)據(jù)寫入其中。如果該參數(shù)值設(shè)置為'append',則將輸入數(shù)據(jù)追加到指定工作表的底部。如果沒有指定工作表,則寫入函數(shù)會將輸入數(shù)據(jù)追加到第一個工作表的底部。當(dāng)該參數(shù)值設(shè)置為'replacefile'時,則保存數(shù)據(jù)前將從文件中刪除所有其他工作表,然后清空指定的工作表并將輸入數(shù)據(jù)寫入其中。如果未指定工作表,則寫入函數(shù)會從文件中刪除所有其他工作表,然后清空第一個工作表并將輸入數(shù)據(jù)寫入其中。如果指定的文件不存在,則寫入函數(shù)會創(chuàng)建一個新文件,并將輸入數(shù)據(jù)寫入第一個工作表。7.3文本文件和電子表格文件(2)'Delimiter':數(shù)據(jù)分隔符。該參數(shù)只適用于文本文件。可以是逗號(','或'comma')、空格(''或'space')、制表符('\t'或'tab')、分號(';'或'semi')或垂直分隔條('|'或'bar')。默認(rèn)取值為逗號。(3)'Sheet'

:要寫入的工作表。該屬性只適用于電子表格文件,用于指定要寫入的工作表,參數(shù)值可以是工作表名稱或指示工作表索引的正整數(shù)。如果文件中不存在指定的工作表名稱,則寫入函數(shù)將在工作表集合的末尾添加一個新工作表。如果指定的工作表索引大于工作表數(shù),則寫入函數(shù)會在文件中追加空的工作表,直至工作簿中的工作表數(shù)等于工作表索引。7.3文本文件和電子表格文件(4)'Range'

:寫入范圍該參數(shù)只適用于電子表格文件,用于設(shè)置數(shù)據(jù)寫入到工作表的哪一塊矩形區(qū)域。參數(shù)值必須用單引號包圍,其中可以是一個單元格或者用冒號隔開的兩個單元格。例如,'D5'表示將第一個數(shù)據(jù)寫入工作表的D列5行,從該單元格開始向右向下占據(jù)由若干個單元格構(gòu)成的矩形區(qū)域,區(qū)域的實際大小決定于保存的數(shù)據(jù)個數(shù)。再如,參數(shù)值'D2:H4'表示該矩形區(qū)域左上角和右下角分別為單元格D2和H4。如果指定的范圍小于輸入數(shù)據(jù)的個數(shù),則只寫入該范圍能容納的輸入數(shù)據(jù)子集。如果指定的范圍大于輸入數(shù)據(jù)的大小,則指定區(qū)域中的對應(yīng)部分?jǐn)?shù)據(jù)保持不變。7.3文本文件和電子表格文件實例7-1數(shù)值型數(shù)組數(shù)據(jù)的導(dǎo)出運(yùn)行結(jié)果:用Excel打開myData1.xls文件:7.3文本文件和電子表格文件實例7-2元胞數(shù)組數(shù)據(jù)的導(dǎo)出創(chuàng)建一個元胞數(shù)組,并將其追加到實例7-1的mydata1.dat和mydata1.xls文件中。7.3文本文件和電子表格文件實例7-3表格數(shù)據(jù)的導(dǎo)出創(chuàng)建一個表格,并將其保存到文本文件和電子表格文件中。7.3文本文件和電子表格文件與數(shù)據(jù)的導(dǎo)出相反,數(shù)據(jù)的導(dǎo)入指的是將文本文件或電子表格文件中保存的數(shù)據(jù)讀出,存入MATLAB工作區(qū)中指定的數(shù)組、元胞數(shù)組或表格變量中,以便利用MATLAB程序作進(jìn)一步處理和運(yùn)算。根據(jù)不同的文件和導(dǎo)入數(shù)據(jù)類型的不同,可以在程序中或者在命令行窗口調(diào)用相應(yīng)的內(nèi)置函數(shù)實現(xiàn)數(shù)據(jù)的導(dǎo)入,也可以利用MATLAB中提供的數(shù)據(jù)導(dǎo)入工具實現(xiàn)數(shù)據(jù)的導(dǎo)入。7.3.2數(shù)據(jù)的導(dǎo)入7.3文本文件和電子表格文件

相關(guān)內(nèi)置函數(shù)與數(shù)據(jù)導(dǎo)出類似,可以從文本文件或者電子表格中讀出數(shù)據(jù),保存到MATLAB工作區(qū)中的數(shù)組、元胞數(shù)組或者表格中。根據(jù)導(dǎo)出數(shù)據(jù)存放變量的不同,相應(yīng)的有三個內(nèi)置函數(shù),即readmatrix、readcell和readtable。三個內(nèi)置函數(shù)具有類似的調(diào)用格式和使用方法,這里主要介紹readtable為例。readtable函數(shù)的基本調(diào)用格式為:T

=readtable(filename,opts,Name,Value)

調(diào)用時,將根據(jù)讀取的文件內(nèi)容創(chuàng)建一個表格,并可以通過一個或多個名-值對參數(shù)指定其他選項。例如,可以指定數(shù)據(jù)導(dǎo)入時將文件的第一行讀取為列變量名稱還是數(shù)據(jù)。7.3文本文件和電子表格文件例如,對實例7-3中創(chuàng)建的文本文件myData2.csv,如下命令及其執(zhí)行結(jié)果為:7.3文本文件和電子表格文件

數(shù)據(jù)導(dǎo)入的屬性設(shè)置(1)'FileType':文件類型。當(dāng)filename參數(shù)中不包含文件擴(kuò)展名或擴(kuò)展名不是默認(rèn)的.txt、.dat、.csv或.xls、.xlsx時,可以利用該參數(shù)確定文件類型是文本文件還是電子表格文件。對這兩種文件,該參數(shù)取值分別為'text'

'spreadsheet'。(2)'ReadVariableNames':是否將文件第一行作為變量名稱。該參數(shù)取值可以為邏輯型數(shù)據(jù)true、false或1、0。如果設(shè)置為true或者1,則表示讀取文件中的第一行作為表格中列變量的名稱。如果文件中第一行保存的不是變量名稱而是表格中的數(shù)據(jù)時,必須將該參數(shù)設(shè)為false或者0。此時,導(dǎo)入數(shù)據(jù)到表格時,列變量名稱將自動命名為'Var1',...,'VarN'。7.3文本文件和電子表格文件(3)'ReadRowNames':是否將文件第一列作為行名稱。該參數(shù)用于指示是否將文件中的第一列作為表格中的行名稱。默認(rèn)取值為false,表示文件中的第一列為數(shù)據(jù)。需要注意的是,如果ReadRowNames參數(shù)設(shè)置為true,則可以通過繼續(xù)使用RowNamesRange或RowNameColumn屬性從指定的文件中讀取行名稱。此外,如果通過前面兩個名值對參數(shù)設(shè)置需要讀取行或列變量名稱,并且讀取的名稱中含有非法標(biāo)識符,例如空格、中文字符等時,必須另外設(shè)置VariableNamingRule名值對參數(shù)為'preserve',才能將文件中的這些非法標(biāo)識符讀入MATLAB工作區(qū)。7.3文本文件和電子表格文件(4)'TextType'-導(dǎo)入文本數(shù)據(jù)的類型該參數(shù)值可以為'char'或'string',用于指定導(dǎo)入文本數(shù)據(jù)的類型。默認(rèn)為'char',表示將文本數(shù)據(jù)作為字符向量導(dǎo)入。如果參數(shù)值為'string',則表示將文本數(shù)據(jù)作為字符串?dāng)?shù)組導(dǎo)入。(5)'Delimiter':字段分隔符。該參數(shù)值只適用于文本文件,可以為字符向量、字符向量元胞數(shù)組或字符串,用于指定表格數(shù)據(jù)各列在文件中的分隔字符。(6)'EndOfLine':行尾字符。該參數(shù)值適用于文本文件,用于指示文件中一行數(shù)據(jù)的結(jié)束。參數(shù)值可以是換行符'\n'、回車符'\r'或者'\r\n',也可以是在文件中使用的其他字符,例如冒號':'。。例如,參數(shù)值'A:F'用于讀取A到F列的所有行。7.3文本文件和電子表格文件(7)'Sheet':要讀取的工作表.該參數(shù)只適用于電子表格文件,參數(shù)值值可以是正整數(shù)、字符向量或字符串,用于指定要讀取數(shù)據(jù)的工作表。(8)'Range':要讀取的工作表的范圍。該參數(shù)值可以是字符向量或字符串標(biāo)量,指定要讀取數(shù)據(jù)所在工作表中的區(qū)域范圍。該范圍是指電子表格中實際包含數(shù)據(jù)的矩形部分。讀取數(shù)據(jù)時,通過刪減不包含數(shù)據(jù)的前導(dǎo)和尾隨的行和列,會自動檢測數(shù)據(jù)所占用的范圍。可以通過使用Excel行標(biāo)志符指定開始行和結(jié)束行來標(biāo)識范圍。然后,readtable自動在指定的行中檢測使用的列范圍。例如,參數(shù)值'1:7'表示讀取第1行到第7行的所有列。也可以通過使用Excel列標(biāo)志符指定開始列和結(jié)束列來標(biāo)識范圍。例如,參數(shù)值'A:F'用于讀取A到F列的所有行。7.3文本文件和電子表格文件實例7-4數(shù)據(jù)從文本文件導(dǎo)入到表格首先在Windows中用記事本創(chuàng)建文本文件myData3.txt,并將其放在當(dāng)前文件夾中。文件內(nèi)容如圖7-6所示。之后,在命令行窗口輸入如下命令:>>T=readtable('myData3.txt')以默認(rèn)屬性讀取文件中的數(shù)據(jù),并保存到表格T中。執(zhí)行結(jié)果如下:7.3文本文件和電子表格文件實例7-5數(shù)據(jù)從電子表格文件導(dǎo)入到表格首先在Windows中用Office應(yīng)用程序創(chuàng)建電子表格文件myData4.xlsx,并將其放在當(dāng)前文件夾中。文件內(nèi)容如圖7-7所示。7.3文本文件和電子表格文件之后,執(zhí)行如下命令:>>T=readtable('myData4.xlsx','Sheet','二班','ReadRowNames',true)該命令中指定從名為“二班”的工作表中讀取數(shù)據(jù),并且文件中數(shù)據(jù)區(qū)的第一列(B列)存放有行名稱,因此設(shè)置名-值對參數(shù)ReadRowNames指定將該列數(shù)據(jù)作為表格T的行名稱。執(zhí)行結(jié)果如下:7.3文本文件和電子表格文件

數(shù)據(jù)導(dǎo)入工具在MATLAB中,從各種格式的文件中導(dǎo)入運(yùn)算處理所需要的數(shù)據(jù),這是大量遇到的操作。為了方便用戶,MATLAB中提供了專門的數(shù)據(jù)導(dǎo)入工具,可以用交互方式從電子表格文件和文本文件中預(yù)覽和導(dǎo)入數(shù)據(jù)。(1)數(shù)據(jù)導(dǎo)入工具的啟動及文件的打開在MATLAB主頁選項卡中的變量而進(jìn)組中,單擊導(dǎo)入數(shù)據(jù)按鈕,即可啟動數(shù)據(jù)導(dǎo)入工具。也可以在命令行窗口中輸入如下命令:>>uiimport(filename)啟動導(dǎo)入工具,并自動打開參數(shù)filename指定的文本或電子表格文件。7.3文本文件和電子表格文件如果用第一種方法啟動,將打開一個對話框,以便選擇需要導(dǎo)入數(shù)據(jù)的文件。默認(rèn)情況下,在對話框中將列出當(dāng)前文件夾中所有的數(shù)據(jù)文件和電子表格文件。選擇文件后,再進(jìn)入數(shù)據(jù)導(dǎo)入對話框。此外,還可以在MATLAB的當(dāng)前文件夾窗口中雙擊文件名,以打開導(dǎo)入對話框,對話框中將自動打開雙擊的文件。在數(shù)據(jù)導(dǎo)入對話框中,可以通過中間的文件標(biāo)簽選擇所需的文件,如圖7-8所示,其中同時打開了前面各例中創(chuàng)建的myData1.dat和myData1.xls文件。7.3文本文件和電子表格文件7.3文本文件和電子表格文件(2)數(shù)值型數(shù)據(jù)導(dǎo)入到數(shù)值型數(shù)組這里以圖7-8中的myData1.dat文件為例,介紹利用該工具進(jìn)行文本文件數(shù)據(jù)導(dǎo)入的方法。該文本文件中共有兩部分?jǐn)?shù)據(jù),分別是實例7-1中導(dǎo)出的數(shù)據(jù)和實例7-2中追加的數(shù)據(jù)。假設(shè)需要將實例7-1中導(dǎo)出的數(shù)據(jù)再從該文件中導(dǎo)入到數(shù)值型數(shù)組中,可以進(jìn)下如下操作:首先在數(shù)據(jù)導(dǎo)入對話框中利用鼠標(biāo)拖動選中前面兩行數(shù)據(jù)。之后,在輸出類型下拉列表中選擇數(shù)值矩陣。再雙擊myData1行,該行默認(rèn)顯示的是文本文件名(不包括擴(kuò)展名),在其中輸入新的名稱importArr。該名稱將作為導(dǎo)入數(shù)值型數(shù)組變量的名稱,出現(xiàn)在MATLAB工作區(qū)。7.3文本文件和電子表格文件最后,單擊對話框中的導(dǎo)入所選內(nèi)容按鈕,即可將所選數(shù)據(jù)導(dǎo)入到工作區(qū),得到數(shù)值型數(shù)組變量importArr。在命令行窗口執(zhí)行如下命令>>importArr可以查看該數(shù)組中的數(shù)據(jù)如下:importArr=1.00002.00003.00004.50006.70008.9000也可以在工作區(qū)窗口雙擊該變量名,在變量觀察子窗口觀察數(shù)據(jù)的內(nèi)容,如圖7-9所示。7.3文本文件和電子表格文件最后,單擊對話框中的導(dǎo)入所選內(nèi)容按鈕,即可將所選數(shù)據(jù)導(dǎo)入到工作區(qū),得到數(shù)值型數(shù)組變量importArr。在命令行窗口執(zhí)行如下命令>>importArr可以查看該數(shù)組中的數(shù)據(jù)如下:importArr=1.00002.00003.00004.50006.70008.9000也可以在工作區(qū)窗口雙擊該變量名,在變量觀察子窗口觀察數(shù)據(jù)的內(nèi)容,如圖7-9所示。7.3文本文件和電子表格文件(3)導(dǎo)入數(shù)據(jù)到元胞數(shù)組在文本文件myData1.dat文件中,后面兩行數(shù)據(jù)既有數(shù)值,也有字符串,可以導(dǎo)入到元胞數(shù)組中。為此,在圖7-8所示數(shù)據(jù)導(dǎo)入對話框中單擊選中第一列,單擊該列列標(biāo)題VarName1下面的下拉箭頭,在下拉列表中設(shè)置這一列的數(shù)據(jù)類型為文本,其他列的數(shù)據(jù)類型保持為默認(rèn)的數(shù)值類型。通過鼠標(biāo)拖動選中后面兩行,在輸出類型下拉列表中選擇元胞數(shù)組,并將導(dǎo)入數(shù)據(jù)變量命名為cellArr。單擊導(dǎo)入所選內(nèi)容按鈕,將在工作區(qū)中得到同名的元胞數(shù)組變量。7.3文本文件和電子表格文件結(jié)果如下:>>cellArrcellArr=2×5cell數(shù)組{'張三'}{[18]}{[90]}{[80]}{[85]}{'李四'}{[20]}{[80]}{[65]}{[72]}7.3文本文件和電子表格文件(4)導(dǎo)出數(shù)據(jù)到表格在例7-5中創(chuàng)建了一個電子表格文件myData4.xlsx,假設(shè)現(xiàn)在需要用導(dǎo)入工具將其內(nèi)容導(dǎo)入到MATLAB工作區(qū)。為此,首先用數(shù)據(jù)導(dǎo)入工具打開該文件,在導(dǎo)入數(shù)據(jù)對話框中的顯示如圖7-10所示。7.4低級文件操作低級文件操作指的是字節(jié)或字符級別的文件訪問操作。通過低級文件操作,可以靈活控制文件的讀寫。但是這些低級函數(shù)在使用時要求指定更為詳細(xì)的文件信息,才能確保正確訪問文件。低級文件操作涉及到文件保存數(shù)據(jù)的格式,具體分為文本模式和二進(jìn)制模式。在二進(jìn)制模式下,數(shù)據(jù)將以在計算機(jī)內(nèi)存中的實際存儲格式保存到文件,因此這種模式下數(shù)據(jù)的存儲極為高效,但是不便于用戶打開查看。例如,在Windows系統(tǒng)中打開時,將呈現(xiàn)為抽象的符號和亂碼。對格式化文本模式,數(shù)據(jù)將被轉(zhuǎn)換為字符文本再保存到文件中,因此這種文件便于用戶打開查看,但是訪問效率較低。7.4低級文件操作相對于前面的高級函數(shù)實現(xiàn)文本和數(shù)據(jù)文件的訪問,低級文件操作在執(zhí)行具體的文件操作之前,首先需要打開文件。操作訪問完畢后,必須關(guān)閉文件。在MATLAB中,實現(xiàn)文件的打開和關(guān)閉是通過兩個專門的函數(shù)來實現(xiàn)的。7.4.1文件的打開和關(guān)閉文件的打開實現(xiàn)文件打開的內(nèi)置函數(shù)是fopen(),該函數(shù)有多種調(diào)用格式,常用的基本調(diào)用格式如下:fileID=fopen(filename,permission)

其中,filename指定需要打開的文件名。執(zhí)行上述語句時,將打開該文件名指定的文件,并返回一個等于或大于3的整數(shù)作為文件標(biāo)識符,用于在程序中代表打開的文件。如果無法打開文件,則返回-1。7.4低級文件操作參數(shù)

permission

指定訪問類型(讀文件、寫文件等),可能的取值如表7-2所示。注意:當(dāng)permission參數(shù)取表中的參數(shù)值時,是以二進(jìn)制模式打開文件。要以文本模式打開文件,可以在表中各參數(shù)后面附加一個字符't'。例如'rt'將指定以文本模式打開文件并進(jìn)行讀取操作。7.4低級文件操作文件的關(guān)閉讀寫操作結(jié)束后,需要關(guān)閉文件,否則文件中的內(nèi)容可能會首先不必要的影響,或者導(dǎo)致后續(xù)操作無法正常進(jìn)行。要關(guān)閉已經(jīng)打開的文件,可以用如下語句:fclose(fileID)

其中參數(shù)fileID為前面調(diào)用fopen函數(shù)打開文件時返回的文件標(biāo)識符。7.4低級文件操作在格式化文本文件中,數(shù)據(jù)以指定的格式保存。在第二章曾介紹過如何控制將數(shù)據(jù)以指定的格式顯示在屏幕上。實際上,相關(guān)內(nèi)容也同樣適用于將數(shù)據(jù)保存到文本文件中,也就是說,這些格式字符串也可用于指定文件中數(shù)值數(shù)據(jù)的保存格式。7.4.2文本模式文件的訪問文本文件的寫操作在第二章介紹了利用fprintf將數(shù)據(jù)顯示在屏幕上(命令行窗口)。此外,該函數(shù)還有如下調(diào)用格式:fprintf(fileID,formatSpec,A1,...,An)

其中,參數(shù)fileID為文件標(biāo)識符,用于指定數(shù)據(jù)導(dǎo)出的文件。7.4低級文件操作上述語句根據(jù)指定的格式,按列順序?qū)?shù)組A1,...,An中的數(shù)據(jù)寫入到指定的文本文件。如果沒有指定文件標(biāo)識符,則將數(shù)據(jù)輸出并顯示在屏幕上。如果給定了返回參數(shù),則執(zhí)行上述語句將返回寫入文件的字節(jié)數(shù)。寫入時,根據(jù)格式字符串中以百分號開頭的格式操作符,對后面各數(shù)組按列順序?qū)⒏髟貙懭胛募髟貙懭氲母袷揭来螌?yīng)一個格式操作符。當(dāng)所有格式操作符應(yīng)用完畢,再對后續(xù)數(shù)據(jù)重復(fù)使用指定的格式操作符。7.4低級文件操作實例7-6簡單的格式化文本文件寫入操作創(chuàng)建文本文件stu.txt,并向其中寫入幾個學(xué)生的相關(guān)信息(姓名、年齡、成績等)。7.4低級文件操作實例7-7數(shù)組數(shù)據(jù)的寫入將若干組身高體重信息添加到實例7-6所創(chuàng)建的文本文件stu.txt的后面。由于題目要求是在原stu.txt文件后面追加數(shù)據(jù),因此打開文件時,設(shè)置文件的訪問類型參數(shù)為'a'。程序執(zhí)行結(jié)果如下:張三:21歲,成績:50.6。李四:20歲,成績:85.0。身高1.60m,體重80kg身高1.75m,體重85kg身高1.50m,體重62kg7.4低級文件操作實例7-8多種類型數(shù)據(jù)的寫入將若干學(xué)生的姓名、身高和體重信息寫入文件stu1.txt。7.4低級文件操作讀操作是將文件中保存的原有內(nèi)容讀入MATLAB工作區(qū)。對于格式化文本文件,可以調(diào)用fscanf()函數(shù)實現(xiàn),該函數(shù)的基本調(diào)用格式如下:[A,count]=fscanf(fileID,formatSpec,sizeA)

該語句將從文件標(biāo)識符fileID指定的文本

溫馨提示

  • 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

提交評論