본문 바로가기

Window Programming/VB

VB에서의 문자열 처리

문자열 처리
비주얼베이직의 텍스트박스 정보는 항상 문자열로 저장되므로 문자열에 대해 충분한 이해가 있어야 비주얼베이직을 유용하게 활용할 수 있다. 여기서는 비주얼베이직의 라이브러리 함수(내장 함수) 중에서 문자열 처리와 관련된 함수를 다루는 방법을 소개한다. 비주얼 베이직의 문자형 변수들은 기본적으로 가변길이로 정의 되므로, 고정길이로 정의하지 않은 한 기억장소 확보는 어플리케이션 실행시에 동적으로 처리된다.
다음표는 문자열 처리와 관련된 내장함수의 종류를 보여준다
동작 키워드
두 문자열 비교 StrComp
문자열 변환 StrConv
소문자 또는 대문자로 변환 Lcase, Ucase
반복 문자의 문자열 작성 Space, String
문자열의 길이 알아내기 Len
문자열 정렬 LSet, Rset
문자과 숫자 변환 Val, Str
문자열 조작 InStr, Left, Right, Mid, Trim, LTrim, RTrim
문자열 비교 규칙 설정 Option Compare
ASCII 값과 ANSI 값을 가지고 작업 Asc, Chr
문자열 서식 지정 Format


StrComp함수
문자열 비교의 결과를 의미하는 Variant(Integer)값을 반환한다
사용법) StrComp(문자열1, 문자열2,[ 비교형식])
비교형식은 다음과 같이 설정된다.
상수 설명
vbUseCompareOption -1 Option Compare 문 설정을 사용하여 비교.
vbBinaryCompare 0 이진 비교를 수행
vbTextCompare 1 텍스트를 비교
vbDatabaseCompare 2 Microsoft Access에만 해당. 데이터베이스의 정보를 근거로 하여 비교

StrComp 함수의 반환값은 다음과 같다.
다음 경우 StrComp 반환값
문자열1문자열2보다 적은 경우 -1
문자열1문자열2와 같은 경우 0
문자열1문자열2보다 큰 경우 1
문자열1 또는 문자열2가 Null인 경우 Null
사용예)
Private Sub Form_Click()
Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd" ' 변수를 정의.
MyComp = StrComp(MyStr1, MyStr2, 1) '문자비교 수행
Print MyComp ' 0을 출력
MyComp = StrComp(MyStr1, MyStr2, 0) '이진비교수행
Print MyComp ' -1을 출력
MyComp = StrComp(MyStr2, MyStr1) '이진비교 수행
Print MyComp ' 1을 출력
End Sub
'세번째 인수인 비교형식이 0이거나 없는 경우에는 이진비교를 수행한다
 
StrConv함수
지정된 대로 변환된 Variant(String)값을 반환한다
사용법) StrConv(문자식, 변환형식)
변환형식은 다음과 같이 설정된다(일본어 변환형식은 일본에서만 사용되므로 생략하였음)
상수 설명
vbUpperCase 1 문자열을 대문자로 변환
VbLowerCase 2 문자열을 소문자로 변환
VbProperCase 3 문자열 내 모든 단어의 첫 글자를 대문자로 변환
VbWide 4 1바이트 문자를 2바이트 문자로 변환
VbNarrow 8 2바이트 문자를 1바이트 문자로 변환
VbUnicode 64 시스템의 기본 코드 페이지를 사용하여 문자열을 Unicode로 변환
VbFromUnicode 128 Unicode 문자열을 시스템의 기본 코드 페이지로 변환
<참고>Unicode란 국제 표준 기구(ISO)의 표준 문자를 의미한다. Unicode는 16비트(2바이트)의 코딩법을 사용하여 65,536개의 별개 문자 공백을 허용한다. Unicode는 구두 기호, 수학 기호, 장식 활자를 포함하며 앞으로 증가될 표기에 대비한 상당한 여유를 가지고 있다.
사용예)
Private Sub Form_Click()
Dim MyConv1, MyConv2
MyConv1 = "Hello world" '변수 초기화
MyConv2 = StrConv(MyConv1, vbUpperCase)
Print MyConv2 'HELLO WORLD를 출력
MyConv2 = StrConv(MyConv1, 2)
Print MyConv2 'hello world를 출력
MyConv2 = StrConv(MyConv1, 3)
Print MyConv2 'Hello World를 출력
End Sub
 
