Share via


嗨,Scripting Guy!

嗨,Scripting Guy!

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

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

今天的問題:如何將人名轉成正確的英文大小寫?


如何將人名轉成正確的英文大小寫?

嗨,Scripting Guy!我寫了一個指令碼協助支援工程師建立使用者帳號。但是工程師有時候一忙起來就把人名輸入成 kEn MYEr。請問該如何將人名轉成正確的英文大小寫 (例如 Ken Myer)?

-- LC

LC,您好。您知道嗎?這是您問對人了。不管大小事,通常非到毫無選擇,否則不推薦讀者找 Scripting Guy,除非是修改英文人名的大小寫,也就是人名的第一個字母是大寫,其他都是小寫。這點我們絕對可以辦到。

 

附註:請不要懷疑,每個人至少都有一個優點吧?雖然很希望有辦法投出快速球封殺 Albert Pujols,或是贏得奧運金牌,但是有辦法將人名轉成適當的大小寫也不失為一個優點。


先警告讀者待會要執行的指令碼有點難懂,因為 VBScript (不同於 Visual Basic) 本身並沒有將字串轉成正確大小寫的內建方法。沒關係,反正太簡單就不叫做挑戰了:

strFirstName = "kEn"
strLastName = "MYEr"
intFirstName = Len(strFirstName)
strFirstLetter = UCase(Left(strFirstName, 1))
strRemainingLetters = LCase(Right(strFirstName, intFirstName - 1))
strFirstName = strFirstLetter & strRemainingLetters
intLastName = Len(strLastName)
strFirstLetter = UCase(Left(strLastName, 1))
strRemainingLetters = LCase(Right(strLastName, intLastName - 1))
strLastName = strFirstLetter & strRemainingLetters
Wscript.Echo strFirstName, strLastName

讓我們引領讀者一步步瞭解:首先把 kEnMYEr 這兩個值分別指派給 strFirstName 和 strLastName 變數,而這正是要轉換大小寫的名字。

 

附註:我們很清楚最後一句讀者鐵定知道了,反正說也說了,自己去琢磨吧!


反正先到先贏,我們就先來處理使用者的名字吧 (英文的 first name 通常放在前面)!使用 Len 函數判斷字串 kEn 內的英文字母有幾個 (猜對了,kEn 有 3 個字母):

intFirstName = Len(strFirstName)

接下來只要抓取名字的第一個英文字母將它轉換成大寫,方法是合併一組函數,利用 Left 函數取得第一個字母,也就是字串左邊的第一個字母 (1 代表要擷取的字母有幾個):

Left(strLastName, 1)

這樣就取得字母 k。然後使用 UCase 函數將字母轉成大寫:

UCase(Left(strLastName, 1))

這樣 strFirstLetter 裡就有大寫字母 K。這麼多事情只要這短短一行指令碼就可以做到:

strFirstLetter = UCase(Left(strLastName, 1))

看到它是怎麼運作的吧?好,接下來要將名稱內所有剩餘的字母轉成小寫,也就是這一行程式碼所進行的動作:

strRemainingLetters = LCase(Right(strLastName, intLastName - 1))

沒錯,看起來真的很複雜。讓我們為各位看倌一一拆解。它的目的是取得名字裡的所有字母 (除了第一個)。方法是使用 Right 函數,從右邊開始取得 x 個字母。x 代表什麼?本例中 x 代表字串字母總數減 1 (也就是 3 – 1 = 2)。答案是 En (也就是我們要的),K 已經被拿掉了。

有道理嗎?下面就是剛才說明的動作所執行的程式碼:

Right(strLastName, intLastName - 1)

現在該拿這些字母怎麼辦呢?很簡單,這一次使用 LCase 函數把每個字母轉成小寫:

LCase(Right(strLastName, intLastName - 1))

然後把這些小寫字母存放在 strRemainingLetters 變數內:

strRemainingLetters = LCase(Right(strLastName, intLastName - 1))

沒錯,的確是稍嫌複雜。您只要把程式演練一兩回,應該就會懂了。您也可以將指令碼稍加修改,先處理 Left/Right 的部分,然後才呼叫 UCase 或 LCase:

intFirstName = Len(strFirstName)

strFirstLetter = Left(strFirstName, 1) strFirstLetter = UCase(strFirstLetter)

strRemainingLetters = Right(strFirstName, intFirstName - 1) strRemainingLetters = LCase(strRemainingLetters)

如果逐步解說對您有用,那就繼續依樣畫葫蘆吧。

首先來重新組合使用者的名字。方法是使用 strFirstLetter 變數 (裡頭包含使用者名字的大寫字母),把它和 strRemainingLetters 接在一塊 (裡頭包含使用者名字剩餘的小寫字母)。

strFirstName = strFirstLetter & strRemainingLetters

針對姓氏重複一樣的步驟,回應使用者的「新」名字和姓氏。

Wscript.Echo strFirstName, strLastName

得到的結果是什麼呢?

Ken Myer

漂亮吧?這樣就大功告成!


如需詳細資訊

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

 

回到頁首 回到頁首