2013-07-16 51 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,如果要使用它們將字符串拆分爲數組,那麼這很有用。