Lcase함수
Ucase함수와는 반대로 지정된 문자열을 소문자로 변환해서 반환한다. 이 때도 대문자만 소문자로 변환되고, 모든 소문자와 글자가 아닌 문자는 변환되지 않는다
사용법) Lcase(문자열)
사용예)
Private Sub Form_Click()
Dim UpperCase, LowerCase
UpperCase = "Hello World 1234" ' 변환할 문자열
LowerCase = LCase(UpperCase)
Print LowerCase ' "hello world 1234"를 반환
End Sub
 
Ucase함수
지정된 문자열을 대문자로 변환해서 반환한다. 이 때 소문자만 대문자로 변환되고, 모든 대문자와 글자가 아닌 문자는 변환되지 않는다
사용법) Ucase(문자열)
사용예)
Private Sub Form_Click()
Dim LowerCase, UpperCase
LowerCase = "Hello World 1234" ' 변환할 문자열
UpperCase = UCase(LowerCase)
Print UpperCase ' "HELLO WORLD 1234"를 반환
End Sub
 
Space함수
지정된 수치만큼 공백을 반환하는 함수로, 출력을 형식화하거나 고정된 크기의 문자열을 지우는 데 유용햐게 쓸 수 있다.
사용법) Space(원하는 공백수)
사용예)
Private Sub Form_Click()
Dim MyString
MyString = Space(10)
Print Len(MyString) '10공백의 문자열 길이 반환.
MyString = "Hello" & Space(10) & "World"
Print MyString ' 두 문자열 사이에 10공백이 삽입되어 출력된다.
End Sub
 
String함수
지정된 길이의 반복되는 문자열을 Variant(String)값으로 반환한다
사용법) String(반환되는 문자열 길이, 문자식)
사용예)
Private Sub Form_Click()
Dim MyString
MyString = String(5, "*")
Print MyString ' "*****"을 출력
MyString = String(5, 42) '문자코드로 지정
Print MyString ' "*****"을 출력
MyString = String(10, "ABC") '문자열의 처음 문자만 출력한다
Print MyString ' "AAAAAAAAAA"를 출력
End Sub
문자코드를 사용할때 255보다 큰 수를 문자식값으로 지정하면 String 함수는 다음 공식을 이용해서 그 수를 유효한 문자 코드로 변환한다 문자코드 Mod 256
 
Len 함수
문자열 내 문자 수 또는 변수를 저장하는데 필요한 바이트 수를 반환한다.
사용법) Len(변수|문자열)
변수
또는 문자열 중 하나만 지정하여야 한다
사용예)
Private Sub Form_Click()
Dim MyInt As Integer, MyCur As Currency
Dim MyString, MyLen
MyString = "Hello World" ' 변수 초기화
MyLen = Len(MyInt)
Print MyLen ' 2를 반환.
MyLen = Len(MyString)
Print MyLen ' 11을 반환.
MyLen = Len(MyCur)
Print MyLen ' 8을 반환.
End Sub

LSet함수
한 문자열 변수 내의 문자열을 왼쪽으로 맞춘다
사용법) LSet 문자열변수 = 문자열변수내에서 왼쪽으로 맞추어질 문자식
사용예)
Private Sub Form_Click()
Dim MyString
MyString = "012345" ' 문자열을 초기화합니다.
LSet MyString = "Left"
Print MyString '"Left "출력
Print Len(MyString) '공백을 포함해서 6을 출력
LSet MyString = "Send Left"
Print MyString '"Send L"출력
End Sub
LSet함수는 문자열변수 내에서 남은 여백을 공백문자로 바꾸고 맞추어질 문자식이 문자열별수 길이보다 길면 가장 왼쪽에 있는 문자부터 문자열변수 길이만큼만 문자열번수로 옮긴다
 
