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