txt 파일을 새로 쓸 때의 문제

게시판 IDL Q&A txt 파일을 새로 쓸 때의 문제

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #5073 Reply
      JAEHEE
      회원

      안녕하세요 항상 도움받고있습니다.

      먼저 코드를 봐 주세요

      그리고 읽는 파일안에는 한달치의 데이터가 들어있습니다.
      그런데 저는 그 한달치의 데이터를 하루하루 잘라서 다시 만들고 싶습니다.
      그래서 생각한 것이
      입력한 날짜의 파일을 찾아고, 한달치의 데이터를 한줄한줄 읽어 그 줄의 날짜가 제가 선택한 날짜와 같으면
      새로운 파일에 쓰게 만즐자 이고, 위의 것이 그 코드입니다.
      하지만 코드를 돌려보면
      day1 의 값이 31.000000이 나오며, 데이터는 마지막에
      2013 29 23 41 -0.32 -0.77 -0.07 340.20 0.66 11 -5
      2013 29 23 42 -1.33 -1.06 -0.41 351.70 0.72 12 -5
      2013 29 23 43 -0.64 -1.14
      이런식으로 끊겨서 나오게 됩니다.
      도대체 문제가 무엇인가요?
      참고로 읽는 데이터는 이런 형식입니다
      Year Day Hour Minute Bxgse Bygse Bzgse Flowspeed Vxgse Vygse Vzgse Flowpressure AEindex SYM/Hindex
      2013 1 0 0 2.53 -0.85 0.40 NaN NaN NaN NaN NaN 9 1
      2013 1 0 1 NaN NaN NaN NaN NaN NaN NaN NaN 9 1
      2013 1 0 2 2.68 -0.70 0.34 350.3 -348.2 25.1 -28.4 0.52 9 1

      위의 코드가 이상하게 나와 다시 첨부합니다.
      pro plot_OMNI_data

      indir = ‘I:\omni\’
      cd,’I:\omni\’

      read, year, month, day, prompt=’type! year month day:yyyymmdd’,format='(i4.4, i2.2, i2.2)’
      file1=file_search(indir+’omni_’+string(year,format='(i4.4)’)+string(month,format='(i2.2)’)+’.txt’,count=n1)
      file2=(indir+’omni_new_’+string(year,format='(i4.4)’)+string(month,format='(i2.2)’)+string(day,format='(i2.2)’)+’.txt’)
      ; if n1 lt 1 then begin
      ; continue
      ; endif

      nlines = FILE_LINES(file1)
      header=string(1)
      data=fltarr(14,nlines-1)
      rlun=1
      wlun=2

      openr,lun,file1,/get_lun
      readf, lun, header
      openw, wlun, file2
      printf, wlun,’year day hour minute Bxgse Bygse Bzgse Flowspeed Flowpressure AEindex SYM/Hindex’
      for iline=0l, nlines[0]-2 do begin
      readf, lun, year1,day1,ihr1,mins1,Bx,By,Bz,flwspd1,vx,vy,vz,flwprs1,AE1,Sym1
      if day1 eq day then begin
      printf, wlun, year1,day1,ihr1,mins1,Bx,By,Bz,flwspd1,flwprs1,AE1,Sym1,format='(i4.4,3i4,3f8.2,f10.2,f7.2,2i5)’
      endif
      endfor

      • 이 게시글은 JAEHEE에 의해 6 years, 8 months 전에 수정됐습니다.
      • 이 게시글은 JAEHEE에 의해 6 years, 8 months 전에 수정됐습니다.
    • #5077 Reply
      mwkim
      회원

      안녕하세요, 문제를 분명히 하기 위해 몇 가지 질문 드립니다.

      day1이 31이 나온다고 하셨는데 31이 되는게 자료를 저장할 때 그렇다는 건가요?

      아니면 프로그램이 최종적으로 반복되고 나서 31이 되는 건가요?
      (프로그램 구조 상 31일이 있는 달의 자료를 읽으면 최종적으로는 31이 되는게 맞다고 봅니다.)

      만약 day가 31이 아닌 값인데 day1이 31일 때 저장되는 문제이면

      if day1 eq day then begin
      printf, wlun, year1,day1,ihr1,mins1,Bx,By,Bz,flwspd1,flwprs1,AE1,Sym1,format='(i4.4,3i4,3f8.2,f10.2,f7.2,2i5)’
      endif

      위 IF 문 안에서 day1과 day 값을 표출시켜서 확인해보시기 바랍니다.
      (제대로 값이 들어가 있는지)

      두 번 째로 자료가 마지막에는 제대로 저장되지 않는 부분도

      표출해봐서 변수에 실제 자료가 없는 것인지 아니면 저장하는 과정에서의 문제인지를 명확히 해야할 것 같습니다.

      그리고 별개의 문제이지만 OPENR, OPENW로 파일을 열었으면 CLOSE나 FREE_LUN으로 반드시 닫아주셔야 합니다.

      (더 추가하자면 wlun도 /GET_LUN 옵션으로 자동으로 지정되도록 하는게 좋을 것 같습니다.)

      • #5078 Reply
        JAEHEE
        회원

        파일의 다시 확인해보니 파일의 마지막값이 31이라서 그렇게 들어간 것 같습니다!

        그리고 말씀대로 CLose와 Free_lun을 제 장소에 맞게 입력하니 파일이 제대로 만들어집니다.

        감사합니다.

1 답변 글타래를 보이고 있습니다
'txt 파일을 새로 쓸 때의 문제'에 답변달기
글쓴이 정보: