특수문자(일어) 입력에 관하여 질문드립니다.

게시판 IDL Q&A 특수문자(일어) 입력에 관하여 질문드립니다.

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #997 Reply
      sabugisl
      회원

      자료를 받아서 다른 변수와 비교를 하고 싶은데 그 자료가 다음과 같이 되어있습니다.

      140|2013|01|12|だ す|だ こ|こ1210-こわ1500-1558. て1552-1655. こ1650-こゎ1800-こわ2100-こわ2400-|=
      140|2013|01|12|だ す|だ こ|こ1210-こわ1500-こゎ1800-こわ2100-こわ2400-|=
      232|2013|01|12|や だ て ぅ ゃ|や て こ だ ぐ|て0125-てゎ0300-0535. て1430-てゎ1500-てわ1800-1820. こ1815-こわ2100-よぐ2320-よるぐ2330-ぐわ2400- ぅ0640-0655..|=
      232|2013|01|12|や だ て ぅ ゃ|や て こ だ ぐ|て0125-てゎ0300-0535. て1430-てゎ1500-てわ1800-1820. こ1815-こわ2100-よぐ2320-よるぐ2330-ぐわ2400- ぅ0640-0655.|=

      이 데이터를 읽어서 그 시간에 따라 특수기호에 해당하는 변수를 설정하고 싶은데요..
      예를 들어 だ 에 해당하는 것은 1이나 a1 등의 변수로 지정하고 싶습니다.
      다른 언어를 문자로 인식하여 변수에 넣을 수 있는지 궁금하고..
      또 이렇게 열이 가기 다르고 포맷이 각기 다른 데이터를 if 문 등으로 제어해서 읽는 것이 가능할지 궁금합니다
      감사합니다

    • #999 Reply
      Sangwoo
      회원

      우선 후자의 질문에 대해서는 예전 IDL User 게시판에 비슷한 이슈에 관한 글이 있어서 참조를 해보시면 어떨까 합니다. 링크는 아래와 같습니다.

      http://www.spweather.com/idluser/bbs/view.php?id=idltip&page=4&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=100

      그리고 전자의 질문에 대해서는 제가 일어를 써본 적은 없지만 한글, 중국어 등의 아시아 지역 언어들이 다 같은 계열의 문자이므로 마찬가지일 것 같은데요. 인식은 가능하지만 글자의 위치 등에 대해서는 영문과 약간 다르게 생각해야 합니다. 이 문제에 관해서는 제가 나중에 정리해서 제 블로그에 글을 올리고 다시 알려드리겠습니다.

    • #1001 Reply
      Sangwoo
      회원

      블로그에 올리기보단 그냥 여기서 답을 드리는게 나을 것 같아서 적어봅니다. 한국어, 일어, 중국어와 같은 2바이트 유니코드 문자들도 IDL에서 얼마든지 인식이 가능합니다. 예제로 적어놓으신 텍스트의 내용을 담은 원본 텍스트 파일이 있을텐데요. 이 파일로부터 한 줄씩 내용을 읽어서 처리해야 합니다. 일단 첫번째 줄만 읽어서 처리를 해본다고 하면, 다음과 같은 방식의 작업이 이루어져야 합니다. 이 내용에 대한 자세한 설명은 생략합니다.

      ifile = ‘~~.txt’
      nl = FILE_LINES(ifile); 파일내 줄 수 확인
      OPENR, lun, ifile, /GET_LUN
      ss = ”
      READF, lun, ss

      첫번째 줄의 내용은 보면 다음과 같이 되어 있기 때문에 위의 ss라는 변수에도 다음과 같은 내용의 문자값이 들어간 상태입니다.

      140|2013|01|12|だ す|だ こ|こ1210-こわ1500-1558. て1552-1655. こ1650-こゎ1800-こわ2100-こわ2400-|=

      여기서 중간중간에 공백(space)이 존재하는데 이를 마디로 삼아서 분리해내는 작업은 다음과 같이 STRSPLIT 함수를 사용합니다.

      spl = STRSPLIT(ss, ‘ ‘, /EXTRACT)
      HELP, spl

      여기서 HELP의 결과를 보면 spl은 5개의 문자값들을 갖는 배열이 됩니다. 즉, 공백으로 나눠진 마디마디의 문자값들을 담고 있으므로, 가장 첫번째 값인 spl[0]을 출력해보라고 하면 다음과 같이 첫번째 마디의 문자값을 출력할겁니다.

      PRINT, STRLEN(spl[0])
      140|2013|01|12|だ

      여기서 이 문자값의 맨 마지막 부분의 だ라고 된 문자만 따로 추출하려면 STRMID 함수를 다음과 같이 사용합니다.

      extr = STRMID(spl[0], 15)
      PRINT, extra

      여기서는 spl[0]라는 문자에 대하여 16번째(인덱스로는 15)부터 끝까지의 문자들을 모두 뽑아내라는 의미입니다. 물론 16번째부터 몇 글자를 뽑아내라는 의미의 추가인자를 줄 수도 있습니다. 그런데 이 ‘몇 글자’라는 의미가 영문일 경우에는 스펠 하나당 한 개로 간주되지만, 2바이트 유니코드 언어의 경우에는 3개로 간주가 되는 것 같습니다. 그래서 이 추가인자를 사용해서 추출할 경우에는 다음과 같이 적어줘야 합니다.

      extr = STRMID(spl[0], 15, 3)
      PRINT, extra

      결국 이와 같이 추출된 extr이라는 문자값에 대하여 IF문을 사용하여 원하시는 처리를 하면 됩니다. 예를 들면 다음과 같은 처리도 가능하겠죠.

      IF extr EQ ‘だ’ THEN PRINT, ‘OK’
      OK

      이 내용은 한 줄을 처리할 경우인데, 만약 여러 줄을 한꺼번에 처리하려면 nl만큼 반복을 수행하는 반복문이 사용이 되어야 합니다. 그리고 처리가 다 끝난 후에는 파일을 읽기 위하여 열었던 슬롯번호는 닫아줘야 함을 잊지 말아야 합니다.

      FREE_LUN, lun

    • #1002 Reply
      Sangwoo
      회원

      위의 내용에서 중간에 한 군데가 오타가 나서 정정합니다.

      PRINT, STRLEN(spl[0]) –> PRINT, spl[0]

3 답변 글타래를 보이고 있습니다
'특수문자(일어) 입력에 관하여 질문드립니다.'에 답변달기
글쓴이 정보: