본문으로 바로가기

[엑셀 코딩] MIDB 사용 방법 및 파서 만들기

category 프로그래밍 2022. 11. 13. 21:43
반응형

오늘은 엑셀의 MID 함수를 통해서 파서를 제작하는 방법에 대해서 소개를 해드리려고 합니다. 먼저 MID 함수의 포맷에 대해서 알아보겠습니다.

 

 

MID, MIDB 함수 포맷

MID(텍스트, 시작, 문자 수)

MIDB(텍스트, 시작, 바이트 수)

 


 

e.g) start middle end 해당 문자의 start, middle, end를 MID 함수로 표현하면?

1) start  = MID(str, 1, 5) 텍스트에서 1번째 인덱스의 문자 5개

2) middle = MID(str, 7, 6) 텍스트에서 7번째 인덱스의 문자 6개 

3) end = MID(str, 14, 6) 텍스트에서 14번째 인덱스의 문자 6개

 

MID 함수와 비슷한 함수로 LEFT, RIGHT 함수가 있지만 파서를 제작 시 MID 함수가 더 편리해서 저는 MID를 사용하고 있습니다. 엑셀의 장점인 자동 채우기를 사용하기 쉽기 때문입니다. 

 


 

e.g)  위의 예제 처럼 Parser(파서)를 만들려면 MID 함수와 MIDB 함수 중 어떤 것을 사용해야 할까?

MIDB 함수를 써야합니다. MID의 경우 문자 수로 표현을 하고 MIDB는 바이트 수로 표현을 하는 특징을 갖고 있습니다. 한글의 경우 프로그램에서 2byte로 표시되고 영어는 1byte로 표시가 됩니다.

 

메모리 맵

MID 함수를 쓰게 되는 경우 파싱 시 위에 메모리를 2byte, 1byte, 2byte 단위로 중구난방으로 쪼개게 됩니다. 딱 봐도 뭔가 이상한 느낌입니다. 메모리 주소의 최소 단위인 byte로 표현할 수 있도록 MIDB를 사용해야 합니다.

 


 

e.g)  안녕 hellow를 MID & MIDB 함수로 단어별로 파싱

1. MID 함수를 사용하는 경우

1) 안녕 =MID(C3, 1, 2) 텍스트에서 1번째 인덱스의 문자 2개

2) hellow =MID(C3, 4, 7) 텍스트에서 4번째 인덱스의 문자 7개

 

2. MIDB 함수를 사용하는 경우

1) 안녕 = MIDB(C3, 1, 4) 텍스트에서 1번째 인덱스에서 4바이트

2) hellow = MIDB(C3, 6, 6) 텍스트에서 6번째 인덱스에서 6바이트

 

 

 

엑셀 MIDB 함수를 이용한 파서

엑셀 MIDB 파서

파서의 요소의 크기(byte)를 알고 있다는 가정하에 엑셀의 MIDB 함수를 이용하면 위에와 같이 간단하게 파서를 만들 수 있습니다.

 

 

 

엑셀 MIDB 파서 규칙 만들기1

MIDB 파서를 만들기 위해서 문자, 인덱스, 바이트 정보가 필요한데 막연히 규칙을 만들려고 하려면 복잡해 보입니다.

 

 

 

엑셀 MIDB 파서 규칙 만들기2

자동 채우기를 이용해서 먼저 MIDB의 요소들 위에와 같이 만들어 주면 쉽게 보입니다.

 

첫 번째 인덱스 셀: 1 첫 번째 인덱스 바이트는 시작 위치로 default 1입니다. 

1

 

두 번째 인덱스 셀: 6 두 번째 인덱스는 첫 번째 문자의 다음 바이트입니다. 

첫 번째 인덱스(1) + 첫 번째 문자 크기(6) = C6 + D6

= C6 + D6

 

세 번째 인덱스 셀: 8 세 번째 인덱스는 두 번째 문자의 다음 바이트입니다.

두 번째 인덱스(7) + 두 번째 문자 크기(1) = C7 + D7

= C7 + D7

 

MIDB(B$3,C6,D6)  

MIDB(B$3,C7,D7)  

마지막으로 각 요소가 채워졌기 때문에 자동 채우기를 하면 엑셀을 이용한 파서가 완성이 됩니다.

반응형