RSet함수
한 문자열 변수 내의 문자열을 오른쪽으로 맞춘다
사용법) RSet 문자열변수 = 문자열변수내에서 오른쪽으로 맞추어질 문자식
사용예)
Private Sub Form_Click()
Dim MyString
MyString = "012345" ' 문자열을 초기화
RSet MyString = "RSet"
Print MyString '" RSet"출력
Print Len(MyString) '공백을 포함해서 6을 출력
RSet MyString = "Send Right"
Print MyString '"Send R"출력
End Sub
RSet함수는 문자열변수에 여백이 생길 경우 좌측에 공백문자를 만드는것 외에는 LSet함수와 같다
 
Val 함수
문자열 내에 포함된 숫자를 적절한 형식의 숫자값으로 반환한다.
사용법) Val(문자열)
숫자값으로 인식할 수 없는 문자열을 만나는 순간 Val 함수는 해당되는 첫 문자에서부터 읽기를 중단한다.
사용예)
Private Sub Form_Click()
Dim MyVal
MyVal = Val(" 1945 8 15 조국 광복")
Print MyVal ' 1945815 를 반환
End Sub

Str 함수
숫자를 문자열로 반환한다
사용법) Val(숫자값)
숫자가 문자열로 변환되면 숫자값의 부호를 표시하기 위해 문자열 앞에 한 개의 공백이 예약된다. 숫자값 이 양수이면 반환된 문자열에 앞쪽 공백이 포함되고 더하기 부호가 함축되어 있다.
사용예)
Private Sub Form_Click()
Dim MyString
MyString = Str(459)
Print MyString ' " 459"를 반환
MyString = Len(MyString)
Print MyString ' 4를 반환(공백이 포함된 길이)
MyString = Str(-459.65)
Print MyString ' "-459.65"를 반환
MyString = Len(MyString)
Print MyString ' 7을 반환(공백이 없다)
End Sub

InStr함수
한 문자열 안에 특정 문자열이 처음으로 나타난 위치를 Variant(Long)값으로 반환한다.
사용법) InStr([시작위치, ]검색할 문자식, 찾는 문자식[, 비교형식])
시작위치를 지정하지 않으면 처음 문자부터 검색한다. 비교형식은 StrComp 함수와 같다.
InStr의 반환값은 다음과 같다
조건 InStr 반환값
검색할문자식이 길이는 0일 경우 0
검색할문자식이 Null일 경우 Null
찾는문자식이 길이가 0일 경우 시작위치
찾는문자식이 Null일 경우 Null
찾는문자식이 발견되지 않은 경우 0
찾는문자식검색할 문자식에서 발견되는 경우 일치된 지점의 위치
검색할문자식 > 찾는문자식 0
사용예)
Private Sub Form_Click()
Dim MyString, MyChar, MyPos
MyString = "Windows NT" ' 찾을 문자열
MyChar = "N" '찾는문자 "N"
MyPos = InStr(2, MyString, MyChar, 1) ' 2 위치에서 텍스트 비교 시작
Print MyPos '3을 출력
MyPos = InStr(1, MyString, MyChar, 0) ' 1 위치에서 이진 비교를 시작
Print MyPos ' 9를 출력.
MyPos = InStr(MyString, MyChar) ' 비교는 기본값으로 이진법
Print MyPos ' 9를 출력.
MyPos = InStr(1, MyString, "a") '없는 문자 "a"를 검색
Print MyPos ' 0을 출력.
End Sub
<참고>텍스트비교시 "AAA"와 "aaa"는 같다. 이진비교시 "AAA"는 "aaa"보다 작다
 
Left함수
문자열 왼쪽부터 지정된 수 만큼의 문자를 Variant(String)값으로 반환한다.
사용법) Left(문자열, 반환할 문자수)
사용예)
Private Sub Form_Click()
Dim AnyString, MyStr
AnyString = "Hello World" ' 문자열을 초기화.
MyStr = Left(AnyString, 1)
Print MyStr ' "H"를 출력
MyStr = Left(AnyString, 7)
Print MyStr ' "Hello W"를 출력
MyStr = Left(AnyString, 20)
Print MyStr ' "Hello World"를 출력
End Sub
반환할 문자수문자열의 문자 수와 같거나 클 경우 문자열 전부가 반환되고 공백은 없다
 
