IDL:访问具有变量名称的结构标记

时间:2016-02-03 20:20:08

标签: idl-programming-language

在上一个函数中,我创建并返回一个哈希。执行此操作时,它将散列作为结构返回,并将此作为此后续函数的输入。

myStruct的标签都是一个结构,每个都有一个名称和dataType标签。

我正在尝试遍历每个标记,以找出某个数据类型出现在哪个“名称”。

pro plotter, myStruct

    numtags = n_tags(myStruct) 
    names = tag_names(myStruct)
    for varID = 0, numtags do begin
       if ( strcmp( myStruct.(names[varID]).datatype, 'Temperature, Head 1')) then print, varID

    endfor

 end

尝试运行此命令后出现以下错误:“类型转换错误:无法将给定的STRING转换为Long。”

导致此错误的原因是什么?我可以使用变量名访问标记吗?

2 个答案:

答案 0 :(得分:4)

你可以这样做,但不是你的样子。我认为这是问题所在:

myStruct.(names[varID])

因为names[varID]是一个字符串。

我假设myStruct看起来像这样:

myStruct = { tag1: {data:0L, datatype:'Some type'}, tag2: {data:1L, datatype:'Temperature, Head 1'}}

通常,您可以通过标记名称或索引访问结构。所以,

myStruct.(0)
myStruct.tag1

将为您提供结构的第一个标记中的第一个值(并且您可以根据需要增加其他标记的索引)。在这种情况下,这些将产生“存储”在tag1中的结构。

如果是这样,那么这应该有效:

pro plotter, myStruct

numtags = n_tags(myStruct) 
names = tag_names(myStruct)
for varID = 0, numtags-1 do begin
   if ( strcmp( myStruct.(names[varID]).datatype, 'Temperature, Head 1')) then print, names[varID]
endfor

end

答案 1 :(得分:2)

您应该使用变量varID而不是names[varID]为结构编制索引,因此您的代码应如下所示:

pro plotter, myStruct

numtags = n_tags(myStruct) 
names   = tag_names(myStruct)
for varID=0L, numtags - 1L do begin
   if (strcmp( myStruct.(varID).datatype, 'Temperature, Head 1')) then print, names[varID]
endfor

end

请注意,您还需要更改FOR循环可以循环的最大索引,以防止索引错误崩溃。这是因为IDL从零开始索引,而不是一个索引。