2016-08-06 39 views
2

Ich arbeite an meinem MATLAB-Code an verschiedenen Stellen, und es wäre sehr hilfreich, wenn ich den Code auf seinen Standort auf dem Computer aufmerksam machen könnte. Bis jetzt habe ich mit .m-Dateien gearbeitet. Für .m-Dateien fand ich die folgenden Lösungen:Speicherort des aktuellen Skripts (mlx-Datei) in MATLAB

%example 1  
cd(fileparts(mfilename('fullpath'))) 

oder

%example 2 
tmp = matlab.desktop.editor.getActive; 
cd(fileparts(tmp.Filename)); 

oder

%example 3 
S = dbstack('-completenames'); 
S(1).file 

oder

%example 4 
which(mfilename) 

Aber mit MATLAB 2016a ein neuer kommt Feature namens Live-Skript. Und damit funktionieren diese Lösungen nicht mehr.

%For example I would like to do something like this 
cd(MLX_FILELOCATION); 
%or 
which(mlxfilename) 

(bearbeiten III: Problem: Ich bin nicht in der Lage den Pfad/filelocation oder die Namen der aktuellen geöffnet/ausgeführt MATLAB-Datei zu erhalten mit * .m-Dateien dies möglich ist, mit den obigen Beispielen. Mit * .mlx-Dateien ist das nicht mehr möglich und ich bevorzuge * .mlx-Dateien anstelle von * .m-Dateien.)

Ausgaben der obigen Beispiele in einer * .mlx-Datei ausgeführt:

%example1: mfilename returns the path to the 'MatlabEvaluationHelper' in the 'AppData\Local\Temp'-folder 
%example2: output is an empty array 
%example3: same output as example1 
%example4: same output as example1, because mfilename returns "MatlabEvaluationHelper" 

Edit I: Mein erstes Ziel ist, dass ich den "aktuellen Ordner" (-> "cd") in den Pfad des laufenden Skripts ändern möchte. Warum: Im selben Ordner mit der mlx-Datei habe ich zum Beispiel .csv-Dateien mit Daten. Und zum Beispiel bis morgen habe ich einen neuen Ordner. Ich kopiere die mlx_file und nun möchte ich sicherstellen, dass ich nicht die csv-Dateien von gestern benutze (weil der aktuelle Ordner von gestern im Dateibrowser von MATLAB angezeigt wird) -> also würde ich gerne den "aktuellen" ändern Ordner "automatisch mit nur Kopieren der mlx-Datei in einen neuen Ordner.

Wenn es eine bessere Praxis dafür gibt, lass es mich wissen.

Vielen Dank für

bearbeiten II helfen: Beispiel für einen gebrauchten Workflow: programmiert ich ein Skript MATLAB. Gespeichert im Ordner "Dataset_ONE". Ansonsten kopiere ich "Dataset_ONE.csv" -Datei in den gleichen Ordner. Z.B. Ich erstelle nun ein Plot und speichere es als "* .png" im Ordner "Dataset_ONE". Am Tag danach könnte ich eine zweite (eine neue und mit dieser anderen) Datenmenge "Datasset_TWO" haben. Ich erstelle einen neuen Ordner "Dataset_TWO". Kopiere die MATLAB-Dateien in den neuen Ordner. Öffnen Sie die MATLAB-Datei dort. Aufgrund der Standardeinstellungen hat MATLAB den "Aktuellen Ordner" in den neuen Ordner geändert, in dem ich MATLAB geöffnet habe. Aber wenn ich jetzt das MATLAB-Skript im ersten Ordner wieder öffne (gleichzeitig mit dem anderen MATLAB-Skript), muss ich auf den aktuellen Ordner achten. In diesem Fall könnte es nützlich sein, die beschriebene Lösung zu haben.

+0

KLJ mir ist nicht sehr klar, was Sie noch tun wollen. Klingt, als würdest du nur versuchen, dem Matlab-Pfad eine Reihe von Ordnern hinzuzufügen, um sie jederzeit zugänglich zu machen, was sehr einfach ist ... –

+0

@ tasos-papastylianou: Siehe "Edit I" oben. Danke für die Frage. – KLJ

+0

es hängt wirklich davon ab, wie Sie Matlab starten, was in Ihren Startupscripts usw. ... schreiben Sie bitte ein Beispiel, wie Ihr gewünschter Workflow wäre, einschließlich wie und wo Sie Matlab starten, wie Ihre Ordnerstruktur im Allgemeinen in Bezug auf ist alle relevanten Dateien sind involviert, das Ausgangsverzeichnis, in dem Matlab Sie findet, ist, wo Sie es haben möchten und wozu Sie Zugang haben möchten (und wozu Sie * keinen * Zugang haben möchten) . –

Antwort

0

Wenn Sie möchten, dass Sie ein falsches Skript mit falschen Daten ausführen, ohne es zu merken, können Sie am oberen Rand jedes Skripts eine Sicherheitsanweisung hinzufügen, die einen Fehler auslöst, wenn Ihr aktuelles Verzeichnis nicht existiert Genau wie der Speicherort des Skripts, das Sie ausführen. z.B.

>> assert (strcmp (pwd, '/absolute/path/to/my/script')); 

Wie für die richtigen Daten/Speichern an die richtige Stelle laden, laden Sie einfach und speichern absolute Pfade verwenden und es sollte keine Verwirrung.

+0

Danke für die Antwort. Das ist gut, aber ich suche nach einer voll automatisierten Generierung des absoluten Pfades, um den "Current Folder" korrekt zu ändern. Könnte es eine andere Lösung geben? – KLJ

+0

Und mit einer vollautomatischen Generierung des absoluten Pfades könnte man den gleichen Ordner problemlos auf einem anderen PC laufen lassen. – KLJ

+0

* Wenn * die Datei eindeutig ist und auf dem Matlab-Pfad, dann können Sie ihren vollständigen Pfad mit dem 'which' Befehl erhalten. Ich habe Matlab 2016 nicht, also kann ich mlx-Dateien nicht prüfen, aber vermutlich, wenn sie runnable sind, sollten sie auch durch den 'which' Befehl erkannt werden. Sie können diese Ausgabe verwenden, um die von Ihnen gewünschte Überprüfung zu automatisieren. Allerdings sind viele "Automatisierungs" -Anfragen in der Regel nicht so gut durchdacht. Sie können nur 'Prüfungen und Prozeduren' automatisieren. Sie können kein undefiniertes Verhalten magisch erraten. Es klingt für mich, dass Sie etwas wollen, das "nur funktioniert", egal wie unvorhersehbar Sie die Datei behandeln ... –