본문 바로가기
Delphi Tip/문자

한글 초/중/종성 알아내기

by MonoSoft 2024. 2. 15.
728x90
반응형
728x90

한글 초/중/종성 알아내기

 

 

type

TCVJ = packed record //초성 중성 종성의 번호를 저장할 구조체

C :integer;

V :integer;

J :integer;

end;

 

const

//유니코드 한글 초성 순서표

UniCodeC : array [0..18] of string = ('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ', 'ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ'); //유니코드 한글 중성 순서표

UniCodeV : array [0..20] of string = ('ㅏ','ㅐ','ㅑ','ㅒ','ㅓ','ㅔ','ㅕ','ㅖ','ㅗ','ㅘ', 'ㅙ','ㅚ','ㅛ','ㅜ','ㅝ','ㅞ','ㅟ','ㅠ','ㅡ','ㅢ', 'ㅣ');

//유니코드 한글 종성 순서표

UniCodeJ : array [0..27] of string = (' ','ㄱ','ㄲ','ㄳ','ㄴ','ㄵ','ㄶ','ㄷ','ㄹ','ㄺ','ㄻ', 'ㄼ','ㄽ','ㄾ','ㄿ','ㅀ','ㅁ','ㅂ','ㅄ','ㅅ','ㅆ', 'ㅇ','ㅈ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');

 

function chk_cvj(str:String):TCVJ;

var

res:TCVJ; //변환한 초성 중성 종성 값을 넘길 변수

cCode,vCode,jCode:integer; //유니코드 한글에서의 초성/중성/종성의 코드값

lpszW:WideString;

begin

lpszw := WideString(str);

// MultiByteToWideChar(CP_ACP, 0, PChar(inputSyllable), -1, lpszW, 256);

// MultiByteToWideChar(CP_UTF8, 0, PChar(inputSyllable), -1, lpszW, 4);

// cCode := (word(lpszW[0]) - $AC00) / 588;

//588=21*28(초성)

cCode := (Integer(lpszW[1]) - $AC00); //588=21*28(초성)

// vCode :=((Integer(lpszW[1]) - $AC00) mod (588)) / 28; //588=21*28(중성)

vCode :=((Integer(lpszW[1]) - $AC00) mod (588)) ; //588=21*28(중성)

jCode :=(Integer(lpszW[1]) - $AC00) mod 28;//(종성)

res.C:=trunc(ccode/588);

res.V:=trunc(vcode/28);

res.J:=jCode;

result := res;

end;

 

 

728x90
반응형

'Delphi Tip > 문자' 카테고리의 다른 글

델파이 UTF-8  (0) 2023.11.15
Case문으로 문자 비교하기  (0) 2023.11.08
String 을 PAnsiChar 변환  (0) 2021.10.14
난수 문자열 만들기  (0) 2021.10.13
문자 사이에서 숫자 추출하기  (0) 2021.10.12

댓글