델파이

Copy, Length AnsiString UnicodeString 차이, IsCharAlphaA 알파벳 문자확인

미스터몽키 2016. 3. 12. 15:34

델파이 2009 부터 String은 기본적으로 UnicodString 이다


var vAnsiS: AnsiString;
    vUniS: String;
begin

  Edit4.Text := '가나다123abc';    // 유니코드스트링


  vAnsiS := copy(AnsiString(Edit4.Text), 1,5);    // 안시로 변환하고 copy
  vUniS  := copy(Edit4.Text, 1,5);                     // 유니코드 copy


  Memo2.Lines.Add('AnsiString Copy:' + vAnsiS + '   Length(바이트): ' + inttostr(Length(vAnsiS)));  

   --> (결과) AnsiString Copy:가나1   Length(바이트): 5


  Memo2.Lines.Add('UniString Copy:' + vUniS + '   Length(문자수): ' + inttostr(Length(vUniS)));

--> (결과) UniString Copy:가나123   Length(문자수): 5


즉 AnsiString에서는 copy는 바이트단위로 자르고  Length는 바이트수를 반환하고

     UnicodeString에서는 copy는 글자수단위로 자르고 Length는 문자수를 반환한다.


-----------------------------------------------------------------------------------------------------


델파이 시애틀에서 문자가 알파벳인지 확인하는 함수 IsCharAlphaA  즉 안시(AnsiString)로 바꿔야 정상작동한다.

유니코드용 IsCharAlpha 함수가 있지만 한글을 알파벳으로 인식하는 오류가 있다.


  if IsCharAlphaA(AnsiString(Edit1.Text)[1]) then
    showmessage('알파벳')
  else
    showmessage('Not 알파벳');



------------------------------------------------------------------------------------------------

  Edit2.text := inttostr(Length(WideString(Edit1.Text)));  //문자수리턴

  Edit2.text := inttostr(Length(Edit1.Text));              //바이트수리턴 AnsiString일때