- This topic has 2개 답변, 3명 참여, and was last updated 7 years 전에 by Jonghyuk Yi.
-
글쓴이글
-
-
sksk2555회원
일단 하나의 파일은
year mon dd num name
2016 05 03 1 k
2016 05 03 2 s
. . . . .
. . . . .
. . . . .
이런 형태로 저장이 되어있습니다. 하나의 파일은 약 300개의 행을 가지고 있습니다.
저런 형태의 파일이 251개가 있습니다. 한번에 읽어서 년도 전부를 변수에 저장하고 싶습니다.
예를 들면
yr=[2016,2016,2016,2016,2016,2016,2016,2016…..(300*250개 정도가 되겠지요..)]
m=[05,05,05,05,05,05,05,05,……,12,12,12,12,12,12..]
d=[03,04,05,06,…..31,01,02,03,04,05,06….31]
이런식으로 한 변수안에 251개의 파일들의 같은 유형의 정보를 저장하고 싶습니다.file=file_search(경로/*.txt’)
file_input=file[i]
for i=0, 250 do begin
readcol, file_input ,year, mon, num, name, format='(i,i,i,a)’
이렇게 까지는 했는데 다음부터 막힙니다. 도와주세요.
- 이 게시글은 sksk2555에 의해 7 years 전에 수정됐습니다.
-
mwkim회원
안녕하세요
질문하신 내용은 자료를 반복적으로 불러왔는데 불러온 자료를 어떻게 하나의 변수에 담을지 질문하신건가요?
array 자료에 대해 다음과 같이 쉽게 연결이 됩니다.
x = INDGEN(3)
y = [INDGEN(3),x]
PRINT,y
0 1 2 0 1 2위 질문에서 FOR 문 밖에서 하나로 저장할 변수를 정의(readcol에서 자료를 받는 변수명과는 다르게)하신 후
위와 같은 방식으로 연결하시면 될 것 같습니다.
file=file_search(경로/*.txt’)
file_input=file[i]
yr = [];빈 array정의
for i=0, 250 do begin
readcol, file_input ,year, mon, num, name, format='(i,i,i,a)’
yr = [yr,year];불러온 자료 연결
-
IDL 내에서 배열을 이어 붙이는 방법을 이용하는 것이 확장성을 고려하면 안전합니다. 그런 면에서 위 mwkim 님의 답변이 가장 좋은 방법일 것 같습니다. 다만, 앞의 설명이 막막하게 느껴진다면, OS(운영체제)의 도움을 받는 방법도 있을 것 같습니다.
윈도우라면, 명령 프롬프트를 열어서
C:\경로> copy *.txt every.allLinux/Unix 계열이라면 터미널을 열어서
경로$ cat *.txt > every.all위와 같은 방법으로 모든 파일을 하나로 일단 합쳐놓는 것입니다.
이후 IDL에서 readcol, every.all, year, min, num ….
을 실행하면 모든 데이터를 하나의 배열로 읽을 수 있습니다. readcol이 중간에 등장하는 헤더들을 알아서 건너 뛰기 때문에 이런 시도가 가능합니다. IDL에 익숙하지 않은데, 급하게 일을 처리해야 한다면, 이 방법을 추천합니다.spawn 명령을 이용하면, 운영체제에서의 작업을 IDL 코드 안으로 넣을 수도 있긴 합니다. 어렵진 않습니다.
cd, ‘경로’
spawn, ‘copy *.txt every.all’- 이 답변은 Jonghyuk Yi에 의해 7 years 전에 수정됐습니다.
-
-
글쓴이글