2010-02-28 67 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