Matlab错误:??? 单元格内容引用非单元格数组对象

-2 matlab

在问这个问题之后:

如何使用for循环读取以下文件:(循环可以忽略文件名中的字符吗?)

abc-1.TXT cde-2.TXT ser-3.TXT
wsz-4.TXT aqz-5.TXT iop-6.TXT
...

(事实上​​,我有500个文件)

在循环开始时我需要添加什么?

for i = 1:1:500
nom_fichier = strcat(['MyFile .......'num2str(i)'.TXT']);

我尝试了以下解决方案:

Names = dir('MyFile\*.TXT');  

for i = 1:500  
    fn = ['MyFile',filesep,Names{i},'-',num2str(i),'.TXT'];  
    data = load(fn);    
    .....
Run Code Online (Sandbox Code Playgroud)

运行程序后,我收到以下错误:

??? Cell contents reference from a non-cell array object.    
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?我的目标是阅读500个文件的内容.

小智 5

您正试图拼凑一个解决方案而不考虑您在做什么.

您需要查看并了解dir返回的内容.

Names = dir('MyFile\*.TXT');
Run Code Online (Sandbox Code Playgroud)

它返回一个结构.看到此结构的一个字段是名称字段.试试这个:

Names(1).name
ans =
  abc-1.TXT
Run Code Online (Sandbox Code Playgroud)

看到它将是文件的完整名称,无需构建它.你现在可以在这个结构周围放一个循环,

for i = 1:numel(Names)
  data = load(Names(i).name);

  % do stuff here...
end
Run Code Online (Sandbox Code Playgroud)

如果您希望此处的名称列表仅作为单元格数组,请执行以下操作:

Names = {Names.name};
Run Code Online (Sandbox Code Playgroud)

现在,看看这个变量中的内容.现在是一个单元阵列.不要试图盲目地使用它而不考虑.这将是该目录中每个txt文件的完整名称列表.您根本不需要再建立名称.只需对每个文件名使用load.