〜 テキスト 〜
大文字・小文字、全角・半角の一括変換 (要KERNEL32.DLL)

ウィンドウズAPIには、カナのタイプや全角半角、大文字小文字を変換する関数LCMapStringが存在します。
変換タイプの指定だけで簡単に変換できて便利ですが、
全角半角の変換を行うと、英数カナ問わず一括変換する特性があるので、
英数の半角全角は行いたいが、半角カナはそのままで置いておきたいという場合や、
文字タイプ毎の個別変換を行いたい場合は、コチラコチラを利用する方がよいでしょう。
尚、LCMapStringで変換できる種類は下記の組み合わせとなります。
NORM_IGNORECASE0x00000001大文字・小文字を区別しない
NORM_IGNORENONSPACE0x00000002送りなし文字を無視
NORM_IGNORESYMBOLS0x00000004記号を無視
LCMAP_LOWERCASE0x00000100小文字に変換
LCMAP_UPPERCASE0x00000200大文字に変換
LCMAP_SORTKEY0x00000400正規化されたワイド文字並び替えキーを作成
LCMAP_BYTEREV0x00000800バイト順序を反転
SORT_STRINGSORT0x00001000区切り記号を記号として使用
NORM_IGNOREKANATYPE0x00010000ひらがなとカタカナを区別しない
NORM_IGNOREWIDTH0x00020000半角文字・全角文字を区別しない
LCMAP_HIRAGANA0x00100000ひらがなに変換
LCMAP_KATAKANA0x00200000カタカナに変換
LCMAP_HALFWIDTH0x00400000半角文字に変換
LCMAP_FULLWIDTH0x00800000全角文字に変換
LCMAP_LINGUISTIC_CASING0x01000000大文字・小文字の区別に言語上の規則を使用
LCMAP_SIMPLIFIED_CHINESE0x02000000中国語の簡体字を繁体字にマッピング
LCMAP_TRADITIONAL_CHINESE0x04000000中国語の繁体字を簡体字にマッピング

strconv 対象変数, サイズフラグ, カナフラグ, 幅フラグ
対象変数変換対象文字列が入った変数を指定する。
尚、変換結果はシステム変数refstrに入る為、変換後4096バイトに収める必要がある。
サイズフラグ英字のサイズを指定する。(0:変換しない 1:小文字化 2:大文字化)
カナフラグカナタイプを指定する。(0:変換しない 1:ひらがな化 2:カタカナ化)
幅フラグバイト幅を指定する。(0:変換しない 1:半角化 2:全角化)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#define global LCMAP_LOWERCASE 0x00000100
#define global LCMAP_UPPERCASE 0x00000200
#define global LCMAP_HIRAGANA  0x00100000
#define global LCMAP_KATAKANA  0x00200000
#define global LCMAP_HALFWIDTH 0x00400000
#define global LCMAP_FULLWIDTH 0x00800000

	ll_libload kernel, "kernel32.dll"
	ll_getproc GetUserDefaultLCID, "GetUserDefaultLCID", kernel
	ll_callfunc prm, 0, GetUserDefaultLCID
	ll_ret GetUserDefaultLCID
	ll_getproc LCMapStringA, "LCMapStringA", kernel

#module
#deffunc strconv val, int, int, int
	mref string, 24 : mref size, 1 : mref kana, 2 : mref wide, 3
	mref rstr, 65
	prm = GetUserDefaultLCID@, 0, 0, -1, 0, 4096
	if size : if size = 1 : prm.1 += LCMAP_LOWERCASE@ : else : prm.1 += LCMAP_UPPERCASE@
	if kana : if kana = 1 : prm.1 += LCMAP_HIRAGANA@  : else : prm.1 += LCMAP_KATAKANA@
	if wide : if wide = 1 : prm.1 += LCMAP_HALFWIDTH@ : else : prm.1 += LCMAP_FULLWIDTH@
	ll_getptr string : ll_ret prm.2
	ll_getptr rstr : ll_ret prm.4
	ll_callfunc prm, 6, LCMapStringA@
	return
#global

	sdim data, 128
	data = "12345あガさダナパマヤらゎワゐヲゑンヴヵヶーーAbCdEfG"
	font "MS 明朝", 16
	mes "元の文字列    " + data
	strconv data, 1
	mes "大文字⇒小文字  " + refstr
	strconv data, 2
	mes "小文字⇒大文字  " + refstr
	strconv data, 0, 1
	mes "片仮名⇒平仮名  " + refstr
	strconv data, 0, 2
	mes "平仮名⇒片仮名  " + refstr
	strconv data, 1, 0, 1
	mes "全角⇒半角小文字 " + refstr // 片仮名も半角カナになります
	strconv data, 2, 0, 2
	mes "半角⇒全角大文字 " + refstr // 半角カナも片仮名になります
	strconv data, 0, 2, 1
	mes "全カナ⇒半角カナ " + refstr // 全角英数も半角化されます
	stop

結果 = strconv(対象変数, サイズフラグ, カナフラグ, 幅フラグ)
結果変換結果の受取先を指定する。
対象変数変換対象文字列が入った変数を指定する。
サイズフラグ英字のサイズを指定する。(0:変換しない 1:小文字化 2:大文字化)
カナフラグカナタイプを指定する。(0:変換しない 1:ひらがな化 2:カタカナ化)
幅フラグバイト幅を指定する。(0:変換しない 1:半角化 2:全角化)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#define global LCMAP_LOWERCASE 0x00000100
#define global LCMAP_UPPERCASE 0x00000200
#define global LCMAP_HIRAGANA  0x00100000
#define global LCMAP_KATAKANA  0x00200000
#define global LCMAP_HALFWIDTH 0x00400000
#define global LCMAP_FULLWIDTH 0x00800000

#uselib "kernel32.dll"
#func  global LCMapString "LCMapStringA" int, int, var, int, var, int
#cfunc global GetLCID "GetUserDefaultLCID"

#module
#defcfunc strconv var string, int size, int kana, int wide, local rstr, local prm
	sdim rstr, strlen(string) * 2 + 1
	if size : if size = 1 : prm += LCMAP_LOWERCASE : else : prm += LCMAP_UPPERCASE
	if kana : if kana = 1 : prm += LCMAP_HIRAGANA  : else : prm += LCMAP_KATAKANA
	if wide : if wide = 1 : prm += LCMAP_HALFWIDTH : else : prm += LCMAP_FULLWIDTH
	LCMapString GetLCID(), prm, string, -1, rstr, strlen(string) * 2 + 1
	return rstr
#global

	sdim data, 128
	data = "12345あガさダナパマヤらゎワゐヲゑンヴヵヶーーAbCdEfG"
	font msmincho, 16
	mes "元の文字列    " + data
	mes "大文字⇒小文字  " + strconv(data, 1)
	mes "小文字⇒大文字  " + strconv(data, 2)
	mes "片仮名⇒平仮名  " + strconv(data, 0, 1)
	mes "平仮名⇒片仮名  " + strconv(data, 0, 2)
	mes "全角⇒半角小文字 " + strconv(data, 1, 0, 1) // 片仮名も半角カナになります
	mes "半角⇒全角大文字 " + strconv(data, 2, 0, 2) // 半角カナも片仮名になります
	mes "全カナ⇒半角カナ " + strconv(data, 0, 2, 1) // 全角英数も半角化されます