vbs:返回数组元素的优雅方式?

时间:2013-11-21 18:09:13

标签: vbscript

虽然我期待一个名字和姓氏作为我正在编写的vbscript的输入,但有时数据将同时包含在姓氏字段中,或者它也可能包含中间名称。它们之间的分隔可以是逗号或空格。数据从HL7消息中提取。

我现在使用的工作方法如下:

Dim sLastName, sFirstName, sName, aName
sLastName = m.Element("PID-5-1").AsString
sFirstName = m.Element("PID-5-2").AsString

if sFirstName = "" then
  sName = fixName(sLastName)
  aName = split(sName, "*")
  sLastName = aName(0)
  sFirstName = aName(1)
end if

m.Element("PID-5-1").AsString = sLastName
m.Element("PID-5-1").AsString = sFirstName

'...rest of script, then fixName function...

Function fixName(sName)
  sName = LTrim(sName)
  sName = RTrim(sName)
  sName = replace(sName, ",", "*")
  sName = replace(sName, " ", "*")
  sName = replace(sName, "**", "*")
  fixName = sName
End Function

所以这很有效,但看起来有点不雅观。脚本已经偏长了,我必须在许多地方执行此清理。我想知道我是否有办法在fixName()中执行拆分并更直接地返回每个部分?我尝试向函数发送一个位置变量,然后根据该位置发送相应的数组元素,但是当我在fixName()进行拆分时,我得到一个“下标超出范围”的错误。

理想情况下,我希望能够在if语句中编写一些内容,如:

sFirstName = fixName(sLastName,1)
sLastName = fixName(sLastName,0)

你会怎么做,或者是我能做到的最好的希望?

1 个答案:

答案 0 :(得分:0)

要表明这样的功能“有效”:

>> Function getNamePart(s, i) : getNamePart = Split(s)(i) : End Function
>> s = "Alpha Beta Gamma"
>> WScript.Echo getNamePart(s, 0)
>> WScript.Echo getNamePart(s, 1)
>> WScript.Echo getNamePart(s, 2)
>>
Alpha
Beta
Gamma

并证明你不应该使用它 - 你的CPU会讨厌你,如果你强迫她为一个人做三次Split()(和我停止的清洁)。