Rubrik: Zeichenketten | 22.03.05 |
CompareString-Funktion Diese Funktion vergleicht zwei Variablen miteinander, wobei einige Optionen festgelegt werden können. | ||
Betriebssystem: Win95, Win98, WinNT 3.1, Win2000, WinME | Views: 10.373 |
Deklaration:
Declare Function CompareString Lib "kernel32.dll" _ Alias "CompareStringA" ( _ ByVal Locale As Long, _ ByVal dwCmpFlags As Long, _ ByVal lpString1 As String, _ ByVal cchCount1 As Long, _ ByVal lpString2 As String, _ ByVal cchCount2 As Long) As Long
Beschreibung:
Diese Funktion vergleicht zwei Variablen miteinander, wobei einige Optionen festgelegt werden können.
Parameter:
Locale | Erwartet eine Sprach-ID oder eine der beiden Standardkonstanten. |
dwCmpFlags | Erwartet eine oder eine Kombination aus mehreren der "dwCmpFlags-Konstanten, die weitere Optionen für die Sortierung der beiden Strings festlegen. |
lpString1 | Erwartet den ersten der beiden Strings, die miteinander verglichen werden sollen. |
cchCount1 | Erwartet die Anzahl der Zeichen, die der erste String lang ist. |
lpString2 | Erwartet den zweiten der beiden Strings, die miteinander verglichen werden sollen. |
cchCount2 | Erwartet die Anzahl der Zeichen, die der zweite String lang ist. |
Locale Konstanten:
Const LOCALE_SYSTEM_DEFAULT = &H400 ' Standard-Systemsprache Const LOCALE_USER_DEFAULT = &H800 ' Standard-Benutzersprache
Rückgabewert:
Ist die Funktion erfolgreich, so wird eine der Rückgabekonstanten zurückgegeben die darüber informieren, in welchem Verhältnis der ersteString zu dem zweiten steht. Andernfalls wird der Wert "0" zurückgegeben. Für erweiterteFehlerinformationen rufen Sie die GetLastError-Funktion auf.
Const CSTR_LESS_THAN = 1 ' Kleiner als Const CSTR_EQUAL = 2 ' Gleich Const CSTR_GREATER_THAN = 3 ' Größer als
Beispiel:
Private Declare Function lstrcmpi Lib "kernel32.dll" _ Alias "lstrcmpiA" ( _ ByVal lpString1 As String, _ ByVal lpString2 As String) As Long Private Declare Function lstrcmp Lib "kernel32.dll" _ Alias "lstrcmpA" ( _ ByVal lpString1 As String, _ ByVal lpString2 As String) As Long Private Declare Function CompareString Lib "kernel32.dll" _ Alias "CompareStringA" ( _ ByVal Locale As Long, _ ByVal dwCmpFlags As Long, _ ByVal lpString1 As String, _ ByVal cchCount1 As Long, _ ByVal lpString2 As String, _ ByVal cchCount2 As Long) As Long ' CompareString Rückgabe-Konstanten Private Const CSTR_LESS_THAN = 1 ' Kleiner als Private Const CSTR_EQUAL = 2 ' Gleich Private Const CSTR_GREATER_THAN = 3 ' Größer als ' CompareString Locale-Konstanten Private Const LOCALE_SYSTEM_DEFAULT = &H400 ' Standard-Systemsprache Private Const LOCALE_USER_DEFAULT = &H800 ' Standard-Benutzersprache ' CompareString dwCmpFlags-Konstanten Private Const NORM_IGNORECASE = &H1 ' Groß und Kleinschreibung nicht beachten Private Const NORM_IGNOREKANATYPE = &H10000 ' Für Japanischen Zeichensatz. ' Macht keine Unterschiede zwischen Hiragana und Katakana Private Const NORM_IGNORENONSPACE = &H2 ' Ignoriert Leerzeichen Private Const NORM_IGNORESYMBOLS = &H4 ' Ignoriert Sonderzeichen Private Const NORM_IGNOREWIDTH = &H20000 ' Ignoriert den Unterschied ' zwischen Unicode und normalen Strings Private Const SORT_STRINGSORT = &H1000 ' Benutzt eine String-Sort-Methode ' anstatt einer Wort Sortierung. In einer String-Sort-Sortierung kommen ' Sonderzeichen wie "?,#;*..." vor den Buchstaben
' Listbox mit zu sortierenden Einträgen füllen Private Sub Form_Load() With List1 .Clear .AddItem "Diese Liste" .AddItem "wird jetzt" .AddItem "GROSS" .AddItem "gross" .AddItem "auf verschiedenste" .AddItem "Weise Sortiert." .AddItem "Ö Test Ö" .AddItem "? Test2 ?" End With End Sub
' Liste sortieren, Groß- und Kleinschreibung spielt dabei keinerlei Rolle Private Sub Command1_Click() Dim Retval As Long, i As Integer, j As Integer, TmpStr As String With List1 For i = 0 To .ListCount - 1 For j = i + 1 To .ListCount - 1 ' Strings vergleichen und eventuell verschieben Retval = lstrcmpi(.List(i), .List(j)) If Retval <= 0 Then ' Stellung halten Else ' Zurückversetzen in der Liste TmpStr = .List(j) .RemoveItem j .AddItem TmpStr, i End If Next j Next i End With End Sub
' Liste sortieren, Groß- und Kleinschreibung wird beachtet Private Sub Command2_Click() Dim Retval As Long, i As Integer, j As Integer, TmpStr As String With List1 For i = 0 To .ListCount - 1 For j = i + 1 To .ListCount - 1 ' Strings vergleichen und eventuell verschieben Retval = lstrcmp(.List(i), .List(j)) If Retval <= 0 Then ' Stellung halten Else ' Zurückversetzen in der Liste TmpStr = .List(j) .RemoveItem j .AddItem TmpStr, i End If Next j Next i End With End Sub
' Liste sortieren, Groß- und Kleinschreibung wird beachtet Private Sub Command3_Click() Dim Retval As Long, i As Integer, j As Integer, TmpStr As String With List1 For i = 0 To .ListCount - 1 For j = i + 1 To .ListCount - 1 ' Strings vergleichen und eventuell verschieben Retval = CompareString(0&, NORM_IGNORESYMBOLS Or _ SORT_STRINGSORT, .List(i), Len(.List(i)), .List(j), Len(.List(j))) If Retval = CSTR_LESS_THAN Or Retval = CSTR_EQUAL Then ' Stellung halten Else ' Zurückversetzen in der Liste TmpStr = .List(j) .RemoveItem j .AddItem TmpStr, i End If Next j Next i End With End Sub