본문 바로가기
Programming/Visual Basic 6

[VB6] 한글을 2바이트 계산하여 문자열 자르기 (Len, Left, Right, Mid 대체)

by 너울림 2022. 12. 17.

한글을 2바이트 계산하여 문자열 자르기

 

한글을 2바이트 계산하여 문자열 자르기
(Len, Left, Right, Mid 대체)


포스팅 개요

VB에서 기본으로 제공하는 내장 함수 중 문자열을 자르는 대표적인 함수 3종(Right, Left, Mid)과 문자열 길이를 측정하는 함수 1종(Len)이 있습니다. 이 함수들의 바이트로 길이를 체크하는 것이 아니라 문자수를 길이로 취급하기에 2바이트로 생성되는 한글조차 1글자로 취급합니다. 이러한 문제 때문에 한글이 들어간 문자열을 DB에 등록하는 경우 입력하고자 하는 내용이 커서 오류가 생기는 경우가 종종 생깁니다. 오늘 포스팅에서는 내장 함수를 대체하는 사용자 함수를 준비해 보았습니다.

 

  • StrConv 함수를 활용하는 다른 방법도 있으니 필요하신 분은 따로 검색해보셔도 될 거 같습니다.

 


예제 소스 코드

 

  • 소스 코드 안에  Module(.bas)을 선택해 해당 함수 프로시저를 추가
'*** LEN 함수를 대체
Public Function H_LEN(Str As String) As String
    H_LEN = LenB(StrConv(Str, vbFromUnicode))

End Function

'*** Left 함수를 대체
Public Function H_Left(Str$, iEnd%) As String
    Dim i%
    Dim chLen%
    Dim sRet$
    Dim iStart%
    
    iStart = 1
    
    For i = 1 To Len(Str)

        If Asc(Mid(Str, i, 1)) < 0 Then
            chLen = chLen + 2
        Else
            chLen = chLen + 1

        End If
    
        If chLen >= iStart And chLen <= iEnd Then
            sRet = sRet & Mid(Str, i, 1)

        End If

    Next
  
    H_Left = sRet

End Function

'*** MID 함수를 대체
Public Function H_Mid(Str$, iStart%, iEnd%) As String
    Dim i%
    Dim chLen%
    Dim sRet$
    
    For i = 1 To Len(Str)

        If Asc(Mid(Str, i, 1)) < 0 Then
            chLen = chLen + 2
        Else
            chLen = chLen + 1

        End If
    
        If chLen >= iStart And chLen <= iStart + iEnd - 1 Then
            sRet = sRet & Mid(Str, i, 1)

        End If

    Next
  
    H_Mid = sRet

End Function

'*** Right 함수를 대체
Public Function H_Right(Str$, iEnd%) As String
    Dim i%
    Dim chLen%
    Dim sRet$
    Dim iStart%
    
    iStart = 1
    Str = StrReverse(Str)
    
    For i = 1 To Len(Str)

        If Asc(Mid(Str, i, 1)) < 0 Then
            chLen = chLen + 2
        Else
            chLen = chLen + 1

        End If
    
        If chLen >= iStart And chLen <= iEnd Then
            sRet = sRet & Mid(Str, i, 1)

        End If

    Next
  
    H_Right = StrReverse(sRet)

End Function

 


실행 결과

 

  • H_Len("가나다123ABC마바사") '결과 "18"
  • H_Left("가나다123ABC마바사", 13) '결과 "가나다123ABC"
  • H_Right("가나다123ABC마바사", 13) '결과 "123ABC마바사"
  • H_Mid("가나다123ABC마바사", 3, 10) '결과 "나다123ABC

 

 

 

 

 

 

댓글