크리에이티브 커먼즈 라이선스
Creative Commons License
파싱이란 가공되지 않은 데이터에서 원하는 특정한 문자열을 빼내는 작업이에요.
뭐, 좀 더 말하자면 특정 문법에 맞는지 확인하는 작업인데 저흰 여긴 필요없으니 패스!

파싱은 상황에 따라서 어떤 함수를 쓰는가가 달라져요.
음.. 몇가지 상황을 적어보자면

1. 뽑아올 문자열이 왼쪽에 위치해 있을 경우 ( 상폭이|마인드빙구 )
2. 뽑아올 문자열이 오른쪽에 위치해 있을 경우 ( 마인드뽀큐머겅|상폭이 )
3. 뽑아올 문자열이 문자열 사이에 위치해 있을 경우 ( 마인드|상폭이|두번머겅 )
4. 뽑아올 문자열이 특정 패턴 사이에 위치해 있을 경우 ( 마인드a상폭이a호호호a하하하 )

대부분 3번 상황이 대체로 많을꺼에요, 암. 거의 3번 상황일꺼에요.

1번같은 상황은 Left$() 함수로 쉽게 처리가 되요.
Left$()함수는 왼쪽에서부터 지정한 길이만큼 뽑아오는 함수에요.

Left$(str As String, Length As Integer) As String
 str는 뽑아올 문자열이 들어있는 데이터를 받는 인자에요.

Left$(str As String, Length As Integer) As String 
 Length는 왼쪽에서부터 얼마나 뽑아올것인가를 정하는 인자에요.

 Ex) Left$("상폭이|마인드빙구", 3) = 상폭이


2번같은 상황은 Right() 함수로 쉽게 처리가 되요.
Right$()함수는 오른쪽에섯부터 지정한 길이만큼 뽑아오는 함수에요.

Right$(str As String, Length As Integer) As String
 str는 뽑아올 문자열이 들어있는 데이터를 받는 인자에요.

Right$(str As String, Length As Integer) As String 
 Length는 오른쪽에서부터 얼마나 뽑아올것인가를 정하는 인자에요.
 
 Ex) Right$("마인드뽀큐머겅|상폭이", 3) = 상폭이

3번같은 상황은 Mid$() 함수를 쓰는거에요.
Mid$()함수는 시작위치에서부터 지정 길이만큼 뽑아오는 함수에요.

Mid$(ByVal str As String, ByVal Start As Integer, Optional ByVal Length As Integer) As String
 str는 뽑아올 문자열이 들어있는 데이터를 받는 인자에요.

Mid$(ByVal str As String, ByVal Start As Integer, Optional ByVal Length As Integer) As String
 Start는 뽑아올 문자열의 시작 위치에요, str의 길이보다 크면 ""를 반환하게 되요.

Mid$(ByVal str As String, ByVal Start As Integer, Optional ByVal Length As Integer) As String
 Length는 뽑아올 문자열의 길이에요, 생략이 가능한데 생략을 하면 시작 위치부터 끝까지 반환하게 되요.

 Ex) Mid$("마인드|상폭이|두번머겅", 5, 3) = 상폭이


그런데 위에서 정리해준 예제들은 길이가 고정적인 문자열을 뽑을때나 유용해요.
길이가 가변적인 문자열을 뽑을땐 InStr이라는 함수도 함께 쓰이게 되요.
이 InStr라는 함수는 해당 문자열이 어디에 있는지 위치를 반환해주는 함수에요.

InStr([Start], [String1], [String2], [Compare As VbCompareMethod])
 [Start]는 시작할 위치를 정하는 인수에요, 생략하게 되면 첫째 문자서부터 시작해요.

InStr([Start], [String1], [String2], [Compare As VbCompareMethod])
 [String1]은 검색되는 문자열이 들어가는 곳이에요.

InStr([Start], [String1], [String2], [Compare As VbCompareMethod])
 [String2]는 검색할 문자열이 들어가는 곳이에요.

InStr([Start], [String1], [String2], [Compare As VbCompareMethod])
 [Compare]는 문자열을 비교할 형식을 지정하는 거에요, 생략을 하게 되면 vbBinaryCompare로 설정되고 설정 방법은 아래와 같아요.
 vbTextCompare : 텍스트 비교
 vbDatabaseCompare : DB 비교
 vbBinaryCompare : 이진 비교

 Ex) InStr("마인드바보상폭이천재", "상폭이") = 6
 ※ 1부터 숫자를 세는거에요!

이 InStr() 함수를 이용하여 시작위치를 찾고, 끝날 위치를 찾을 꺼에요.
그렇게 되면 길이는 상관이 없게 되겠죠.

길이가 가변적인 상황에서의 1번 상황은 Left$(), InStr() 함수로 쉽게 처리가 되요.
Left$("상폭이는천재마인드는바보", InStr("상폭이는천재마인드는바보", "마인드") - 1) = 상폭이는천재
여기에서 포인트는 InStr의 String2 인자엔 뽑아올 문자열의 뒷문자를 쓴다는거죠!
상폭이는천재라는 문자열 뒤에 있는 마인드를 써서 끝날 위치를 찾고 그대로 쓰면 상폭이는천재마 까지 나오기 때문에 - 1를 해줘요.

