안녕 하세요 ?
표제의 건에 대해 AllReplace 를 하면 몇건이 수정 되었는지, FindAll 을 하면 몇것이 찾아졌는지 알고 싶은데 어떻게 해야 되는지요 ? 별도의 count logic 을 구현해야 하는지 알고 싶습니다.
안녕하세요.
현재 제공되고 있는 API에서는 Replece, Find 결과 count를 알 수가 없습니다…
다른 추가적인 질문 있으시면 언제든지 문의주세요
그러면 ReplaceDlg 를 이용해 반복 하면서 count 하는 방법으로 해야 하는지요 ? 그러면 GetPos 을 통해 현재 위치가 끝에 와 있는지 알아야 하는데 문서의 마지막 위치는 어떻게 알 수 있는지요 ?
본건에 대해 다음과 같이 구현 하고자 하는데 도움 부탁 드립니다.
- 문서를 열고 처음 위치를 가져와 “처음위치” 에 저장
- 위치를 문서의 마지막으로 이동후 위치 정보를 가져와 “끝위치” 에 저장
- “RepeatFind” 와 “ExecReplace” action 실행후 position 정보를 가져와 “현재위치” 에 저장
- 수정 count 1 증가
- “현재위치” 가 “시작위치” 보다 크면 3. 에서 반복, 아니면 종료
위와 같은 방법으로 하면 되는지 도움 부탁 드립니다.
그리고 API 문서에 보니 찾고 난 후에 set 정보가 “List”, “Para”, “Pos” 이렇게 있는데 List 와 Para 에 대해 어떻게 활용 하는지 잘 모르겠습니다.
안녕하세요.
문서의 마지막 위치는 MovePos(3, 0, 0)
3 = moveBottomOfFIle
로 이동 후, GetPos를 통해 list, para, pos 값으로 마지막 위치 값을 알 수 있습니다.
List는 캐럿이 위치한 문서 내 ListID, 한/글 내에서 문단과 컨트롤이 연결된 문서 내 구조를 뜻하고
Para는 캐럿이 위치한 문단 ID
Pos는 문단 내 캐럿의 위치를 나타냅니다.
제공되는 API로 찾기, 바꾸기 건수를 확인하는 건 어려움이 있으나 말씀해주신 대로라면 비슷하게 구현은 가능할 것으로 보입니다.
제가 처음에 생각할 때 찾기/바꾸기를 하고 못찾으면 Forward 또는 Backward mode 에 따라 위치가 처음이나 끝으로 이동되는 줄 알았습니다. 그런데 Test 를 해 보니 못찾을 경우 위치가 변동되지 않았습니다. 프로그램이 찾기를 반복하느라 looping 이 도는데 그 원인을 찾고 보니 바고 그거였습니다. 그래서 List 가 크고 작으냐, Para 가 크고 작으냐, Pos 가 크로 작으냐를 check 할 필요없이 pset 값이 동일하면 못찾은 것으로 처리하니 정확히 처리가 됩니다. 그런데 이런 중요한 내용이 어디에 설명이 되어 있는지요 ? 개발관련 한컴의 문서를 보면 이런 기본적인 내용이 대단히 아쉽습니다.
MovePos(2, 0, 0) 이면 처음으로 위치를 처음으로 설정하는 것이고 당연히 List, Para, Pos 값이 0, 0, 0 으로 설정이 될줄 예상 했는데 0, 0, 16 으로 나옵니다. Pos 가 0 이 아니라 다른 위치로 나오는 이유를 알고 싶습니다.
FindReplace parameter set 에 보면 정규식으로 찾기가 있습니다. 그러면 찾을문자에 정규식을 넣으면 될 것으로 예상 하는데 잘 안되네요. 정규식 중 맨압의 “^” 와 맨 뒤의 “$” 를 포함해야 되는지 빼야 되는지, 사례를 하나 보여 주시면 도움이 되겠습니다.
정규식 시작문자와 종료문자를 빼야 되는 것으로 확인했습니다.
감사 합니다.
문제 해결에 도움이 되셨는지 모르겠습니다. 앞으로는 더 빠른 답변을 드릴 수 있도록 노력하겠습니다. 아울러 다양한 정보를 공유해 주셔서 감사합니다.
관심과 기대에 부응하는 한컴디벨로퍼가 되겠습니다.
한컴디벨로퍼 드림
정규식 이라고 하면 Java 문서에 나오는 Pattern 기준에 따르는 것으로 생각 하는데 그게 아닌지요 ? 몇가지가 되기에 제가 생각하는 기준으로 처리 하는줄 알았는데 아니네요. 아래 한글은 어떤 정규식 기준을 따르는지, Java 문서에 나오는 기준과 다른지 알고 싶습니다.
안녕하세요.
정규식 표현은 기본적으로는 동일합니다.
부분의 조건식 항목을 참고해주세요.
정규식이 다르네요. “할\s+때다” 를 “할 때입니다” 로 바꾸고 싶을 때 Java 에서는 이렇게 합니다. 그런데 아래한글은 “할\b+때다” 이렇게 하는군요. 이것 때문에 얼마나 많은 시간을 소비 했는지 모릅니다. 남이 개발한 API 를 사용하는 것은 정말 어렵습니다. 그런데 정규식이라고 하고 왜 다른 규칙을 적용 하는지요 ? 정말 이해가 안됩니다. Java 에는 \b 라는 문자 class 는 word boundary 를 의미 합니다.
MovePos(2, 0, 0) 이면 처음으로 위치를 처음으로 설정하는 것이고 당연히 List, Para, Pos 값이 0, 0, 0 으로 설정이 될줄 예상 했는데 0, 0, 16 으로 나옵니다. Pos 가 0 이 아니라 다른 위치로 나오는 이유를 알고 싶습니다.
…
이 질문에 대한 답변을 안주시네요. 왜 처음 위치가 0,0,16 인지요 ?
정규식과 여러가지 규칙이 다릅니다. 제가 보기에 한컴에서 정규식이라는 용어를 사용하면 개발자들에게 많은 혼란을 주리라 생각 합니다.
안녕하세요. 한컴디벨로퍼입니다.
현재 담당자가 정성껏 작성해주신 내용을 확인하고 있습니다. 조금만 기다려 주세요.
한컴디벨로퍼를 이용해 주셔서 감사합니다.
안녕하세요.
먼저 잘못된 안내를 드려 죄송합니다.
한/글에서는 "조건식"으로 명명되어 있고 기본적으로 "정규식"과 비슷한 패턴으로 정의하고 있으나 동일하지는 않습니다.
도움말과 가이드 문서에서 수정될 수 있도록 전달하도록 하겠습니다.
문서의 가장 첫 위치에서 GetPos를 했을 경우 Pos가 16이 나오는 이유는
SecDef와 ColDef가 정의되어 있는데 사용자에게 보이지는 않습니다. 각각의 size가 8이라 16부터 시작됩니다 .
이에 대한 안내도 가이드 문서에 있어야 할 듯 한데 저도 찾아보니 나오질 않네요.
더 궁금한 점 있으시면 언제든지 문의주세요.
안녕하세요,
현재 한글에서 사용중인 정규 표현식은 MS의 정규 표현식입니다.
MS의 ATL에서 지원하던 CAtlRegExp 클래스의 정규 표현식입니다.
MSDN에서 해당 내용을 제공하고 있었는데, 내려갔는지 찾을수가 없네요 ㅠ …
아래 CodeProject에서 해당 내용을 확인할수 있습니다. 참고부탁드립니다 ^^
감사합니다
"구역 정의"와 "단 정의"라는 두 개의 (일종의) 컨트롤이 숨어있기 때문으로 추정됩니다. 본문의 0,0,0은 0,0,16부터 시작합니다.