불규칙한 데이터 읽기

게시판 IDL Q&A 불규칙한 데이터 읽기

5 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2215 Reply
      rjh4352
      회원

      아스키파일을 읽으려고 하는데요

      자료 행마다의 길이가 다르고
      중간중간 공백이 있는데

      일정 포맷으로 읽으려고 합니다

      어떻게 해야할까요??

      ex

      1 1 1 1
      1 1
      1 1 1
      1 1 1
      1

      1 1 1

      아스키자료가 이런식으로 분포되어 있습니다.
      일찍끝나는 행은 그 뒤에 스페이스바로 채워져 있지 않은 상태입니다.

    • #2216 Reply
      Jonghyuk
      회원

      4열 N 행으로 읽으려고 하시는 것인가요?
      이런 경우 빈칸 (예를 들어 두번째 줄의 3열, 4열) 은 어떤 값으로 채울 계획이신지요?
      아니면 그냥 첫줄은 데이터 4개, 둘째 줄은 데이터 2개 이런식으로 다른 크기로 관리하실 계획이신지요?
      불규칙 데이터이므로 어떤 정해진 답은 없고, 위의 내용에 따라 갈 길이 좀 달라집니다.

    • #2217 Reply
      Sangwoo
      회원

      전에도 비슷한 궁금증들이 올라온 적이 있어서 제 IDL 블로그에서 관련 게시물을 연재했던 적이 있습니다. 아래 링크들에 있는 내용을 보시면 도움이 될 것 같습니다. 사실 READCOL을 사용하기 어려운 경우의 아스키 파일을 읽는 방법에 관해서는 단 몇 줄만의 답변으로는 설명하기가 어렵습니다.

      http://blog.daum.net/swrush/249
      http://blog.daum.net/swrush/250
      http://blog.daum.net/swrush/252
      http://blog.daum.net/swrush/253

    • #2218 Reply
      rjh4352
      회원

      답변 감사합니다!

      제가 질문을 약간 부족하게 한것 같은데요

      자료형태가

      a b c d e
      1 1 1 1
      1 1 1 1
      1 1
      1 1
      1 1 1 1 1

      이런식으로 중간에 비어져 있는 행도 있고
      ,와 같은 delimiter도 없는 상태입니다.. ㅠ

      ”로 읽은 후 공백에 대해 strsplit으로 나누게되면 2행같은 경우 중간에 0값이 안생기고
      4개 배열의 1 1 1 1로만 나타나네요…ㅠ

      어떻게 해결해야할까요

    • #2219 Reply
      rjh4352
      회원

      답변 감사합니다!

      제가 질문을 약간 부족하게 한것 같은데요

      자료형태가

      a b c d e
      1 1 1 1
      1 1 1 1
      1 1
      1 1
      1 1 1 1 1

      이런식으로 중간에 비어져 있는 행도 있고
      ,와 같은 delimiter도 없는 상태입니다.. ㅠ

      ”로 읽은 후 공백에 대해 strsplit으로 나누게되면 2행같은 경우 중간에 0값이 안생기고
      4개 배열의 1 1 1 1로만 나타나네요…ㅠ

      지금 이게시판에서 스페이스바가 안먹혀서 왼쪽으로 자료들이 다 붙어지는데요
      실제자료는 b, c, d열에 아무 구분자 없이 구멍이 송송 나있습니다.

      어떻게 해결해야할까요

    • #2229 Reply
      Jonghyuk
      회원

      구분자도 없고 중간이 비어있는 칸도 있다면, 방법은 딱 하나 뿐입니다. format 키워드를 사용하는 것이고, 그렇단 얘기는 최소한 열은 딱딱 맞아 있어야 된다는 것입니다. (그렇지 않다면 어디까지가 한 칸이고, 이 칸이 비어 있는 것인지 아닌지 판정할 방법이 없을 것입니다).

      IDL> str=’*1*1*1***1***1*1′
      IDL> a=intarr(8)
      IDL> reads, str, a, format='(8I2)’
      IDL> print, a
      1 1 1 0 1 0 1 1
      IDL>

      위 예에서 str 의 *는 공백(space)으로 바꾸어 주어야 실행이 됩니다.
      띄어쓰기를 포함한 2칸이 숫자 하나가 들어가는 자리인데, 4번째 값이 없고, 6번째 값이 없는 상태입니다. 한줄에 총 8개의 값이 있는 상황이라고 하겠습니다.
      이러한 문자열을 읽을 때, a=intarr(8) 과 같이 8개의 정수를 읽을 공간을 마련해 놓고, format 키워드를 이용하여 “여덟개의 두자리 정수를 읽겠다”고 선언을 하면, 빈 칸은 0으로 처리됩니다.

      파일에서 읽을 때 readf 로 직접 format 키워드를 이용해도 되고, 파일에서 한줄씩 문자열을 읽어 이 문자열을 reads 로 재해석 하는 두가지 방법이 모두 가능합니다.

5 답변 글타래를 보이고 있습니다
'불규칙한 데이터 읽기'에 답변달기
글쓴이 정보: