CAFE

공지사항

족보닷컴 소스의 기출문제 보기바꿈에 대하여...

작성자수플러스|작성시간12.02.25|조회수989 목록 댓글 0

아마 회원여러분들께서 족보닷컴에서 유래한 기출문제를 프로그램에 통합하는 경우가 있을 것입니다.

그런데 최근의 족보닷컴의 기출문제는 객관식일 경우 보기의 ①, ②, ③, ④, ⑤ 번호가 작은 그림으로

되어있는 경우가 있더군요.

 

이런경우 일괄입력을 하실 때에 자동 보기 정렬이 안되어 입력하기가 상당히 불편할 것이라고 생각됩니다.

이러한 경우 그림으로 되어 있는 보기 숫자를 유니코드 보기 ①, ②, ③, ④, ⑤로 바꾸고 나서

자동 보기 정렬을 하실 필요가 있을 것입니다.

 

아래에 이러한 작업을 수행하는 스크립트 매크로를 올립니다.

먼저 "자동시작끝"버튼을 이용하여 <문제시작>과 <문제끝>을 정확히 각 문항마다 기록하고

나서 이 스크립트 매크로를 적용하면 각 문항의 작은 그림으로 되어 있는 보기가 모두

①, ②, ③, ④, ⑤의 유니코드 문자보기로 바뀔 것입니다.

 

작동원리)

그림으로 되어 있는   ①, ②, ③, ④, ⑤ 가 상당히 작은 그림이고 이러한 작은 그림은 수학문제 내용에는 또 없다는

특성을 이용하여 작성하였습니다. 각 <문제끝>으로 부터 <문제시작>까지 검색하여

특정한 가로 세로보다 작은 그림들은 차례로 다섯번 삭제하고 나서   ①, ②, ③, ④, ⑤ 유니코드 문자로 다시

채웁니다.

 

이렇게 작동원리를 명시하는 이유는 혹시 원하는 결과가 나오지 않을 때 그 결과를 이해하고 수정할 수 있도록

하기 위함입니다.

 

아래의 스크립트 매크로를 복사하여 아래아 한글 스크립트창의 적당한 번호에 붙여넣기 하여 일괄입력시에

활용하시기 바랍니다. 복사하실 때에는 괄호하나라도 빠트리지 않도록 주의하시기 바랍니다.

그리고 스크립트 매크로를 적용하는 방법은 스크립트 매크로방의 "스크립트 매크로 적용 실례"

영상을 보시면 알 수 있을 것입니다.

 

var M = XHwpMessageBox
var X = HParameterSet.HSet
var S = HParameterSet.HSet
var E = HParameterSet.HSet
var Abs = HParameterSet.HSet
var paraS, paraE, paraAbs ,paraLst
var C , H ,W , N
      
HAction.Run("MoveDocBegin")
HAction.GetDefault("RepeatFind", HParameterSet.HFindReplace.HSet);
 with (HParameterSet.HFindReplace)
    { SeveralWords = 1;
  Direction = FindDir("Forward");
  FindString = "<문제시작>";
  IgnoreMessage = 1;  }
 HAction.Execute("RepeatFind", HParameterSet.HFindReplace.HSet);
      Abs = GetPosBySet()
      ParaAbs = Abs.Item("Para")
     
      HAction.Run("MoveDocEnd")
      S = GetPosBySet()
      ParaLst = S.Item("Para")

      while ((S.Item("Para") - ParaAbs > 2)) { 
 HAction.GetDefault("RepeatFind", HParameterSet.HFindReplace.HSet);
 with (HParameterSet.HFindReplace)
     { SeveralWords = 1;
  Direction = FindDir("Backward");
  FindString = "<문제끝>";
  IgnoreMessage = 1; }
 HAction.Execute("RepeatFind", HParameterSet.HFindReplace.HSet);
      HAction.Run("Cancel")
      E = GetPosBySet()
      ParaE = E.Item("Para")
      HAction.GetDefault("RepeatFind", HParameterSet.HFindReplace.HSet);
 with (HParameterSet.HFindReplace)
    { SeveralWords = 1;
  Direction = FindDir("Backward");
  FindString = "<문제시작>";
  IgnoreMessage = 1;  }
 HAction.Execute("RepeatFind", HParameterSet.HFindReplace.HSet);
      HAction.Run("Cancel")
      S = GetPosBySet()
      ParaS = S.Item("Para")
      SetPosBySet(E)
      X =GetPosBySet()
    
      N=0
     while ( N < 5 && ( X.Item("Para") > ParaS) ) {
      FindCtrl();
      C = CurSelectedCtrl
      X = C.GetAnchorPos(0)
      if (X.Item("List")!=0) {
         break
      }
      if (C.CtrlID == "gso" && ParaE > X.Item("Para")) {
       H = C.Properties.Item("Height")
       W = C.Properties.Item("Width")
       if ( H <1500 && W < 1500 ) {
         C = C.Prev
          HAction.Run("Delete")
          if (N==0) {
          HAction.GetDefault("InsertText", HParameterSet.HInsertText.HSet);
     HParameterSet.HInsertText.Text = "⑤ ";
     HAction.Execute("InsertText", HParameterSet.HInsertText.HSet);
          }
          if (N==1) {
          HAction.GetDefault("InsertText", HParameterSet.HInsertText.HSet);
     HParameterSet.HInsertText.Text = "④ ";
     HAction.Execute("InsertText", HParameterSet.HInsertText.HSet);
          }
          if (N==2) {
          HAction.GetDefault("InsertText", HParameterSet.HInsertText.HSet);
     HParameterSet.HInsertText.Text = "③ ";
     HAction.Execute("InsertText", HParameterSet.HInsertText.HSet);
          }
          if (N==3) {
          HAction.GetDefault("InsertText", HParameterSet.HInsertText.HSet);
     HParameterSet.HInsertText.Text = "② ";
     HAction.Execute("InsertText", HParameterSet.HInsertText.HSet);
          }
          if (N==4) {
          HAction.GetDefault("InsertText", HParameterSet.HInsertText.HSet);
     HParameterSet.HInsertText.Text = "① ";
     HAction.Execute("InsertText", HParameterSet.HInsertText.HSet);
          }
          X = C.GetAnchorPos(0)
          if (X.Item("List")!=0) {
           break
          }
          SetPosBySet(X)
          N = N + 1
        }
        else {
         C = C.Prev
         X = C.GetAnchorPos(0)
         if (X.Item("List")!=0) {
         break
         }
         SetPosBySet(X)
        }
     }
     else {
     HAction.Run("Cancel")
     C = C.Prev
     X = C.GetAnchorPos(0)
     if (X.Item("List")!=0) {
         break
      }
     SetPosBySet(X)
      }
     }
     if ( ParaLst - S.Item("Para") > 2) {
     SetPosBySet(S)
     }
     else {
      break
     }     
     } 

 

PS) 혹 오작동이 일어 난다면 까페에 질문을 올려 주시면 성실히 답변 하겠습니다. 감사합니다.^^

 

 

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