【问题标题】:Unexpected result of StrComp when using vbTextCompare使用 vbTextCompare 时 StrComp 的意外结果
【发布时间】:2015-05-19 08:21:57
【问题描述】:

目标

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

使用 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”在字典上应该小于“TEST_59895”,忽略大小写。为什么?因为'9'小于'_'。

问题

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

【问题讨论】:

    标签: vba vbscript qtp hp-uft


    【解决方案1】:

    vbTextCompare 的效果是将Option Compare Text 的规则应用到那一次比较。

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

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

    您的语言环境可以规定任何排序顺序,所以它恰好是 sort digits after underscores

    【讨论】:

    • 谢谢!也许我应该更频繁地从我的查询中删除“VBS”。但是,我找不到语言环境如何确切地(在字符级别)影响排序顺序。是否有任何资源可以说明这一点?
    • @BenjaminThiel 关键是它不应该打扰你它究竟是如何发生的——系统以一种让用户在查看排序列表时“感觉自然”的方式对字符串进行排序,并且这样做的规则可能相当复杂。如果您想精确控制在哪里排序,您可能应该实现自己的比较函数。
    • 至于文档,您可以从CompareString function 开始并点击链接,例如到Handling Sorting in Your Applications
    • 谢谢。如果某些值按升序/降序排列,如果不是我的测试任务,我不会打扰。无法访问我正在测试的应用程序的代码使其变得更加复杂......
    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多