ExecReplace action 기능 문의

위 Action 을 사용하는 중 이해가 안되는 부분이 있어 문의 합니다.

Program 은 다음 과정을 반복 합니다.
그런데 처음 찾은 문구가 수정되고 형광펜이 칠해질 것이라 생각 했는데

첫번째는 찾기만 하고 Action 이 없습니다.
두번째에 첫번째 찾은 문구에 형광펜만 칠하고 수정이 안되고 다음 문구를 찾는 동작이 동시에 일어납니다.
(Open 된 문서를 보면서 step by step 으로 debugging 시)

  1. ExecReplace
  2. MarkPenShape

그래서 다음과 같이 변경했습니다.

  1. BackwardFind
  2. MarkPenShape

그리고 동일한 file 을 한번더 반복(결국 수정하고 형광펜 칠하는 것이 한번에 안됨)

  1. ExecReplace

여기에서 궁금한 점은 Find 후 Exec 하면 왜 바로 수정이 안되고 그 다음에 되는지요 ?
다음 단계를 반복하면서 처리하는 것이 왜 안되는지요 ?

  1. BackwardFind
  2. ExecReplace
  3. MarkPenShape
2개의 좋아요

안녕하세요,
ExecReplace 액션 실행을 하면 찾은 단어를 바꾼뒤 선택 상태가 유지되지 않기때문에 원하시는 대로 동작 하지 않습니다.
구현하신대로 바꾼뒤 뒤로 바꾼단어를 찾은다음 처리를 해야할것 같습니다.
감사합니다 ^^

2개의 좋아요

bhjung님께서 답변을 달아주셨는데요, 조금만 첨언드리면
찾기 또는 찾아바꾸기를 실행할 때,
캐럿이 어디 위치하고 있는지(찾은 단어 앞에 있는지 뒤에 있는지)를 파악해 두시면
이후 로직을 짜기 훨씬 수월해지는 것 같습니다.

나아가 “찾아바꾸기” API에 의존하기보다,
“찾기” 이후 원하시는 작업을 직접 실행하는 방식으로 코드를 짜보시면
보다 유연하고 직관적으로 처리하실 수 있게 될 것입니다.

예를 들어 "아래 방향"으로 "찾아바꾸기"를 한 번 실행하시면
첫 번째로 찾은 단어를 "바꾸지 않은 상태"로 "단어 끝"에 캐럿이 위치합니다.
(이 때문에 API로 “찾아바꾸기” 실행시에는 첫 번째로 찾은 단어의 바꾸기를 건너뛰게 되네요…)
게다가 "위 방향"으로 찾으시면 단어의 "시작"에 캐럿이 위치합니다.
이런 API스펙들 때문에 찾기방향을 바꾸면서 액션을 실행하면 코드가 상당히 복잡해지게 됩니다ㅜ

지극히 주관적이지만,
제 경우 보고서나 정관 같은 문서에서 찾아바꾸기 비슷한 작업을 코드로 처리할 때는
거의 대부분 아래 세 가지 방법 중 하나로 코딩을 했습니다.

  1. 일괄 문자열교체 작업인 경우에는 무조건 AllDoc 옵션으로 문서 내 일괄 찾아바꾸기 실행

  2. 찾기 이후 일련의 복잡한 과정을 실행하는 경우에는 Find 이후의 액션들을 함수로 만들어 처리

  3. 찾는 번호가 바뀐다거나 정규식이 필요한 경우는 Find 대신 GetText를 이용해서 처리

보통 이 세 가지 케이스 안에서 대부분 해결되었습니다.

도움이 되었길 바랍니다.
새해 복 많이 받으세요!^^