이전에 jsonparse를 사용하여 파싱을 해봤습니다.
코인 거래소 (업비트 코인원 빗썸 등) API 엑셀 파싱 사용하기 - VBA json 파싱 (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 그리고 그것을 구분하는 인자를 "|"으로 입력한 것입니다.
이렇게 파싱을 사용할 수 있습니다.
'코인 > 업비트API' 카테고리의 다른 글
업비트 API 연결하여 엑셀로 거래내역 확인하기 (5) | 2021.06.30 |
---|---|
업비트 거래 수수료 절약하기 API 연결 후 예약주문 프로그램 (0) | 2021.06.28 |
코인 거래소 (업비트 코인원 빗썸 등) API 엑셀 파싱 사용하기 - VBA json 파싱 (1) | 2021.05.16 |
엑셀 업비트 API 실시간 캔들값 엑셀 파일 자동 갱신 - VBA (23) | 2021.05.12 |
엑셀로 업비트 코인 거래하기 업비트 API 적용 - VBA (17) | 2021.05.04 |
댓글