Verfasst am: 21.08.2013, 19:11
Titel: Clearvars -except löscht alle Variablen?
Hallo zusammen,
ich habe gerade eine Skript getestet (nicht selbst geschrieben) in der eine ziemlich lange for-Schleife vorkommt, die viele verschiedene Variablen erstellt. Am Ende sollen alle variablen bis auf 3 gelöscht werden. Der Befehl dazu lautet:
danach endet die Schleife. Matlab löscht hier allerdings alle Variablen. Ich habe es schon mit debuggen versucht (dabei ist mir das aufgefallen), die erste Runde läuft bis zu diesem letzten Befehl einwandfrei durch, aber dann werden eben alle Variablen gelöscht und die zweite Runde schlägt fehl, weil er die fileNames nicht mehr hat. Ist irgendwas an dem Befehl falsch (ich entdecke da nichts falsches?) oder hat das etwas mit der Schleife zu tun?
schwer zu sagen ohne den schleifencode oder?
bitte poste immer code der den fehler reproduziert.
anhand deines kurzen ausschnitts kann man nicht wirklich helfen.
_________________
Leider ist die Schleife tatsächlich mehr als 200 Zeilen lang ich habe die Schleife jetzt mal verkürzt, dann passiert das nämlich auch noch. Anfangs werden excel Tabellen eingelesen und deren Inhalt dann im weiteren Codeverlauf modifiziert.
sollte eigentlich nicht passieren. ich kann den code so ja leider nicht laufen lassen ohne die excel files... ist das zufällig in einer extra funktion untergebracht ? die haben nämlich ihren eigenen variablenraum. die laufvariable innerhalb der for schleife kannst du übrigens nicht beeinflussen.
_________________
@Winkow: Ja, ich glaube, das mit der Funktion ist so, zumindest steht direkt über der for-Schleife noch folgendes:
Zitat:
function readData_TFC_MO
Ich kenne diesen Befehl leider nicht, habe über mathworks die Definition angeschaut, aber irgendwie macht das für mich mit der Codezeile keinen richtigen Sinn? Dahinter steht quasi der Name, unter dem der ganze Code gespeichert ist.
@Harald: Ja, habe gestern die Schliefe (allerdings ohne den function Befehl oben) mit debugger durchlaufen und festgestellt, dass clearvars alle Variablen löscht. Habe es auch mit manueller Eingabe versucht --> dasselbe Problem. Ich benutze Matlab R2013a, falls das weiterhilft :/
wie ich bereits oben sagte haben funktionen ihren eigenen variablen raum. nach durchlaufen sind die internen variablen also nicht mehr vorhanden und nur die rückgabe argumente bleiben.
_________________
Ah, okay, das erklärt das natürlich. Gibt es denn irgendeine Möglichkeit, das zu verhindern? Oder die Funktion "auszutricksen", so dass die Variablen wenigstens bei durchlauf der Schleife erhalten bleiben?
die daten sollten sollange vorhanden sein wie die funktion läuft trixen bringt da nichts da es ja das erwünschte verhalten ist. wenn du die variablen nach der funktion noch brauchst musst du sie als rückgabe variablen angeben. ohne den code der den fehler hervorruft kann man hier aber nur raten.
_________________
Dann bin ich mir grad nicht sicher, ob das wirklich das Problem ist...
In dieser Funktion befinden sich zwei for-Schleifen, bei der ersten (deren Kurzform der Code aus meinem zweiten Post ist) werden nach dem ersten Durchlauf der Schleife alle Variablen gelöscht, so dass ein zweiter Durchlauf fehlschlägt, weil eine der variablen notwendig ist (nämliche fileNames).
Innerhalb der Funktion kommt nach dieser ersten Schleife dann noch eine weitere, also sollten die Daten der ersten Schleife doch noch vorhanden sein?
Ja, sollten sie.
Wird irgendwo noch eine Unterfunktion aufgerufen? Wenn ja, dann überprüf die mal, ob da irgendwo ein clear all steht (meist am Anfang ...)
@Kascho: Danke für den Tipp, es wird aber wirklich erst nach dem letzten Befehl (eben clearvars...) gelöscht, bis dahin sind alle Variablen da.
@Winkow: Kann ich euch dazu einfach zwei Dummy-ExcelTabellen erstellen und hier anhängen? Da ich sonst nicht weiß, wie ich den Fehler für euch reprosuzierbar machen kann
@Winkow: Kann ich euch dazu einfach zwei Dummy-ExcelTabellen erstellen und hier anhängen? Da ich sonst nicht weiß, wie ich den Fehler für euch reprosuzierbar machen kann
ja klar. ein einfaches beispiel das läuft ( natürlich bis auf den fehler) dummy excel tabellen mit randomwerten die deine werte wiederspiegeln sind dafür ausreichend. so genau wie nötig so ungenau wie möglich ein datum sollte in der dummy datei auch datum sein und so weiter.
_________________
Okay, habe jetzt mal zwei Test csv-files erstellt, die ich anhänge.
Auch für die gibt folgender Code beim zweiten Durchlaufversuch diese Fehlermeldung aus:
Zitat:
Undefined variable fileNames.
Error in Testding (line 10)
disp(fileNames{iRead})
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.