嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎使用 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

還有,別忘了瞧瞧全新經過改良的嗨,Scripting Guy!過往文件

今天的問題:如何確定由 Split 函式所產生的項目數?


如何確定由 Split 函式所產生的項目數?

嗨,Scripting Guy!我知道可以用 Split 函式將一行分割成個別的項目。但是我要如何知道最後會有幾個「分割部分」;也就是說,我會從單一行中產生多少個個別項目?

-- SA

SA,您好。對於寫指令碼的菜鳥 (或是從來沒有用過 Split 函式的人) 來說,讓我們先從簡短的教學課程開始。如同 SA 所提的,Split 函式可讓您將一個包含一個或是多個項目的文字字串 (個別的項目由常見的分隔符號隔開,像是逗號) 建立為個別項目陣列。例如,假設我們有這行文字:
Dopey,Sneezy,Doc,Grumpy,Sleepy,Happy,Bashful

藉由執行 Split 函式並告知該函式逗號是我們的分隔符號 (也就是隔開個別項目的字元),可以很輕鬆地將此字串分隔成它的構成部分:

Dopey
Sneezy
Doc
Grumpy
Sleepy
Happy
Bashful

總之它是個非常好用的小函式,尤其是在處理檔案路徑、Active Directory AdsPaths,以及任何其他部分通常與整體同等重要的情況的時候 (例如,Split 函式可以將 C:\Scripts\MyScript.vbs 這樣的檔案路徑,分隔出磁碟機、資料夾以及檔案名稱)。

是都沒什麼問題,只差 SA 是想知道在個別文字字串中有幾個項目;例如,我們不想要知道七個小矮人的名字,只想知道有七個小矮人列在字串中。


附註:冒著吹牛的危險,我們要說 Scripting Guy (經常被誤認為七個小矮人) 不用查就知道所有七個小矮人的名字。以下是給對小典故有興趣的迷:Dopey (最常被誤認為 Scripting Guy 的小矮人) 原本的名字是 Deafy。很怪,但是是真的!


那我們該如何確定字串中所找到項目數呢?其實只要使用一個像這樣的簡單小指令碼:

strNames = "Dopey,Sneezy,Doc,Grumpy,Sleepy,Happy,Bashful"
arrNames = Split(strNames, ",")
Wscript.Echo Ubound(arrNames) + 1

在第 1 行,我們將七個小矮人的名字 (每個名字之間用逗號分隔) 指定給一個名為 strNames 的變數。在第 2 行,我們呼叫 Split 函式,然後指明分隔符號為逗號,所以您才會看到 "," 被當作第二個參數傳遞到 Split,而第一個參數當然就是我們希望 Split 處理的字串。這會回傳一個名為 arrNames 的陣列,陣列中的每個項目都代表每個小矮人的名字 (順道一提,arrNames 這個名稱純粹是任意定的;您想要使用什麼變數名稱都可以)。

這將我們帶到第 3 行:

Wscript.Echo Ubound(arrNames) + 1

我們在這裡所做的就是回應陣列的 Ubound (上限) 值再加上 1,這是什麼意思呢?意思是,在陣列中的每個項目都會自動指定一個索引編號:第一個項目指定的索引編號為 0,第二個項目指定的索引編號為 1,然後以此類推。在記憶體中,我們的陣列看起來像這樣:


索引編號 項目
0 Dopey
1 Sneezy
2 Doc
3 Grumpy
4 Sleepy
5 Happy
6 Bashful


Ubound 函式固定會傳回陣列中最後一個項目的索引編號;在此例中,Ubound 傳迴的號碼是 6。Ubound 值固定會比陣列中的項目數少一,記住陣列中實際上有 7 個項目。之所以會如此,是因為陣列中的第一個項目指定的索引編號為 0;如果第一個項目為編號 1,那 Ubound 值也會表示陣列中的項目總數。但是沒有關係:我們只要將 Ubound 值加上 1,就可以得到項目總數了。結案!

喔,另外還有一件事:沒問題,我們會強烈地勸阻 Peter 在他下次網路廣播中別唱與指令碼相關的「Someday My Prince Will Come」(我的王子總有一天會來到) 版本。我們向您保證。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首