2010-02-28 66 views
-2

引用问这个问题后:Matlab错误:???电池内容物从非单元阵列对象

how I can read the following files using the for loop: (can the loop ignore the characters in filenames?)

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

(In fact, I have 500 files)

What do I have to add at the beginning of this loop ??

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);  
    ..... 

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

??? Cell contents reference from a non-cell array object.  

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

+0

你是否必须根据某些特定的文件名模式来阅读它们?或者读取目录中的所有文件就足够了? – tzaman 2010-02-28 15:12:33

+0

我想按照文件名中的数字顺序读取它们 – Matlab09 2010-02-28 17:48:22

回答

5

您正试图拼凑出一个解决方案,而不用考虑自己在做什么。

您需要查看并理解dir返回的内容。

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

它返回一个结构。看到这个结构的一个字段是一个名字字段。所以试试这个:

Names(1).name 
ans = 
    abc-1.TXT 

看到它将是一个文件的完整名称,不需要建立它。现在,您可以把一个循环围绕这个结构,

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

    % do stuff here... 
end 

如果你想名字的名单只有在这里作为一个单元阵列,那么接下来这么做:

Names = {Names.name}; 

现在,看看是什么这个变量。现在是一个单元阵列。尽管如此,不要盲目尝试盲目使用它。这将是该目录中每个txt文件的完整名称列表。你不需要再建立这个名字了。只需在每个文件名上使用加载。

+0

好的,谢谢你“Woodchips”。你能告诉我如何以文件名中的数字顺序读取它们: – Matlab09 2010-02-28 17:50:31

+0

以下程序运行良好: Names = dir('MyFile \ *。TXT'); for i = 1:500 fn = strcat(['MyFile \'Names(i).name]); ... 但获得的结果顺序不遵循文件名中的数字顺序 – Matlab09 2010-02-28 17:59:24

+0

然后,您需要执行一种文件名,在您读取文件之前。 或者如果您已经知道除了数字修饰符之外的文件的名称,然后按照讨论的方式即时创建它们。 – 2010-02-28 19:27:05