(translator=Szuwei, ChineseSource=Szuwei-20020510-12\sscanf.html, EnglishSource=c:\matlabr12\help\techdoc\ref\sscanf.html)
MATLAB Function Reference    
sscanf

藉由格式控制讀入字串。

Syntax

Description

A = sscanf(s,format) 從MATLAB 字串變數s,讀入資料,並且依照給定的format字串轉換,並將結果傳回到陣列Aformat是一個字串給定了資料被讀取的格式。請參考 "Remarks" 獲得更多細節。 sscanffscanf是一樣的,除了本函數是從MATLAB字串變數讀取資料,而不是從檔案。

A = sscanf(s,format,size) 讀入size參數所給定的資料量並將讀入的資料依照給定的字串format做轉換。size是一個參數,用來定義多少資料將被讀取。合法的選項有

n
讀取n個元素到行向量之中。
inf
讀到檔案結束才停止,並將結果放到一個和檔案內容有一樣多〔元素數量〕的行向量當中。
[m,n]
讀取足夠的元素去填滿一個m-乘-n的矩陣,以行的順序填入(以行為單位)。n可以是Inf,但是m不行。

如果一個矩陣A只使用轉換字元得到,同時size不是以[M,N]的格式給定,則將會以一個列向量的型式傳回。

sscanf和他C語言的同名函數scanf()以及fscanf()在某些重要方面是不同的。本函數已被向量化(vectorized),也才能夠傳回矩陣型態的參數。字串format將會被本函數循環使用,直到整個檔案都被讀盡,或著是size所設定要讀取的資料量已滿(到)。

[A,count,errmsg,nextindex] = sscanf(...) 從MATLAB的字串變數s讀取資料,並且根據給定的字串format去轉換資料,同時將資料轉換的結果傳回到矩陣A。count是一個選擇性的輸出參數,這個參數主要是傳回函數成功讀取的元素個數有多少。errmsg也是一個選擇性的輸出參數,當錯誤發生,或是遇到沒有錯誤發生的空(empty)陣列時,這個參處傳回錯誤訊息字串。nextindex也是一個選擇性輸出的參數,給定了字串s中最後一個被掃描讀取走的位置的下一個的位置。

Remarks

當MATLAB讀取一個給定的檔案,MATLAB會企圖比對檔案中的資料和格式字串。如果比對成功,資料會以行順序的方式被寫到矩陣。如果只有部分比對成功,則只有比對成功的部分會被寫入到矩陣,同時讀入的動作也會停止。

format字串包含了平常的字元,也包含了轉換的說明。轉換說明指出了將會被進行比對的資料其所屬形式,同時包含了字元%, 欄位寬度和轉換的字元,我們將之整理呈現如下:

增加一個或更多的這種字元在%和轉換字元之間。

星號 (*)
如果該值被比對成功,將不會被存入輸出的矩陣,會被省略。
數字字串
最大欄位值。
一個英文字母
收到物件的大小;舉例來說,h是短尺寸,在%hd表示短整數,或是l是長尺寸,在%ld表示長整數,或是%lg指定倍精準度浮點數。

以下為合法轉換字元:

%c
一序列的字元:欄位寬度(Field Width)給定了字數。
%d
十進位數字
%e, %f, %g
浮點數
%i
有正負號的整數。
%o
有正負號的八進為整數。
%s
一串無白空白(non-whitespace)的字元。
%u
有正負號的十進為整數。
%x
有正負號的十六進位整數
[...]
一序列的字元 (scanlist)

如果使用%s, 則讀取元素的動作將會使用到許多MATLAB矩陣元素,因為每一個元素只存放一個字元(補充:是一個元素只放一個字元,不是一串字串。)。使用%c去讀取空白字元,或是使用%s去忽略所有的白空白(white space)。

將字元和數字混合的轉換說明將造成矩陣成為數字型態的矩陣,同時MATLAB以一個矩陣元素存放一個字元的形式來存放資料,而任何字元將會以其ASCII值來顯示。

如果想要獲得更多有關於格式化字串的資料,請參考scanf()函數和fscanf()函數在C語言參考手冊中的使用方法。

Examples

下列陳述式

建立一個有兩個元素的向量,其中包含e和pi的不精準逼近值。

See Also

eval, sprintf, textread


 squeeze stairs