Right함수
문자열의 오른쪽으로부터 지정된 수의 문자를 Variant(String)값으로 반환한다.
사용법) Right(문자열, 반환할 문자수)
사용예)
Private Sub Form_Click()
Dim AnyString, MyStr
AnyString = "Hello World" ' 문자열 초기화.
MyStr = Right(AnyString, 1)
Print MyStr ' "d"를 출력.
MyStr = Right(AnyString, 6)
Print MyStr ' " World"를 출력
MyStr = Right(AnyString, 20)
Print MyStr ' "Hello World"를 출력
End Sub
Mid함수
한 문자열에서 지정된 위치에서부터 지정된 수의 문자를 Variant(String) 값으로 반환한다.
사용법) Mid(문자열, 시작위치, [반환할문자수])
사용예)
Private Sub Form_Click()
Dim MyString
MyString = "Mid Function Demo" ' 문자열 초기화.
Print Mid(MyString, 1, 3) ' "Mid"를 출력
Print Mid(MyString, 14, 4) ' "Demo"를 출력
Print Mid(MyString, 5) ' "Function Demo"를 출력
End Sub

Trim / LTrim / RTrim함수
지정된 문자열의 왼쪽에 공백이 없는(LTrim), 오른쪽에 공백이 없는(RTrim) 또는 양쪽 끝에 공백이 없는(Trim) 문자열을 Variant(String)값으로 반환한다
사용법) LTrim | RTrim | Trim(문자식)
사용예)
Private Sub Form_Click()
Dim MyString, TrimString
MyString = " <-Trim-> " ' 문자열을 초기화합니다.
Print Len(MyString) '문자열크기가 12
Print LTrim(MyString) ' "<-Trim-> "출력
Print RTrim(MyString) ' " <-Trim->" 출력
Print LTrim(RTrim(MyString)) ' "<-Trim->"출력
Print Trim(MyString) ' "<-Trim->"출력
TrimString = Trim(MyString)
Print Len(TrimString) '문자열크기가 8이 됬다
End Sub
 
Option Compare 문
문자열 데이터가 비교될 때 사용하는 기본 비교 메서드를 선언하기 위해 모듈 수준에서 사용.
사용법) Option Compare {Binary | Text | Database}
Option Compare 문을 사용할 경우 모든 프로시저 앞의 모듈에 두어야 한다.
Option Compare 문은 모듈에 대한 문자열 비교 메서드(Binary, Text, Database등)를 제공한다. Option Compare 문을 포함하지 않는 모듈의 기본값 텍스트 비교 메서드는 Binary이다.
Option Compare Binary는 문자의 내부 이진 표현 방식에 의한 정렬 순서에 따른 문자열 비교값을 갖는다. Microsoft Windows에서는 코드 페이지에 따라 정렬 순서가 결정되며, 이진 정렬 순서는 다음과 같다.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text는 사용자의 시스템정보(국가별설정)에 따른 대/소문자 구분 텍스트 정렬 순서에 따른 문자열 비교값을 갖는다. Option Compare Text에서 같은 문자를 정렬할 경우 아래의 텍스트 정렬 순서를 따른다.
(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)
Option Compare Database는 Microsoft Access에서만 사용할 수 있습니다. 정렬 순서에 따른 문자열 비교 값은 문자열 비교가 일어난 데이터베이스의 현지 ID(국가별설정 ID)가 결정한다.
 
Asc함수
문자열에서 첫 글자에 해당하는 문자 코드를 나타내는 Integer 값을 반환한다.
사용법) Asc(문자식)
사용예)
Private Sub Form_Click()
Dim MyNumber
MyNumber = Asc("a")
Print MyNumber ' 97을 반환
MyNumber = Asc("Apple")
Print MyNumber ' 65를 반환.
End Sub

Chr함수
지정된 문자 코드와 관련된 문자가 포함된 String 값을 반환한다.
사용법) Chr(문자코드)
사용예)
Private Sub Form_Click()
Dim MyChar
MyChar = Chr(65)
Print MyChar ' A를 출력
MyChar = Chr(97)
Print MyChar ' a를 출력
MyChar = Chr(62)
Print MyChar ' >를 출력
MyChar = Chr(37)
Print MyChar ' %를 출력
End Sub
문자코드 중 0번부터 31까지 문자는 인쇄할 수 없는 표준 ASCII 코드임. 예를 들어 Chr(10)은 라인 피드 문자를 반환한다. 문자코드의 표준 범위는 0부터 255까지 이다.