用vbs将名称转换为正确的大小写的代码
所属分类:
脚本专栏 / vbs
阅读数:
1032
收藏 0赞 0分享
问:
您好,脚本专家!我有一个脚本,我的帮助支持人员用它来创建用户帐户。不幸的是,有时这些帮助支持人员在忙乱中会键入类似这样的名称:kEn MYEr。如何将名称转换为正确的大小写(即 Ken Myer)呢?
-- LC
答:
您好,LC。您知道吗:您真幸运。谈到正确行事,脚本专家通常便是您最不愿意找的人。事实上,就我们所知,只有一种情况例外,那便是将名称转换为正确的大小写,即,使名称中的首字母大写,而使其余字母小写。这一点我们还是可以办到的。
注意:嘿,每个人都得能够做点什么。尽管我们更希望能投出超过 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
让我们逐步向您介绍该过程。一开始,我们只是将值 kEn 和 MYEr 赋给了名为 strFirstName 和 strLastName 的变量;不用说,这便是我们需要转换的两个名称。
注意:是的,尽管不用说,不过我们还是说了。自己去想吧。
先来看看首先应该如何入手,我们是以处理用户的名字开始的。为此,我们使用 Len 函数确定字符串 kEn 中的字母数(对了:kEn 中有三个字母):
intFirstName = Len(strFirstName)
接下来,我们仅需要获取该名称的第一个字母,并将其转换为大写。这一点是通过一对函数组合来实现的。我们使用 Left 函数取得首字母,也就是,从该字符串的左边取得一个字母(倘若您对此感到好奇,那么 1 就表示我们要获取的字母数):
Left(strLastName, 1)
这样,我们就会得到字母 k。然后,我们使用 UCase 函数将该字母转换为大写:
UCase(Left(strLastName, 1))
现在我们有了大写字母 K,我们将其存储在一个名为 strFirstLetter 的变量中。这是太罗嗦了,不过所有这些步骤却是通过一行代码来执行的:
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
确实漂亮极了。而且还做得恰如其分!
VBS实现将Excel表格保存为txt文本
希望能够找到个能给excel表另存为TXT的VBS代码,虽然另存为可以选择,但还是需要直接VBS执行这一步另存为TXT格式的,应该如何写代码呢
收藏 0赞 0分享
用VBS修改(设置)系统时间和日期的代码
用 VBS 把系统的时间修改到2038年1月19日3时14分07秒之后,这样某些依赖于 Unix 时间戳的程序就会出问题。那么怎样用 VBS 修改系统的时间呢
收藏 0赞 0分享
VBS For Next循环的一些细节
For Next 语句是 VBS 中常用的循环语句,你可能已经用过无数次 For Next 循环,但是你是否注意过它的一些细节呢
收藏 0赞 0分享
VBS For Next循环的陷阱分享
在《VBS For Next循环的一些细节》中说到了 For Next 循环的控制变量仅仅在循环开始前求值一次,但是其中存在一处陷阱
收藏 0赞 0分享
查看更多