【问题标题】:IDL reading in multiple fileIDL 读取多个文件
【发布时间】:2013-01-10 01:16:51
【问题描述】:

我对 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)=

等等。

希望这很清楚, 最好的。

【问题讨论】:

  • 您使用的是哪个版本的 IDL? IDL 8 及更高版本支持散列(又名映射,也就是关联数组),因此您可以创建索引文件名的散列。如果您使用的是早期版本,则可以创建一个结构数组,每个结构都有文件名 + 指向数据的指针。 (您不能将数组数据直接放入结构中,因为数组的大小是结构定义的一部分,除非它们都相同,否则您不能创建结构数组)

标签: arrays readfile idl-programming-language


【解决方案1】:

这样的事情怎么样?

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

您也可以使用列表或散列来代替大数组。数组更快,但它们必须是连续内存,因此根据数据大小可能会出现问题。

【讨论】:

  • @mgalloy.Thanks,但我在以下行遇到错误:openr、lun、/get_lun、files[i]。尝试使用 I 为 FILES 下标超出范围。有什么想法吗?
  • 我会检查带有“帮助,文件”的文件,以确保它是应该的。
猜你喜欢
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多