본문 바로가기
코인/업비트API

VBA에서 regexmatch(정규식) 를 이용한 코인 거래소 API 파싱하기

by 큐브빌드 2021. 6. 17.
반응형

이전에 jsonparse를 사용하여 파싱을 해봤습니다.

 

코인 거래소 (업비트 코인원 빗썸 등) API 엑셀 파싱 사용하기 - VBA json 파싱 (tistory.com)

 

코인 거래소 (업비트 코인원 빗썸 등) API 엑셀 파싱 사용하기 - VBA json 파싱

JSON 규칙 사실 이 부분은 어떻게 작성할지 고민을 많이 했습니다. 많은 코인 거래소 API는 json으로 되어있으며 해당 json 값을 파싱 해서 사용해야 합니다. json 값이라고 해서 특별할건 없습니다.

downupup.tistory.com

 

하나 바이낸스 같은 경우 보내는 값이 많아서 jsonparse가 시간이 오래 걸렸습니다.

 

어떻게 하면 좋을까 고민하다가 오토 핫키에서 사용하는 regexmatch를 사용하게 되었습니다.

 

참조 사이트

코드는 아래와 같습니다.

Function RegexExtract(ByVal text As String, _

                      ByVal extract_what As String, _

                      Optional seperator As String = "") As String



Dim i As Long, j As Long

Dim result As String

Dim allMatches As Object

Dim RE As Object

Set RE = CreateObject("vbscript.regexp")



RE.pattern = extract_what

RE.Global = True

Set allMatches = RE.Execute(text)



For i = 0 To allMatches.count - 1

    For j = 0 To allMatches.Item(i).submatches.count - 1

        result = result & seperator & allMatches.Item(i).submatches.Item(j)

    Next

Next



If Len(result) <> 0 Then

    result = Right(result, Len(result) - Len(seperator))

End If



RegexExtract = result


End Function

VBA에서 와일드 카드 사용 = regexmatch

라고 생각하시면 될 것 같습니다.

 

엑셀에서 사용하던 와일드 카드가 있습니다.

 

필요한 부분을 찾아낼 수 있는것이죠

 

 

 

 

 

 

 

 

예시를 하나 들어보겠습니다.

 

A1에 있는 텍스트 중 다 와마 사이에 있는 모든 것을 표현하는 방법입니다.

RegexExtract(A1 , "다(.*) 마"

(.*) 이 부분이 쉽게 생각해서 *(=모든 것) 동일한 와일드카드입니다.

 

.(=점) : 어떤 문자건 상관없다
* : 전부다 , 모든 것
( ) : 괄호 속의 내용을 하나의 텍스트로 묶음

이기 때문에 다와 마 사이의 어떤 문자이건 상관없이 모든 것을 하나의 텍스트로 나타내는 것입니다.

 

 


업비트 거래소에서 사용 방법 예시

[{"currency":"KRW", "balance":"1000000.0", "locked":"0.0", "avg_buy_price":"0", "avg_buy_price_modified":false, "unit_currency":"KRW"}, {"currency":"BTC", "balance":"2.0", "locked":"0.0", "avg_buy_price":"101000", "avg_buy_price_modified":false, "unit_currency":"KRW"}]

업비트에서 이러한 텍스트가 나왔습니다.

 

1. 가장 먼저 할 것은 "(따옴표)를 제거하는 것입니다.

 - 이유는 엑셀에서 따옴표는 처리하기가 귀찮습니다. (따옴표 내부에 있는 것을 텍스트로 인식하기 때문입니다.)

 - VBA에서 제거 방법

더보기

사용 텍스트 = replace(텍스트 , """" , "")

텍스트 = 업비트 API를 통해 나온 값

사용텍스트 = 텍스트에서 따옴표를 제거한 값

2. balance 값을 알고 싶다면 

 - balance: 와 , locked: 사이의 값을 들고 오면 됩니다.

 - balance:(.*), locked입니다.

 - 하지만 결괏값에 문제가 있습니다. 왜냐면 locked라는 텍스트가 2개가 있기 때문입니다.

 - 그래서 아쉽지만 다른 방법으로 진행합니다.

 

함수 식을 설명하자면

 

balance:([0-9]*. [0-9]*)
찾으려고 하는 텍스트 그 자체입니다.
balance:([0-9]*. [0-9]*)
텍스트 뒤에 오는 숫자 전부다
balance:([0-9]*. [0-9]*)
.(=점) 숫자 이후 어떠한 텍스트 1개 , 소수점을 표시하는. 때문에 필요합니다.
balance:([0-9]*. [0-9]*)
소수점 이후 또 연결되어 있는 모든 숫자
balance:([0-9]*. [0-9]*)
위 조건을 묶음

 

 

 

 

이런 의미입니다.

 

따라서 balance 값이 2개입니다.

 

KRW와 BTC 그리고 그것을 구분하는 인자를 "|"으로 입력한 것입니다.

 

이렇게 파싱을 사용할 수 있습니다.

반응형

댓글