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。”
是什么导致了这个错误?我可以使用变量名访问标签吗?
你可以这样做,但不是你现在的样子。我认为这是问题所在:
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)