2번 상황은 Right$(), InStrRev() 함수로 쉽게 처리가 되요.
InStrRev()함수는 문자열에서 오른쪽에서부터 찾을 문자열을 찾는 함수에요.

InStrRev(StringCheck As String, StringMatch As String, [Start As Long = -1], [Compare As VbCompareMethod])
 StringCheck는 검색되는 문자열이 들어가는 곳이에요.

InStrRev(StringCheck As String, StringMatch As String, [Start As Long = -1], [Compare As VbCompareMethod])
 StringMatch는 검색할 문자열이 들어가는 곳이에요.

InStrRev(StringCheck As String, StringMatch As String, [Start As Long = -1], [Compare As VbCompareMethod])
 [Start]는 시작할 위치를 정하는 인수에요, 주의할 것은 왼쪽에서부터에요.

InStrRev(StringCheck As String, StringMatch As String, [Start As Long = -1], [Compare As VbCompareMethod])
[Compare]는 문자열을 비교할 형식을 지정하는 거에요, 생략을 하게 되면  vbBinaryCompare로 설정되고 설정 방법은 아래와 같아요.
 vbTextCompare : 텍스트 비교
 vbDatabaseCompare : DB 비교
 vbBinaryCompare : 이진 비교

 Ex) InStrRev("마인드바보상폭이천재", "바보") = 4
 ※ 0부터 숫자를 세는거에요!

이 InStrRev() 함수와 Right$() 함수를 이용하면 -
Right$("마인드바보상폭이천재", InStrRev("마인드바보상폭이천재", "바보") + 1) = 상폭이천재
InStrRev()의 결과값에 + 1를 해주는 이유는 InStrRev는 InStr와는 다르게 0부터 숫자를 세기 때문이에요.


3번 상황은 Len(), Mid$(), Left$(), InStr() 함수로 쉽게 처리가 되요.
Len()함수는 문자열의 길이를 재는 함수에요.

Len(Expression)
 Expression는 길이를 셀 문자열을 넣는 곳이에요.

 Ex) Len("상폭이") = 3

Mid$()로 뽑아올 문자열의 시작부터 문자열의 끝까지 뽑고
Left$()로 뽑아올 문자열의 끝까지 뽑아오는게 소스 설명이에요.

Result = Mid$("asdf상폭이fdsa", InStr("asdf상폭이fdsa", "asdf") + Len("asdf")) : Result = 상폭이fdas
Result = Left$(Result, InStr(Result, "fdsa") - 1) : Result = 상폭이

Len() 함수로 asdf의 길이를 재고 더해준 이유는 이제 알겠죠?


그리고 - 3번 상황은 또 Split() 이라는 함수로도 처리 할 수 있어요.
Split(Expression As String, [Delimiter], [Limit As Long = -1], [Compare As VbCompareMethod])()
 Expression는 패턴이 있는 문자열을 넣는 인자에요.

Split(Expression As String, [Delimiter], [Limit As Long = -1],  [Compare As VbCompareMethod])()
 [Delimiter]는 패턴 문자열을 넣는 인자에요, 생략이 " "를 기준으로 잘라요.

Split(Expression As String, [Delimiter], [Limit As Long = -1],  [Compare As VbCompareMethod])()
 [Limit]는 몇번이나 자를 것인가 정하는 인자에요, 생략시 모두 잘라요.

Split(Expression As String, [Delimiter], [Limit As Long = -1],  [Compare As VbCompareMethod])()
 [Compare]는 문자열을 비교할 형식을 지정하는 거에요, 생략을 하게 되면  vbBinaryCompare로 설정되고 설정 방법은 아래와 같아요.
 vbTextCompare : 텍스트 비교
 vbDatabaseCompare : DB 비교
 vbBinaryCompare : 이진 비교
 
 Ex) Array = Split("마인드a상폭이a호호호a하하하", "a")
  Array(0) = "마인드"
  Array(1) = "상폭이"
  Array(2) = "호호호"
  Array(3) = "하하하"

그런데 여기에서 중요한 사실은 Split() 함수는 바로 배열 함수라는 것이에요.
배열 함수란, 반환 값을 배열로 리턴하는 함수라는 거에요.
우리는 이것을 이용할 거에요!
배열은 인덱스를 넣어 원하는 번째의 값을 가져올 수 있죠.
즉, Split() 함수에 인덱스를 넣어서 원하는 번째의 값을 가져올 수 있다는 거에요!

이렇게 4번 상황을 쉽게 처리할 수 있어요.

 Ex-2) Split("마인드a상폭이a호호호a하하하", "a")(1) = "상폭이"

가 되겠죠!
단지 배열 변수에 넣고 뽑지 않아도 바로 뽑을 수가 있어요.
이 Split() 함수를 중첩 사용을 하게되면 3번 상황도 쉽게 처리할 수 있죠.

 Ex-3) Split(Split("asdf상폭이fdsa마인드", "asdf")(1), "fdsa")(0) = "상폭이"



출처: http://kiscuski.tistory.com/entry/파싱Parsing을-배워보자-1편 [위지윅의 프로그래밍]

'Java > Explain' 카테고리의 다른 글

접근제한자.  (0) 2017.06.24
[Java] Serialize (객체 직렬화)  (0) 2015.11.20
Log4J 에서 isDebugEnabled()로 체크해줘야 하는 이유  (0) 2015.11.20

+ Recent posts