- This topic has 2개 답변, 2명 참여, and was last updated 6 years, 7 months 전에 by JAEHEE.
-
글쓴이글
-
-
JAEHEE회원
안녕하세요 항상 도움받고있습니다.
먼저 코드를 봐 주세요
1234567891011121314151617181920212223242526272829303132pro plot_OMNI_dataindir = '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; endifnlines = FILE_LINES(file1)header=string(1)data=fltarr(14,nlines-1)rlun=1wlun=2openr,lun,file1,/get_lunreadf, lun, headeropenw, wlun, file2printf, wlun,'year day hour minute Bxgse Bygse Bzgse Flowspeed Flowpressure AEindex SYM/Hindex'for iline=0l, nlines[0]-2 do beginreadf, lun, year1,day1,ihr1,mins1,Bx,By,Bz,flwspd1,vx,vy,vz,flwprs1,AE1,Sym1if day1 eq day then beginprintf, wlun, year1,day1,ihr1,mins1,Bx,By,Bz,flwspd1,flwprs1,AE1,Sym1,format='(i4.4,3i4,3f8.2,f10.2,f7.2,2i5)'endifendforend그리고 읽는 파일안에는 한달치의 데이터가 들어있습니다.
그런데 저는 그 한달치의 데이터를 하루하루 잘라서 다시 만들고 싶습니다.
그래서 생각한 것이
입력한 날짜의 파일을 찾아고, 한달치의 데이터를 한줄한줄 읽어 그 줄의 날짜가 제가 선택한 날짜와 같으면
새로운 파일에 쓰게 만즐자 이고, 위의 것이 그 코드입니다.
하지만 코드를 돌려보면
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_dataindir = ‘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
; endifnlines = FILE_LINES(file1)
header=string(1)
data=fltarr(14,nlines-1)
rlun=1
wlun=2openr,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 -
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 옵션으로 자동으로 지정되도록 하는게 좋을 것 같습니다.)
-
JAEHEE회원
파일의 다시 확인해보니 파일의 마지막값이 31이라서 그렇게 들어간 것 같습니다!
그리고 말씀대로 CLose와 Free_lun을 제 장소에 맞게 입력하니 파일이 제대로 만들어집니다.
감사합니다.
-
-
-
글쓴이글