文字列を比較する <TOP>
文字列1と文字列2の語彙の値を比較します。
GetThreadLocale スレッドのロケールIDを取得
CompareString 比較オプションに対応した文字列比較関数
大文字小文字を区別する場合 大文字小文字を区別しない場合
カタカナとひらがなを区別する場合 カタカナとひらがなを区別しない場合
記号を無視しない場合 記号を無視した場合
参考
ロケールとは、ソフトウェアに内蔵される、言語や国・地域ごとに異なる単位、記号、日付、通貨などの表記規則の集合。
そういえば、Microsoft Office 配下などに1041などのフォルダがありましたネ!
アイスランド語:1039
インドネシア語:1057
イタリア語:1040
英語(オーストラリア):3081
英語(カナダ):4105
英語(U.K.):2057
英語(U.S.):1033
日本語:1041
韓国語:1042
ラテン語:1142
'================================================================
'= 文字列を比較する
'= (CompareString.bas)
'================================================================
#include "Windows.bi"
' スレッドのロケールIDを取得
Declare Function Api_GetThreadLocale& Lib "kernel32" Alias "GetThreadLocale" ()
' 比較オプションに対応した文字列比較関数
Declare Function Api_CompareString& Lib "kernel32" Alias "CompareStringA" (ByVal Locale&, ByVal dwCmpFlags&, ByVal lpString1$, ByVal cchCount1&, ByVal lpString2$, ByVal cchCount2&)
#define CSTR_EQUAL 2 '文字列1=文字列2
#define CSTR_GREATER_THAN 3 '文字列1>文字列2
#define CSTR_LESS_THAN 1 '文字列1<文字列2
#define NORM_IGNORECASE &H1 '大文字・小文字を区別しない
#define NORM_IGNOREKANAType &H10000 'ひらがな・カタカナを区別しない
#define NORM_IGNORENONSPACE &H2 '場所を取らない文字を区別しない
#define NORM_IGNORESYMBOLS &H4 '記号を無視する
#define NORM_IGNOREWIDTH &H20000 '1バイト文字とそれと同じ2バイト文字を区別しない
#define SORT_STRINGSORT &H1000
#define LOCALE_SYSTEM_DEFAULT &H400 'システムのデフォルトロケール
#define LOCALE_USER_DEFAULT &H800 '現在のユーザのデフォルトロケール
Var Shared Edit1 As Object : Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Var Shared Edit2 As Object : Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
Var Shared Text3 As Object : Text3.Attach GetDlgItem("Text3") : Text3.SetFontSize 14
Var Shared Text4 As Object : Text4.Attach GetDlgItem("Text4") : Text4.SetFontSize 14
Var Shared Check(4) As Object
For i = 0 To 4
Check(i).Attach GetDlgItem("Check" & Trim$(Str$(i + 1)))
Check(i).SetFontSize 14
Next
Var Shared Flags(4) As Long
'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
Var hTL As Long
Var Str1 As String
Var Str2 As String
'スレッドのロケールIDを取得
hTL = Api_GetThreadLocale()
Str1 = GetDlgItemText("Edit1")
Str2 = GetDlgItemText("Edit2")
If Check(0).GetCheck = 1 Then Flags(0) = NORM_IGNORECASE Else Flags(0) = 0
If Check(1).GetCheck = 1 Then Flags(1) = NORM_IGNOREKANAType Else Flags(1) = 0
If Check(2).GetCheck = 1 Then Flags(2) = NORM_IGNORENONSPACE Else Flags(2) = 0
If Check(3).GetCheck = 1 Then Flags(3) = NORM_IGNORESYMBOLS Else Flags(3) = 0
If Check(4).GetCheck = 1 Then Flags(4) = NORM_IGNOREWIDTH Else Flags(4) = 0
Select Case Api_CompareString(hTL, Flags(0) + Flags(1) + Flags(2) + Flags(3) + Flags(4), Str1, Len(Str1), Str2, Len(Str2))
Case CSTR_LESS_THAN
Text3.SetWindowText "<"
Text4.SetWindowText "文字列1は、文字列2より語彙の値が小さい"
Case CSTR_EQUAL
Text3.SetWindowText "="
Text4.SetWindowText "文字列1は、文字列2の語彙の値と等しい"
Case CSTR_GREATER_THAN
Text3.SetWindowText ">"
Text4.SetWindowText "文字列1は、文字列2の語彙の値が大きい"
End Select
End Sub
'================================================================
'=
'================================================================
While 1
WaitEvent
Wend
Stop
End