파일 입력할때 for구문으로 한번에 입력할수는 없을까요?

게시판 IDL Q&A 파일 입력할때 for구문으로 한번에 입력할수는 없을까요?

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #5304 Reply
      shyang
      회원

      안녕하세요

      항상 사이트에서 많은 도움을 받고있습니다.
      다름이 아니라 하나 질문할게 있는데요
      아래 다음과같이 제가 12개의 파일을 가지고 있습니다.

      file2016_1=’MOD08_M3.A2016001.006.2016034014511.hdf’
      file2016_2=’MOD08_M3.A2016032.006.2016111143908.hdf’
      file2016_3=’MOD08_M3.A2016061.006.2016110193203.hdf’
      file2016_4=’MOD08_M3.A2016092.006.2016122105310.hdf’
      file2016_5=’MOD08_M3.A2016122.061.2017326222614.hdf’
      file2016_6=’MOD08_M3.A2016153.006.2016194122147.hdf’
      file2016_7=’MOD08_M3.A2016183.006.2016215045353.hdf’
      file2016_8=’MOD08_M3.A2016214.006.2016245165120.hdf’
      file2016_9=’MOD08_M3.A2016245.006.2016278144133.hdf’
      file2016_10=’MOD08_M3.A2016275.006.2016306112242.hdf’
      file2016_11=’MOD08_M3.A2016306.006.2016336104846.hdf’
      file2016_12=’MOD08_M3.A2016336.006.2017003134917.hdf’

      이 파일을들 for구문을 사용해서 한번에 아래와같이 입력하고싶은데요
      for i=1,12 do begin
      hid=hdf_sd_start(file2016_[i])

      그런데 이렇게 하면 다음과 같은 에러가 발생해서 입력이 안되네요ㅠㅠ
      % Variable is undefined: FILE2016_.

      한번에 입력 가능하게 할 수 없을까요?
      참고로 나머지 입력한 내용은 다음과 같습니다.

      for i=1,12 do begin
      hid=hdf_sd_start(file2016_[i])
      p=HDF_SD_NAMETOINDEX(hid,’Aerosol_Optical_Depth_Land_Mean_Mean’)
      print,’data set number’,’:’,p
      sid=hdf_sd_select(hid,p)
      hdf_sd_getdata,sid,aod_land_mean
      aod550=fltarr(360,180)

      data=reform(aod_land_mean[*,*,1],360,180)
      aod550=float(data)
      q=where(aod550[*,*] eq -9999)
      aod550[q]=!values.d_nan

      value550=aod550*0.001 ; 0.001=scale factor, add_offset=0.000, [(value-add_offset)*scale_factor]
      korea550=value550[304:312,47:57]
      mean550[i]=mean(korea550,/nan)
      print,mean550[i]
      endfor
      hdf_sd_endaccess,sid
      hdf_sd_end,hid

      end

    • #5305 Reply
      ChoiYoun
      회원

      hid=hdf_sd_start(file2016_[i])

      위의 코드에서 에러가 발생하는 이유는 “file2016_[i]”가 “file2016_”라는 변수의 i번째 요소로 인식되기 때문입니다. 이러한 구문이 작동하기 위해서는 hid를 정의하기 전에 다음과 같은 과정이 필요합니다.

      file2016_=[file2016_1, file2016_2, file2016_3, file2016_4, file2016_5, $
      file2016_6, file2016_7, file2016_8, file2016_9, file2016_10,$
      file2016_11,file2016_12]

      for i = 0, 11 do begin ;not i = 1, 12
      hid=hdf_sd_start(file2016_[i])

      위와 같은 선언으로도 문제를 해결할 수 있지만, 저는 여러 개의 파일을 읽을 경우 FILE_SEARCH 함수를 사용하는 것을 추천합니다.

      FILE_SEARCH 함수에 대한 사용방법은 IDL 도움말과 링크(http://idl.selab.re.kr/?p=668)를 참조하시면 될 것 같습니다.

      • 이 답변은 ChoiYoun에 의해 5 years, 10 months 전에 수정됐습니다.
    • #5308 Reply
      Sangwoo
      회원

      언급하신 12개의 파일들이 만약 하나의 디렉토리 안에 모두 있다면, FILE_SEARCH 함수를 사용하여 파일명들을 한꺼번에 인식하여 처리하는 것이 효율적입니다. 예를 들어 C:\data 라는 디렉토리 안에 파일들이 있다고 가정한다면, 다음과 같이 디렉토리 내에 존재하는 파일명들을 files라는 문자값 배열로 생성한 후 이를 이용하여 반복문 내에서 필요한 작업들을 처리하는 것이 효율적입니다.

      files = FILE_SEARCH(‘C:\data\*.hdf’, COUNT=n)
      FOR j=0, n-1 DO BEGIN
      ~~~~
      ENDFOR

2 답변 글타래를 보이고 있습니다
'파일 입력할때 for구문으로 한번에 입력할수는 없을까요?'에 답변달기
글쓴이 정보: