[C#/VB.NET] 한글을 자음 모음으로 나누기 + 합치기
Function fnName(inName As String) As String
Dim 초성 As Variant, 중성 As Variant, 종성 As Variant
Dim vr() As Variant
Dim i As Integer, j As Integer, n As Long, k1 As Integer, k2 As Integer, k3 As Integer
초성 = Array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
중성 = Array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ")
종성 = Array("", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
For i = 1 To Len(inName)
If Mid(inName, i, 1) Like "[가-힇]" Then
n = AscW(Mid(inName, i, 1)) + 21504
k1 = Int(n / (21 * 28))
k2 = Int((n Mod 21 * 28) / 28)
k3 = n Mod 28
j = j + 1
ReDim Preserve vr(1 To j)
vr(j) = 초성(k1) & 중성(k2) & 종성(k3)
End If
Next i
'분리된 자,모음에 들어간 띄어쓰기 없애며 Join
fnName = Replace(Join(vr), " ", "")
End Function
실제 타이핑에 사용하도록 수정
Function fnName(inName As String) As String
Dim 초성 As Variant, 중성 As Variant, 종성 As Variant
Dim vr() As Variant
Dim i As Integer, j As Integer, n As Long, k1 As Integer, k2 As Integer, k3 As Integer
초성 = Array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
중성 = Array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅗㅏ", "ㅗㅐ", "ㅗㅣ", "ㅛ", "ㅜ", "ㅜㅓ", "ㅜㅔ", "ㅜㅣ", "ㅠ", "ㅡ", "ㅡㅣ", "ㅣ")
종성 = Array("", "ㄱ", "ㄲ", "ㄱㅅ", "ㄴ", "ㄴㅈ", "ㄴㅎ", "ㄷ", "ㄹ", "ㄹㄱ", "ㄹㅁ", "ㄹㅂ", "ㄹㅅ", "ㄹㅌ", "ㄹㅍ", "ㄹㅎ", "ㅁ", "ㅂ", "ㅂㅅ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
For i = 1 To Len(inName)
If Mid(inName, i, 1) Like "[가-힇]" Then
n = AscW(Mid(inName, i, 1)) + 21504
k1 = Int(n / (21 * 28))
k2 = Int((n Mod 21 * 28) / 28)
k3 = n Mod 28
j = j + 1
ReDim Preserve vr(1 To j)
vr(j) = 초성(k1) & 중성(k2) & 종성(k3)
End If
Next i
'분리된 자,모음에 들어간 띄어쓰기 없애며 Join
fnName = Replace(Join(vr), " ", "")
End Function
사용중
Function Jamo(T As String)
Dim ChoSung As Variant, JOONGSUNG As Variant, JongSung As Variant
Dim i As Integer, K As Long
Dim T1 As String, T2 As String, T3 As String
ChoSung = Array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
JOONGSUNG = Array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅗㅏ", "ㅗㅐ", "ㅗㅣ", "ㅛ", "ㅜ", "ㅜㅓ", "ㅜㅔ", "ㅜㅣ", "ㅠ", "ㅡ", "ㅡㅣ", "ㅣ")
JongSung = Array(Empty, "ㄱ", "ㄲ", "ㄱㅅ", "ㄴ", "ㄴㅈ", "ㄴㅎ", "ㄷ", "ㄹ", "ㄹㄱ", "ㄹㅁ", "ㄹㅂ", "ㄹㅅ", "ㄹㅌ", "ㄹㅍ", "ㄹㅎ", "ㅁ", "ㅂ", "ㅂㅅ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
For i = 1 To Len(T)
If Mid(T, i, 1) Like "[가-힣]" Then
K = AscW(Mid(T, i, 1))
K = K - &HAC00
T1 = Int(K / (21 * 28))
T2 = Int((K Mod 21 * 28) / 28)
T3 = K Mod 28
Jamo = Jamo & ChoSung(T1) & JOONGSUNG(T2) & JongSung(T3)
Else
Jamo = Jamo + Mid(T, i, 1)
End If
Next
End Function
영타로 바로출력 << 사용중...
Function SplitEnglish(T As String)
Dim ChoSung As Variant, JoongSung As Variant, JongSung As Variant
Dim vR()
Dim i As Integer, j As Integer, n As Long, k1 As Integer, k2 As Integer, k3 As Integer
ChoSung = Array("r", "R", "s", "e", "E", "f", "a", "q", "Q", "t", "T", "o", "w", "W", "c", "z", "x", "v", "g")
JoongSung = Array("k", "o", "i", "il", "j", "p", "u", "ul", "h", "hk", "ho", "hl", "y", "n", "nj", "np", "nl", "b", "m", "ml", "l")
JongSung = Array("", "r", "R", "rt", "s", "sw", "sg", "e", "f", "fr", "fa", "fq", "ft", "fx", "fv", "fg", "a", "q", "qt", "t", "T", "d", "w", "c", "z", "x", "v", "g")
For i = 1 To Len(T)
If Mid(T, i, 1) Like "[가-힣]" Then
K = AscW(Mid(T, i, 1))
K = K - &HAC00
T1 = Int(K / (21 * 28))
T2 = Int((K Mod 21 * 28) / 28)
T3 = K Mod 28
SplitEnglish = SplitEnglish & ChoSung(T1) & JoongSung(T2) & JongSung(T3)
Else
SplitEnglish = SplitEnglish + Mid(T, i, 1)
End If
Next
End Function
'// 초성, 중성, 종성 Join
Function PlusKorean(inName As String) As String
Dim 초성, 중성, 종성
Dim vr() As String
Dim worD As String
Dim i%, j%
Dim k1%, k2%, k3%
Dim wkF As WorksheetFunction
Set wkF = WorksheetFunction
초성 = Array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
중성 = Array("ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ")
종성 = Array("", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
For i = 1 To Len(inName)
worD = Mid(inName, i, 1)
'초성, 종성 구분(뒤에 오는 자,모의 종류에 따라서 구분)
If worD Like "[ㄱ-ㅎ]" Then
'자음 다음에 모음이 오면 초성
If Mid(inName, i + 1, 1) Like "[ㅏ-ㅣ]" Then
k1 = wkF.Match(worD, 초성) - 1
'자음 다음에 자음이 오거나 글자 길이와 같으면 종성
ElseIf Mid(inName, i + 1, 1) Like "[ㄱ-ㅎ]" Or i = Len(inName) Then
k3 = wkF.Match(worD, 종성) - 1
'종성이 끝나면 배열에 값 삽입
ReDim Preserve vr(j)
vr(j) = ChrW(-21504 + (28 * 21 * k1) + (28 * k2) + k3)
j = j + 1
End If
'모음은 중성
ElseIf worD Like "[ㅏ-ㅣ]" Then
k2 = wkF.Match(worD, 중성) - 1
'모음의 두칸 뒤가 또 모음이거나 글자의 마지막이면 종성이 없는 것으로 보고 배열에 값 삽입
If Mid(inName, i + 2, 1) Like "[ㅏ-ㅣ]" Or i = Len(inName) Then
k3 = 0 '모음으로 끝나는 글자이므로 종성 초기화
ReDim Preserve vr(j)
vr(j) = ChrW(-21504 + (28 * 21 * k1) + (28 * k2) + k3)
j = j + 1
End If
End If
Next i
PlusKorean = Replace(Join(vr), " ", "")
End Function
자음,모음 합치기 << 사용중
Private Const HAN_FIRST As Double = 44032#
Public Function HanJoin(ByVal Cho As String, ByVal Jung As String, Optional ByVal Jong As String = "") As String
Dim ChoSeong As Integer
Dim JungSeong As Integer
Dim JongSeong As Integer
Dim i As Integer
Dim Ch As Variant, Ju As Variant, Jo As Variant
Ch = Array("ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
Ju = Array("ㅏ", "ㅐ", "ㅑ", "ㅐ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅟ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ")
Jo = Array("", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ")
ChoSeong = -1
For i = 0 To 18
If Cho = Ch(i) Then ChoSeong = i: Exit For
Next i
If ChoSeong < 0 Then Exit Function
JungSeong = -1
For i = 0 To 20
If Jung = Ju(i) Then JungSeong = i: Exit For
Next i
If JungSeong < 0 Then Exit Function
JongSeong = -1
For i = 0 To 27
If Jong = Jo(i) Then JongSeong = i: Exit For
Next i
If JongSeong < 0 Then Exit Function
HanJoin = ChrW((ChoSeong * 21 + JungSeong) * 28 + JongSeong + HAN_FIRST)
End Function
'자료' 카테고리의 다른 글
[C#/VB.NET]UnregisterHotKey - 설정한 Hotkey의 해제 (0) | 2021.03.17 |
---|---|
[C#/VB.net]RegisterHotKey - Windows Hotkey 핫키 설정 (0) | 2021.03.17 |
[C#/ VB.NET] [API] 한/영 키 상태 값 구하기 (0) | 2021.02.21 |
[VB.net/C#] Interaction.MsgBox(Object, MsgBoxStyle, Object) (0) | 2021.02.20 |
안드로이드 앱 SSL-Pinning 우회 및 패킷 캡처 (0) | 2021.02.08 |