Ich arbeite an einem Matlab-Skript, das rekursiv durch ein Verzeichnis und versucht, alle Dateien eines bestimmten Typs zu finden. Ich verwende ein Array als eine Art Stapel.Matlab Index Indizes Fehler, läuft perfekt interaktiv
Die Linie
dirstack{end + 1} = filesInCurrentDir(i);
ausfällt. Jedoch, wenn ich dbstop if error
benutze und die exakt selbe Linie, Wort für Wort, von Hand laufen lasse, funktioniert es gut.
Es schlägt fehl, auch wenn ich einen Index length(dirstack) + 1
vorbelegen Gibt es einen Grund, dies würde nicht in einer Skriptumgebung arbeiten, aber es würde in einer interaktiven Umgebung?
Mindestarbeitsbeispiel:
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
Danke, ich werde die neue Methode ausprobieren. Ich verstehe immer noch nicht, warum ich das ursprüngliche Problem habe? Vor allem, weil die genaue Linie interaktiv läuft, und es sieht nicht so aus, als ob Sie irgendwelche Probleme damit hätten? –
Ich erklärte den Fehler im Kommentar des Codes. Ein schwerwiegender Fehler ist die Verwendung von dirstab (1) anstelle von "droppen" {1}, wenn Sie ein Zellenelement entfernen. Andere sind wie Syntaxfehler oder Tippfehler (ich beschriftet mit "hatte Fehler hier"). Die Fehlermeldung ist wahrscheinlich auf den Syntaxfehler zurückzuführen. Ich glaube also nicht, dass Ihr minimales Beispiel zeilenweise funktioniert. –