- This topic has 1개 답변, 2명 참여, and was last updated 10 years, 10 months 전에 by Jonghyuk.
-
글쓴이글
-
-
yoni회원
IDL 초보입니다.
제가 가지고 있는 데이터가 아스키 파일로
(5, *) 이런 배열을 가지고 있는 데이터 인데
3번째 행에 있는 데이터들이 시간 순서 인데 1 부터 약 2만개의 데이터로 이루어져있습니다.
1704개수로 반복되는데 각 1번은 1번끼리 저장하고 2번은 2번끼리 3번은 3번 … 저장하고 싶은데
그런 배열을 for 문으로 어떻게 적어야 할지 잘 모르겠습니다.
반복하는 방법으로 코드를 짜야할 텐데 방법을 잘 모르겠습니다
지금까지는
1
2 pro sic
3
4
5 path = ‘/home/eunjee/seaice/HadISST_analysis/’
6 file = ‘HadISST_sst_ice.dat’
7 openr, lun, path+file,/get_lun
8 header = string(3)
9 data = fltarr(5, 27604800)
10
11 nx=0
12 ny=0
13 time=0
14 d1=0
15 d2=0
16
17 var=fltarr(nx, ny, time, d1, d2)
18
19 for i=0, 27064800 do begin
20 for ii=i+1, 27064800, 1704 do begin
21 readu, lun, var
22
23 end for
24 end for
25
26 readf, lun, i, ii
27 free lun, lun
28 print, var
29
30 END
31
32이렇게 했는데 엉터리 인것 같아서요 .. 도움 부탁드립니다.
-
Jonghyuk회원
1. 1704개의 파일을 만들고자 하시는 건가요? 아니면 1704줄씩 끊어서 하나의 파일로 만들고자 하시는 건가요?
2. 27064800과 27604800 이 혼재해 있는데 1704로 나누어 떨어지는 쪽이 27604800이므로 이쪽이 맞을 것 같습니다.
3. 약 2만개의 데이터라는 언급이 있는데, 이는 어떤 쪽과 관련이 있는 것인지요?
4. 데이터의 연산과정이 중간에 필요한 것인지, 아니면 단순히 파일만 나누어서 재배치하는 것이 목적인지에 따라 효율적인 방법이 조금 달라집니다.1704개의 파일을 만들고,
3행의 헤더와 27604800행의 데이터행이 있는 것을 각 파일에 16200행씩 저장되도록 하는 것이라면,
다음과 같은 코드를 생각해 볼 수 있을 것 같습니다.header=strarr(3)
data=strarr(27604800)
path = ‘/home/eunjee/seaice/HadISST_analysis/’
file = ‘HadISST_sst_ice.dat’
openr, lun, path+file,/get_lun
readf, lun, header
readf, lun, data
free_lun, lunfor i=0, 1703 do begin
file=’data_’+string(i+1, format='(I04)’)+’.dat’
openw, lun, path+file, /get_lun
printf, lun, data[i:*:1704] ;i번부터 끝까지, 1704개씩 건너뛰며 뽑아낸 line을 씀
free_lun, lun
endforend
-
-
글쓴이글