虽然我期待一个名字和姓氏作为我正在编写的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)
你会怎么做,或者是我能做到的最好的希望?
答案 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()(和我停止的清洁)。