点击或拖拽改变大小

Functions.SetCollation 方法

X#
返回并可选择更改设置,以确定用于字符串比较的内部排序例程。

命名空间:  XSharp.Core
程序集:  XSharp.Core (在 XSharp.Core.dll 中) 版本:2.22 GA
语法
 FUNCTION SetCollation() AS STRING
查看代码

返回值

类型:String
如果未指定 symNewSetting,SetCollation() 返回当前设置。
如果指定了 symNewSetting,则返回先前的设置。
备注
SetCollation() 设置用于所有字符串比较的内部排序例程,除了使用 == 运算符的比较。请注意,这包括排序和索引操作,以及使用各种运算符的程序化字符串比较。 注意:更改 SetInternational() 会自动更改 SetCollation(),以使这两个设置相同。 此设置允许 X# 在不同的排序模式下操作。
#Clipper 模式提供了与 CA-Clipper 应用程序的兼容性,并使用在国家模块(VO28NAT.DLL)中定义的排序例程。
#Windows 模式使用 Windows 提供的字符串比较服务,自动处理外文字符集。 因此,如果应用程序使用 #Clipper 排序模式,它将在所有机器上表现相同。因此,要实现基于英语以外语言的不同排序序列,您将需要一个针对所需语言的专用 VO28NAT.DLL 版本。另一方面,如果应用程序使用 #Windows 排序模式,它将根据控制面板中的国际设置定义的语言,在不同的机器上表现不同。在这种情况下,Windows 支持的所有语言也将受到您的应用程序的支持,包括从右到左的语言,如希伯来语和阿拉伯语,以及双字节语言,如中文、日文和韩文。 注意:操作在字节级别的字符串函数(如 Substr() 和 SLen())在处理双字节字符时将无法正常工作。 常规拉丁字符集的排序序列在 #Clipper 和 #Windows 之间是不同的。
对于 #Clipper: A < B < C < ... < Z < a < b < c < ... < z 对于 #Windows: A < a < B < b < C < c < ... < Z < z 警告! SetCollation() 决定了索引文件及其内部顺序的创建和维护方式。
在同一顺序中尝试使用不同的排序模式将会损坏该顺序。
备注
Core 方言总是按照 Unicode 规则进行比较。
其他方言使用 SetCollation 定义的规则进行字符串比较。有 4 种可能的值:
参数描述
Windows (默认) 这使用正常的 Windows Ansi 比较机制,Visual Objects 也使用这个。 这意味着来自 .Net 的 Unicode 字符首先被转换为 Ansi,然后按照 Ansi 比较规则进行比较。
在大多数情况下,不在 Ansi 代码页中的字符会被翻译为问号 '?',因此都被视为相等。
如果你想进行真正的 Unicode 比较,你需要 Unicode 值来设置 SetCollation。
Clipper 这使用的是与 Visual Objects 国家模块中的字符比较表相同的字符串比较表。
Unicode 字符串中的每个字符首先使用运行时状态的 DosCodePage 转换为 OEM 代码页中的字符。 然后,结果的 OEM 字符在运行时 dll 的 256 字符权重表中查找。
你可以通过使用 SetNatDLL() 切换到不同的表。
Unicode 这使用的是普通的 Unicode String.Compare 例程进行字符串比较。
Ordinal 这使用的是普通的 Ordinal String.Compare 例程。这是最快的。
示例
此示例基于标准应用程序的 Start() 方法,检查当前 Windows 语言配置,仅在设置为使用法语排序时允许应用程序运行:
X#
 1METHOD Start() CLASS App
 2    LOCAL oWindow AS Window
 3    LOCAL nLen, nBufSize := 10 AS SHORTINT
 4    LOCAL pszLang := Psz(Space(nBufSize)) AS PSZ
 5    // 初始化 StandardShellWindow
 6    Enable3DControls()
 7    oWindow := StandardShellWindow{SELF}
 8    oWindow:Show()
 9    // 从 WIN.INI 检索语言排序设置
10    nLen := GetProfileString("intl", "sLanguage",    ;
11        "", pszLang, nBufSize)
X#
 1// 仅在系统配置为使用
 2// 法语 Windows 排序时运行应用程序
 3IF (Left(String(_CAST, pszLang), nLen) != "fra")
 4    // 语言不正确,给出错误并退出。
 5    TextBox{oWindow, "系统配置",    ;
 6        "要运行此应用程序,您必须在控制面板的国际部分将语言设置为 " +    ;
 7        "'法语'。"}:Show()
 8ELSE
 9    // 运行应用程序
10    SELF:Exec()
11ENDIF
参见