Vba 使用vbTextCompare时StrComp的意外结果 目标

Vba 使用vbTextCompare时StrComp的意外结果 目标,vba,vbscript,qtp,hp-uft,Vba,Vbscript,Qtp,Hp Uft,按字典顺序比较两个字符串,忽略大小写 使用StrComp的可能解决方案 考虑以下脚本: val1 = "test9999" val2 = "TEST_59895" LexCompare val1, val2, vbBinaryCompare LexCompare LCase(val1), LCase(val2), vbBinaryCompare LexCompare UCase(val1), UCase(val2), vbBinaryCompare L

按字典顺序比较两个字符串,忽略大小写

使用StrComp的可能解决方案 考虑以下脚本:

val1 = "test9999"
val2 = "TEST_59895"

LexCompare val1, val2, vbBinaryCompare
LexCompare LCase(val1), LCase(val2), vbBinaryCompare
LexCompare UCase(val1), UCase(val2), vbBinaryCompare

LexCompare val1, val2, vbTextCompare
LexCompare LCase(val1), LCase(val2), vbTextCompare
LexCompare UCase(val1), UCase(val2), vbTextCompare

WScript.Echo "ANSI values: '9'=" & Asc("9") & ", '_'=" & Asc("_")

Sub LexCompare(string1, string2, compareType)
    result = ""
    Select Case StrComp(string1, string2, compareType)
        Case -1
            result = "is smaller than"
        Case 0
            result = "is identical to"
        Case 1
            result = "is greater than"
    End Select
    WScript.Echo "'" & string1 & "' " & result & " '" & string2 & "', compareType: " & compareType
End Sub
输出:

'test9999' is greater than 'TEST_59895', compareType: 0
'test9999' is smaller than 'test_59895', compareType: 0
'TEST9999' is smaller than 'TEST_59895', compareType: 0
'test9999' is greater than 'TEST_59895', compareType: 1
'test9999' is greater than 'test_59895', compareType: 1
'TEST9999' is greater than 'TEST_59895', compareType: 1
ANSI values: '9'=57, '_'=95
对我来说,“test9999”应该比“test59895”小,忽略大小写。为什么?因为“9”比“_”小

问题
  • 我错过了什么
  • 我理解使用
    vbbinarycare
    时的结果,并将使用
    LCase
    -ing或
    UCase
    -ing这两个变量作为解决方法
  • 但是为什么使用
    vbTextCompare
    ,StrComp不能得出相同的结论呢?我以为
    vbTextCompare
    的定义就是比较忽略情况

vbTextCompare的作用是将
选项Compare Text
的规则仅应用于该比较

您可以在中看到,
选项Compare Text
不依赖于ANSI值,而是依赖于

不区分大小写的文本排序顺序由系统的区域设置决定


您的区域设置可以指定任何排序顺序,因此它恰好适用于。

谢谢!也许我应该更频繁地删除查询中的“VBS”。但是,我无法找到区域设置(在字符级别)对排序顺序的确切影响。有什么资源可以解释这一点吗?@BenjaminThiel问题是,它不应该打扰你它到底是如何发生的-当用户查看排序列表时,系统会以一种“感觉自然”的方式对字符串进行排序,而这样做的规则可能相当复杂。如果你想很好地控制什么被分类在哪里,你可能应该实现你自己的比较功能。至于文档,你可以从开始,并按照链接,例如到。谢谢。如果我的任务不是测试某些值是否按升序/降序排列,我就不会麻烦了。无法访问我正在测试的应用程序的代码会使它更加复杂。。。