2013-07-16 25 views
2

我有一个简单的脚本,它需要两个字符串并进行比较。第一个在最后有一个空格,第二个没有空格。修剪功能不会删除字符串末尾的空格,同时比较vbs中的两个字符串

Function compare(str1,str2) 
dim a 
If strComp(trim(str1),trim(str2))=0 Then 
    msgbox "OK" 
    a=1 
Else 
    msgbox "KO" 
    a=0 
End If  

compare=a 

End Function 

我以这种方式使用此功能:

s1=  SUCCESSFULLY CONNECTED 
s2=  SUCCESSFULLY CONNECTED 
result=compare(s1,s2) 

s1和s2之间的区别是,S1用一个空格结束,而S2不具有在端部的任何空间。这就是为什么我使用修剪功能忽略该空间。 尽管如此,对于s1和s2,我总是在对话框中收到消息“KO”。我甚至改变了这种情况

If trim(str1)=trim(str2) Then 

但弹出仍然返回“KO”。这是一个美妙的情况!

请,我厌倦了这一点,并希望你帮助理解这种情况。 预先感谢您

回答

5

VBScript的Trim删除空格/空白,而不是其他种类的空白。你需要一个RegExp来清理字符串中的前导/尾随vbTab,vbCrLf,......当你处理.Run或者。 Exec的。

演示片段:

>> s1 = "abc" & vbCrLf & " " 
>> s2 = "abc" 
>> WScript.Echo Len(s1), Len(s2) 
>> set r = New RegExp 
>> r.Global = True 
>> r.Pattern = "^\s+|\s+$" 
>> s1 = r.Replace(s1, "") 
>> s2 = r.Replace(s2, "") 
>> WScript.Echo Len(s1), Len(s2) 
>> WScript.Echo CStr(s1 = s2) 
>> 
6 3 
3 3 
True 
+0

请问,我该如何获得一个正则表达式,它只在字符串结尾删除空格,同时保持强大的比较?谢谢 – new

+0

@新 - 请参阅演示。 –

+0

太棒了!非常感谢你,你让我打破僵局。谢谢 – new

1

你可能想试试这个:

Dim str1, str2 
str1 = "help" 
str2 = "Me" 
WScript.Echo str1 & str2 
str1 = str1 & vbTab 
WScript.Echo str1 & str2 
WScript.Echo len(str1) & " " & len(str2) 
If Right(str1,1) = vbTab Then 
    WScript.Echo left(str1,Len(str1) - 1) & str2 
Else 
    WScript.echo "Oops" 
End If 

注意,尾随vbTab加入str1现在被移除的最后一个字符去掉简单。

例如,如果要保留内部VbTabs,如果要使用它们将字符串拆分为数组,那么这很有用。