Function Reference


_WinAPI_CompareString

Compares two character strings for a specified locale

#include <WinAPILocale.au3>
_WinAPI_CompareString ( $iLCID, $sString1, $sString2 [, $iFlags = 0] )

Parameters

$iLCID The locale identifier (LCID) that specifies the locale or one of the following predefined values:
    $LOCALE_INVARIANT
    $LOCALE_SYSTEM_DEFAULT
    $LOCALE_USER_DEFAULT
Windows Vista or later
    $LOCALE_CUSTOM_DEFAULT
    $LOCALE_CUSTOM_UI_DEFAULT
    $LOCALE_CUSTOM_UNSPECIFIED
$sString1 The first string to compare.
$sString2 The second string to compare.
$iFlags [optional] The flags that indicate how the function compares the two strings. This parameter can be 0 or combination of the following values:
    $LINGUISTIC_IGNORECASE
    $LINGUISTIC_IGNOREDIACRITIC

    $NORM_IGNORECASE
    $NORM_IGNOREKANATYPE
    $NORM_IGNORENONSPACE
    $NORM_IGNORESYMBOLS
    $NORM_IGNOREWIDTH
    $NORM_LINGUISTIC_CASING

    $SORT_STRINGSORT

Windows 7 or later
    $SORT_DIGITSASNUMBERS

Return Value

Success: The one of the following values that indicates a result of the comparison strings.
    $CSTR_LESS_THAN
    $CSTR_EQUAL
    $CSTR_GREATER_THAN
Failure: 0, call _WinAPI_GetLastError() to get extended error information.

Remarks

Normally, for case-insensitive comparisons, _WinAPI_CompareString() maps the lowercase "i" to the uppercase "I", even when the locale is Turkish or Azeri.
The $NORM_LINGUISTIC_CASING flag overrides this behavior for Turkish or Azeri.
If this flag is specified in conjunction with Turkish or Azeri, LATIN SMALL LETTER DOTLESS I (U+0131) is the lowercase form of LATIN CAPITAL LETTER I (U+0049) and LATIN SMALL LETTER I (U+0069) is the lowercase form of LATIN CAPITAL LETTER I WITH DOT ABOVE (U+0130).

See Also

Search CompareString in MSDN Library.

Example

#include <APILocaleConstants.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPILocale.au3>
#include <WinAPISys.au3>

If Number(_WinAPI_GetVersion()) < 6.1 Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Require Windows 7 or later.')
    Exit
EndIf

; Create array of strings ("Item*")
Local $aItem[100]
For $i = 0 To UBound($aItem) - 1
    $aItem[$i] = 'Item' & Random(0, 100, 1)
Next

_ArrayDisplay($aItem, 'Initial array')

; Simple array sorting
_ArraySort($aItem)

_ArrayDisplay($aItem, 'Simple sorting')

; Sort array (bubble sort) ignoring case sensitive and according to the digits
Local $sTemp
For $i = 0 To UBound($aItem) - 2
    For $j = $i + 1 To UBound($aItem) - 1
        Switch _WinAPI_CompareString($LOCALE_INVARIANT, $aItem[$i], $aItem[$j], BitOR($NORM_IGNORECASE, $SORT_DIGITSASNUMBERS))
            Case $CSTR_GREATER_THAN
                $sTemp = $aItem[$i]
                $aItem[$i] = $aItem[$j]
                $aItem[$j] = $sTemp
            Case Else

        EndSwitch
    Next
Next

_ArrayDisplay($aItem, 'bubble sort case insensitive')