問:
您好,腳本專家!如何將名稱截斷以使其最多包含 16 個字符?
-- BN
答:
您好,BN。打起精神來:我們又要開始記憶長廊之旅了。曾經(jīng)有個腳本專家上大學(xué)的時候,他在綠巨人公司找了一份暑期臨時工,任務(wù)就是在辦公室里監(jiān)督華盛頓東部的蘆筍收割。當(dāng)時,綠巨人有一個陳舊笨重的計算機(jī)系統(tǒng),用來記錄蘆筍的數(shù)量 - 然后再記錄要付給所有收割者多少錢。這個系統(tǒng)有一個問題,但是(事實上,它的問題不只一個,不過 …):它被設(shè)置為姓氏最多可使用 10 個字符,而許多工人的姓都比 10 個字符要長(例如,Myer-Ackerman)。每次數(shù)據(jù)輸入人員輸入一個比 10 個字符長的名稱時,整個系統(tǒng)都會鎖死,因此他們的工作站常常必須重新啟動。(這都是在出現(xiàn) Microsoft Windows 之前的事了。)
這個腳本專家那時根本談不上是腳本專家;事實上,他使用計算機(jī)的經(jīng)驗主要局限于在 Commodore 64 上玩 Zork。可是現(xiàn)在,作為辦公室里唯一的大學(xué)生,他被委任以修復(fù)此數(shù)據(jù)輸入程序的重任(幸運(yùn)的是,數(shù)據(jù)庫本身沒有這種限制)。他的工作就是在程序試圖將名稱保存到數(shù)據(jù)庫之前,確保截斷所有多于 10 個字符的名稱。
換句話說,這與您需要完成的任務(wù)非常相似。那時我們的腳本專家工作在 BASIC 的某個專有分支領(lǐng)域,他的解決方案就是使用 Left 函數(shù)獲取某個名稱的前 10 個字母,并以此來作為此工人的姓?,F(xiàn)在,差不多 20 年之后,想想您的問題的解決方案是什么?
復(fù)制代碼 代碼如下:
strName = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
strName = Left(strName, 16)
Wscript.Echo strName
經(jīng)典的解決方案從來不會過時,是吧?這個腳本從我們 20 年前停手的地方開始:它將一個很長的字符串(本例中為字母表)賦值給名為 strName 的變量:
strName = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
接下來是下面這行代碼:
strName = Left(strName, 16)
這行代碼將一個新值賦給變量 strName。那么這個新值是什么呢?它將是 strName 當(dāng)前值的前 16 個字符。這就是 Left 函數(shù)的作用:它從此字符串的第一個字符開始計數(shù),一直數(shù)到 16 個字符,就像這樣:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
這 16 個字符,且僅這 16 個字符,將賦給變量 strName。然后,回顯 strName 的新值,我們會得到如下字符串:
ABCDEFGHIJKLMNOP
很酷吧。此腳本很有效,即使 strName 是從 2600 個字符的 26 個字符開始效果也一樣:結(jié)果都是僅使用前 16 個字符。啊,但是如果字符串少于 16 個字符會怎么樣?例如,此腳本會失敗嗎,因為它試圖獲取 16 個字符,而根本沒有 16 個字符?
strName = "ABCD"
strName = Left(strName, 16)
Wscript.Echo strName
幸運(yùn)的是答案是否定的:此腳本會順利運(yùn)行。如果某字符串少于 16 個字符,則 Left 函數(shù)只獲取它所能找到的所有字符,并將此值賦值給 strName。在本例中,strName 等于 ABCD,此字符串中僅有的 4 個字符。
現(xiàn)在,再緬懷一下過去的美好時光。我們告訴過您當(dāng)這個腳本專家正坐在他的綠巨人辦公室里時,一條響尾蛇爬進(jìn)來嗎?這是真的。他正坐在那兒,努力思考將姓限制為 10 個字符的方法,正在這時 -- 天哪;今天的時間到了。我們必須改天再繼續(xù)講這個故事了。