0
我正在研究一個matlab腳本,它通過一個目錄遞歸循環並試圖找到某個類型的所有文件。我使用一個數組作爲一種堆棧。Matlab下標指數錯誤,完全交互運行
線
dirstack{end + 1} = filesInCurrentDir(i);
失敗。但是,如果我使用dbstop if error
並且手動運行完全相同的行,它可以正常工作。
如果我預先指定的索引length(dirstack) + 1
是否有一個原因,這不會在腳本環境中工作,但它會在一個互動的環境中它也失敗了呢?
最低工作例如:
DIR='.';
dirstack{1} = DIR;
while length(dirstack) ~= 0 %loop while there's still directories to look for
curdir = dirstack{1}; %the working directory is popped off the top of the stack
dirstack{1} = []; %delete the top element, finishing the pop operation
filesInCurrentDir = dir(curdir);
for i=3:length(filesInCurrentDir) % start at 3, dir returns 1:. 2:.. and we don't want those
if filesInCurrentDir(i).isdir; %if this is a directory
dirstack{end+1} = filesInCurrentDir(i);
elseif strcmp(filesInCurrentDir(i).name(end+[-3:0], '.jpg')) == 1 %if it's a psdata file
files{end+1} = [curdir, filesep, filesInCurrentDir(i_.name)];
end
end
end
謝謝,我會嘗試新的方法。我仍然不明白爲什麼我有原始問題?特別是因爲確切的線路正確地交互式運行,並且看起來您沒有發現任何問題? –
我解釋了代碼註釋中的錯誤。一個主要錯誤是在移除單元格元素時使用dirstack(1)而不是dirstack {1}。其他就像語法錯誤或錯字(我標記爲「有錯誤在這裏」)。錯誤消息可能是由於語法錯誤。所以我不相信你最小的例子是一行一行的。 –