본문 바로가기
개발/개발지식

[개발지식] sms 문자를 파싱해서 정리해보자

by 핸디(Handy) 2022. 4. 24.

들어가며

삼성전자 또는 LG에서 혼수로 가전제품을 구매하게 되면 상품권, 캐시백을 통해 혜택을 줍니다. 
일반적으로 혜택 금액은 수백만 원이고 , 그에 따라 실구매가랑 결제금액이 차이가 납니다.

그런데 이게 왜 개발글이냐 하면,

상품권을 직접 지료상품권으로 주는 경우도 있지만 저의 경우에는 문자로 받았습니다. 

요런 형식의 문자

근데 문제가 되는게 이런 문자를 1만 원권~ 10만 원권으로 총 250만 원 73개의 문자로 받았습니다.

그래서 이걸 직접 가서 지료상품권으로 바꿔야 하는데 문자로 관리하기가 불편해서 이걸 Excel로 옮기는 과정을 한번 해보았습니다.

Step 1 : 문자들 뽑기

일단 저는 안드로이드폰임으로 문자를 가져오는데 앱의 도움을 빌렸습니다.

사용한 앱은 SMS Backup & Restore 이고 검색해보면 세세한 사용방법이 나오니 일단 백업 파일부터 만들어봅시다.

팁이라면 모든 핸드폰번호를 백업하기보다는 상품권이 온 번호만 선택해서 백업하는 게 좋습니다.

 

SMS Backup & Restore - Google Play 앱

SMS 및 MMS 메시지와 통화 기록을 백업 및 복원하는 간단한 앱입니다.

play.google.com

그래서 결과물로는 XML 파일이 하나 나옵니다. 그런다음 컴퓨터로 빠르게 옮겨보겠습니다.

데이터 이동은 카톡으로!

Step 2 : 문자열 파싱

xml형식으로 값이 오고 vsc로 읽어보면 아래와 같은 형식입니다.

xml 형식의 문자들

smses 태그 아래에 mms로 하나씩 들어옵니다. smses 태그 앞에 count가 mms 개수입니다.

그리고 그 아래에 parts에 part를 보면 원하는 값이 보입니다. 다른 값은 다 필요 없고 쿠폰번호 및 유효기간 등만 필요합니다.

이제 이 값을 전체 복사하고 편하게 확인하기 위해 크롬 콘솔에 넣고 test에 할당하여 사용하겠습니다.

그리고 우리가 원하는 값만 가져오기 위해 이제 우리의 영원한 형님 규식이형의 도움을 빌려봅시다.

정규식은 쿠폰번호와 상품명 바로 다음인 교환처까지를 파싱 하면 될 듯합니다.

그다음에 &#10으로 문자열을 분리하면 됩니다. (&#10는 줄 바꿈을 나타내는 특수문자입니다)

그리고 이쁘게 보기 위해 console.table로 찍어줍니다.

console.table(test.match(/쿠폰번호.*교환처/g).map((item)=> item.split("&#10")))

cosole.table로 찍은 값

값이 깔끔하게 나왔네요. 정확히 3번 값인 교환처 내용은 필요 없는데 규식이형 바꾸기 귀찮으니 엑셀 가서 지우면 됩니다.
이제 이 값을 엑셀로 옮기면 됩니다.

Step 3 : 엑셀로 옮기기

엑셀로 옮기는 법은 아주 간단합니다.

index부터 끝까지 드래그한 다음에 ctrl+c로 복사를 한 뒤에 excel 가서 붙여 넣기 하면 됩니다.

table에서 복사
excel에서 붙여넣기

그리고 이제 필요 없는 셀을 지우고 프린터 해서 가져가면 완성입니다.!!

마치며

이번 글을 쓴 이유는 어디서 본지는 기억이 안 나는데,

어떤 데이터 분석가님이 아들의 축구경기를 분석하여 실생활에 사용해본 경험기?를 읽고 나도 내 개발력을 실생활에 사용해본 경험을 해보자 싶어서 이번에 굳이 해봤습니다. ㅋㅋㅋ

그냥 엑셀로 하나씩 타이핑해도 괜찮았는데 70여 개를 하려니 너무 귀찮았고, 혹시 빼먹으면 몇만 원이 날아가는데 그걸 일일이 또 찾는 것도 일이라 나름의 자동화를 해봤습니다.

p.s 이걸 앱으로 만들어볼까도 생각했는데, 굳이 얼마나 쓸까 싶기도 해서 그냥 블로그로만 남깁니다.

댓글