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

Lau*_* R. 4 idl-programming-language

在之前的函数中,我创建并返回了一个哈希值。执行此操作后,它将哈希作为结构返回,我将其用作此以下函数的输入。

myStruct 的每个标签都是一个结构,每个都有一个名称和数据类型标签。

我正在尝试遍历每个标签以查找特定数据类型出现在哪个“名称”处。

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
Run Code Online (Sandbox Code Playgroud)

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

是什么导致了这个错误?我可以使用变量名访问标签吗?

Phi*_*zer 5

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

myStruct.(names[varID])
Run Code Online (Sandbox Code Playgroud)

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

我假设myStruct看起来像这样:

myStruct = { tag1: {data:0L, datatype:'Some type'}, tag2: {data:1L, datatype:'Temperature, Head 1'}}
Run Code Online (Sandbox Code Playgroud)

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

myStruct.(0)
myStruct.tag1
Run Code Online (Sandbox Code Playgroud)

都将为您提供结构的第一个标签中的第一个值(您可以根据需要为其他标签增加索引)。在这种情况下,这些将产生“存储”在 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
Run Code Online (Sandbox Code Playgroud)