2012-06-22 2 views
1

IDL과 관련하여 새로운 내용이므로 다음을 수행해야합니다. 기본적으로 내가해야하는 일은 다른 파일을 읽고 다른 배열을 읽는 것입니다.복수 파일에서 IDL 읽기

그래서 내가 좋아하는 뭔가를 생각하고 있었다 :

files=dialog_pickfile(/multi, filter=filter, path=path, title=title) 
n_files=n_elements(files) 
for i=0, n_files-1 do begin 
openr, lun, /get_lun, files[i] 
readf, lun, data 

그러나이 시점에서 어떻게 예를 들어, 추적을 유지하여 다른 배열을 만들 파일의 이름. 예를 들어

:

arrayfile1(i,j,k)= 
arrayfile2(i,j,k)= 

등등.

희망이 있습니다. 최고입니다.

+0

어떤 IDL 버전을 사용하고 있습니까? IDL 8 이상에서는 해시 (일명 연관 배열로 매핑)를 지원하므로 파일 이름에 대해 색인화 된 해시를 만들 수 있습니다. 이전 버전을 사용하는 경우 구조체 배열을 만들 수 있습니다. 각 구조체는 파일 이름 + 데이터 포인터를 갖습니다. (배열의 크기를 구조체의 정의의 일부로 배열 데이터를 구조체에 직접 넣을 수는 없으며 모두 동일하지 않으면 구조체의 배열을 만들 수 없습니다.) – Joe

답변

2

어때?

files = dialog_pickfile(/multiple_files, filter=filter, path=path, $ 
         title=title) 
n_files = n_elements(files) 

; check if the user cancels the dialog 
if (n_files eq 1 && files[0] eq '') then n_files = 0 

full_data = fltarr(nfiles, ni, nj, nk) 
data = fltarr(ni, nj, nk) 

for i = 0, n_files - 1 do begin 
    openr, lun, /get_lun, files[i] 
    readf, lun, data 
    full_data[i, 0, 0, 0] = data 
    free_lun, lun 
endfor 

큰 배열 대신 목록 또는 해시를 사용할 수도 있습니다. 배열은 더 빠르지 만 연속적인 메모리 여야하므로 데이터 크기에 따라 문제가 될 수 있습니다.

+0

@ mgalloy.Thanks ,하지만 줄에 오류가있어 : openr, lun,/get_lun, files [i]. I이 (가) 범위를 벗어나 파일을 첨자 화하려고했습니다. 어떤 아이디어? – g256

+0

"HELP, files"로 파일을 점검하여 예상되는 파일인지 확인합니다. – mgalloy