해결된 질문
작성
·
1.7K
답변 1
2
GetText 사용법은 익숙해지기 전까지는 다소 생소한 게 사실입니다.
(사실 저도 아직 좀 생소한 부분이 있고, 썼던 패턴만 반복해서 쓰고 있기는 합니다.)
그래도 간단히 GetText의 특징을 말씀드려보면,
GetText는 한 번 실행할 때마다 줄바꿈을 기준으로 상태값과 문자열을 한 문단씩만 리턴합니다.
예를 들어 아래와 같은 문서로 GetText를 실행하면
이런 결과가 나오게 됩니다. (이미지에 대고 우클릭 후 "새 탭에서 이미지 열기"를 누르시면 큰 화면으로 보실 수 있습니다.)
<팁>
참고로 문서 시작부터 탐색을 실행하면 상태값 2와 빈 문자열이 두 차례 리턴되는데요.
이건,(눈에 보이지는 않지만 모든 아래아한글 문서에 기본적으로 삽입되는
"구역 정의"와 "단 정의" 컨트롤 때문입니다. (숨겨져 있습니다.)참고로 문서 시작점에서 GetPos()를 실행할 때에도
(0, 0, 0)이 아닌, (0, 0, 16)을 리턴하는데요.
이것도 구역 정의와 단 정의가 각각 8글자씩 공간을 차지하고 있기 때문입니다.마지막 TMI로, 문단 안에 특정 컨트롤(누름틀 등)이 삽입되어 있으면
GetText 실행시 해당 컨트롤에서 문자열을 끊어서 리턴합니다.
GetText가 리턴하는 첫 번째 요소인 "상태값"이 의미하는 바는 아래와 같습니다.
보통은 한/글 문서가 몇 개의 문단으로 구성되어 있는지 모르기 때문에
GetText는 일반적으로 while문과 함께 쓰이게 됩니다.
그 때 while문의 종료 조건으로 사용하기 가장 적절한 게 상태값입니다.
문서의 끝에 다다르면 무조건 상태값 0 또는 1을 리턴하니까요.
<팁>
언제 0을 리턴하고, 언제 1을 리턴하는지 초반엔 애매할 수 있는데요.
글자가 있는 문단이나 컨트롤(표나 그림 등)로 문서가 종료되는 경우에는
0을 리턴합니다. (위 1번 항목의 예제가 0으로 종료되었죠?)
그리고 빈 문단(글자 없이 줄바꿈만)으로 문서가 종료되는 경우에는
1을 리턴합니다. 예를 들면 아래와 같은 경우입니다.
GetText는 InitScan 옵션을 통해 다양한 방법으로 활용할 수 있습니다.
API문서에서 InitScan 부분을 보면 두 가지 파라미터를 통해
정말 다양하게 GetText를 사용할 수 있게 해 주는데요.
예를 들면, 위 조합을 활용해서
"선택한 본문범위나 특정 셀의 문자열만 가져오기(Range=0xff)",
"표나 글상자의 값은 제외하고 문자열 가져오기(option=0x0)",
"문단 내 캐럿 위치부터 해당 라인 뒷쪽까지만 문자열 가져오기(Range=0x02)"
식으로 다양하게 활용해볼 수가 있습니다.
특히 GetText를 더욱 강력하게 만들어주는 메서드가 있는데요.
바로 hwp.MovePos(201)입니다.
위 메서드는 현재 GetText로 탐색중인 문단으로 캐럿을 옮겨줍니다.
예를 들면 GetText로 글머리나 문단 내 텍스트를 탐색해서,
조건에 부합하면 해당 문단으로 커서를 옮겨서 다소 복잡한 수정을 하고,
다시 InitScan과 GetText를 반복하는 작업패턴이 있기도 합니다.
(TMI) 개인적으로 GetText와 정규표현식 모듈인 re의 조합은
문서 포맷을 마음대로 수정할 수 있는 가장 강력한 도구라고 생각합니다.
설명은 이 정도로 마치겠습니다.
GetText가 리턴하는 값들이 때로는 직관적이지 않은 부분도 있고,
InitScan의 파라미터 조합이 너무 다양하기 때문에
처음엔 익숙해지는 데 시간이 다소 걸리지만,
막상 필요한 부분에 GetText를 직접 적용해보시면
금세 이해하고 활용하실 수 있게 될 겁니다^^
추가 질문 있으면 아래 타래로 남겨주세요.
성심성의껏 답변 드리겠습니다.
다시 한 번 수강해주셔서 감사드리고,
즐거운 업무자동화 하시길 바랍니다^^
행복한 하루 되세요!
아..이제 이해가 되기 시작하네요..항상 성실한 답변 감사드립니다. ^.^