ab.com コミュニティ https://www.activebasic.com/forum/ |
|
StrConv関数の大半の機能を使用可能 https://www.activebasic.com/forum/viewtopic.php?t=367 |
ページ 1 / 1 |
作成者: | マティ [ 2005年10月03日(月) 11:07 ] |
記事の件名: | StrConv関数の大半の機能を使用可能 |
SJISでのみ、各種変換を行えます。 UNICODEを変換する場合は、以下のように処理してください。 コード: 変換後 = StrConv(StrConv(StrConv(変換前,vbFromUnicode),vbKatakana+vbNarrow),Unicode)各種制限 Unicode,vbFromUnicodeは単独で使用して下さい。 vbLowerCaseとvbUpperCase、vbHiraganaとvbKatakana、vbNarrowとvbWideの同時指定は出来ません。 コード: Declare Function WideCharToMultiByte Lib "kernel32" ( _ CodePage As Long, _ dwFlags As Long, _ lpWideByteStr As VoidPtr,_ cchWideByte As Long, _ lpMultiCharStr As String, _ cchMultiChar As Long, _ pDefaultChar As Long, _ pUsedDefaultChar As Long) As Long Declare Function GetUserDefaultLCID Lib "kernel32" () As Long Declare Function LCMapStringA Lib "kernel32" ( _ Locale As Long, _ dwMapFlags As Long, _ lpSrcStr As String, _ cchSrc As Long, _ lpDestStr As String, _ cchDest As Long) As Integer Const LCMAP_LOWERCASE = &h00000100 '小文字にします Const LCMAP_UPPERCASE = &h00000200 '大文字にします Const LCMAP_HIRAGANA = &h00100000 'ひらがなにします Const LCMAP_KATAKANA = &h00200000 'カタカナにします Const LCMAP_HALFWIDTH = &h00400000 '半角文字にします(適用される場合) Const LCMAP_FULLWIDTH = &h00800000 '全角文字にします(適用される場合) '--------------------------------------------------- ' StrConv が使用する定数郡 '--------------------------------------------------- Const vbLowerCase = LCMAP_LOWERCASE '小文字をにします Const vbUpperCase = LCMAP_UPPERCASE '大文字をにします Const vbHiragana = LCMAP_HIRAGANA 'ひらがなにします Const vbKatakana = LCMAP_KATAKANA 'カタカナにします Const vbNarrow = LCMAP_HALFWIDTH '半角文字にします Const vbWide = LCMAP_FULLWIDTH '全角文字にします Const vbUnicode = 1 'Unicodeへ変換 Const vbFromUnicode = 2 'SJIS へ変換 '*************************************************** ' StrConv '--------------------------------------------------- ' 引数 : 変換する文字列,変換処理 ' 戻値 : 変換された文字列 '*************************************************** Function StrConv(sInp As String,eCnv As Long) As String 'eCnv に対して処理を振り分け Dim iLen As Long, oLen As Long, lCnv As Long, LcId As Long ' Select Case(eCnv And 3) Case vbFromUnicode iLen = Len(sInp) >> 1 oLen=WideCharToMultiByte(CP_ACP, 0, sInp, iLen, 0, 0, 0, 0) StrConv=ZeroString(oLen) '作業領域作成 WideCharToMultiByte(CP_ACP, 0, sInp, iLen, StrPtr(StrConv), oLen, 0, 0) Case vbUnicode iLen = Len(sInp) oLen = MultiByteToWideChar(CP_ACP,0,sInp,iLen,0,0) '文字数取得 StrConv=ZeroString(oLen << 1) '作業領域作成 MultiByteToWideChar( CP_ACP,0,sInp,-1,StrPtr(StrConv),oLen) Case Else lCnv = (eCnv And &h00F00300) '対象確認 If(lCnv)Then LcId = GetUserDefaultLCID() iLen = Len(sInp) oLen = LCMapStringA(LcId, lCnv, sInp, iLen, 0, 0) StrConv=ZeroString(oLen) '作業領域作成 oLen = LCMapStringA(LcId, lCnv, sInp, iLen, StrPtr(StrConv), oLen) Else StrConv=sInp: debug End If End Select End Function |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |