在上一个函数中,我创建并返回一个哈希。执行此操作时,它将散列作为结构返回,并将此作为此后续函数的输入。
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。”
导致此错误的原因是什么?我可以使用变量名访问标记吗?
答案 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从零开始索引,而不是一个索引。