matlab 对于运行得很好的代码来说,“这种类型的变量不支持点索引”?

ldioqlga  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(359)

我有一些与某个比我更有经验的人一起编写的MatLab代码前几天,代码运行得非常好。当我今天尝试运行它时,我得到了错误“这种类型的变量不支持点索引”,并且我已经尝试阅读了关于这个主题的许多其他堆栈溢出问题,但仍然在努力解决我的问题。我将包括代码,直到下面的错误。根据我所读到的,这可能与结构有关?如果你能给我送来任何帮助或提示,我将不胜感激。谢谢!

for j = 3:length(files)

files(j).name
folder_name = files(j).folder;
file2load = strcat(folder_name, '\', files(j).name);

data_input = load(file2load);

trace_names = fieldnames(data_input);

for i = 1:length(trace_names)

    data_to_plot.x = data_input.(char(trace_names(i))).data.x;
    data_to_plot.y = data_input.(char(trace_names(i))).data.y;
m1m5dgzv

m1m5dgzv1#

正如评论指出的那样,尚不清楚为什么会出现这个错误,但我可以告诉你是什么导致了这个错误。“点索引”是一种访问名为struct的MatLab变量中数据字段的方法。在您的代码段中,files(j)不是struct
例如,您不能这样做:

>> s = {}; % s is a cell array (not a struct)
>> g = {};
>> g{1} = 'lala';
>> s{1} = g;
>> s.g % cannot access g using this syntax
Dot indexing is not supported for variables of this type.

但是,如果将s变成struct,则可以:

>> s = struct
s = 
  struct with no fields.

>> s.item1 = g; % create a field called item1 to hold the stuff in g
>> s.item1 % now you can use dot indexing to access the stuff you put in there

ans =

  1×1 cell array

    {'lala'}

我猜想这段代码是函数的一部分,其中files是一个参数,或者是先前定义了files的脚本的最后一行。可能有一天和您的同事一起,您将files设置为一个变量,该变量实际上是一个结构数组,其中包含name等项。从那时起,一些东西将files的值更改为非结构类型的数组。

相关问题