- This topic has 3개 답변, 2명 참여, and was last updated 10 years, 8 months 전에 by Sangwoo.
-
글쓴이글
-
-
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 문 등으로 제어해서 읽는 것이 가능할지 궁금합니다
감사합니다 -
Sangwoo회원
우선 후자의 질문에 대해서는 예전 IDL User 게시판에 비슷한 이슈에 관한 글이 있어서 참조를 해보시면 어떨까 합니다. 링크는 아래와 같습니다.
그리고 전자의 질문에 대해서는 제가 일어를 써본 적은 없지만 한글, 중국어 등의 아시아 지역 언어들이 다 같은 계열의 문자이므로 마찬가지일 것 같은데요. 인식은 가능하지만 글자의 위치 등에 대해서는 영문과 약간 다르게 생각해야 합니다. 이 문제에 관해서는 제가 나중에 정리해서 제 블로그에 글을 올리고 다시 알려드리겠습니다.
-
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
-
Sangwoo회원
위의 내용에서 중간에 한 군데가 오타가 나서 정정합니다.
PRINT, STRLEN(spl[0]) –> PRINT, spl[0]
-
-
글쓴이글