2012-06-22 6 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, файлы [i]. Попытка индексирования FILES с I выходит за пределы диапазона. Есть идеи? – g256

+0

Я бы проверял файлы с помощью «ПОМОЩЬ, файлы», чтобы убедиться, что это то, что должно быть. – mgalloy

Смежные вопросы