WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Clearvars -except löscht alle Variablen?

 

Geranie
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 21.08.2013, 19:11     Titel: Clearvars -except löscht alle Variablen?
  Antworten mit Zitat      
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:

Code:
clearvars -except moRaw iRead fileNames


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?
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 21.08.2013, 19:15     Titel:
  Antworten mit Zitat      
Zitat:
oder hat das etwas mit der Schleife zu tun?
schwer zu sagen ohne den schleifencode oder? Smile
bitte poste immer code der den fehler reproduziert.
anhand deines kurzen ausschnitts kann man nicht wirklich helfen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Geranie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 21.08.2013, 20:22     Titel:
  Antworten mit Zitat      
Leider ist die Schleife tatsächlich mehr als 200 Zeilen lang Wink 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.

Code:
cd 'C:\Daten';
dirRaw = [pwd '\2012'];

fileNames = getfilenames(dirRaw,'*.csv');

for iRead=1:length(fileNames)
   
   disp(fileNames{iRead})
   
   [~, ~, untitled] = xlsread(fileNames{iRead});
   untitled(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),untitled)) = {''};
   
   % Get dates
   date = regexp(untitled(2:end,1),'-','split');
   startDate=[];
    endDate=[];
   
    for i=1:length(untitled(2:end,1))
        startDate{i,1} = date{i,1}{1,1};
        endDate{i,1} = date{i,1}{1,2};
    end
   startTime = datevec(startDate,'dd.mm');
   endTime = datevec(endDate,'dd.mm.yyyy');
   startTime(:,1) = endTime(:,1);
   
    clearvars -except iRead fileNames
end


Auch hier löscht er mit dem Befehl einfach alle Variablen raus?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 21.08.2013, 21:07     Titel:
  Antworten mit Zitat      
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.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.08.2013, 21:37     Titel:
  Antworten mit Zitat      
Hallo,

bist du sicher, dass die Variablen gelöscht werden?
Hast du mal versucht, zeilenweise mit dem Debugger durch den Code zu gehen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Geranie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 22.08.2013, 10:30     Titel:
  Antworten mit Zitat      
@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 :/
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.08.2013, 10:33     Titel:
  Antworten mit Zitat      
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.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Geranie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 22.08.2013, 10:52     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.08.2013, 10:57     Titel:
  Antworten mit Zitat      
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.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Geranie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 22.08.2013, 11:03     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kascho
Forum-Century

Forum-Century


Beiträge: 195
Anmeldedatum: 24.03.10
Wohnort: Jena
Version: R2008b ... :(
     Beitrag Verfasst am: 22.08.2013, 11:09     Titel:
  Antworten mit Zitat      
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 ...)

Gruß, Kascho
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.08.2013, 11:27     Titel:
  Antworten mit Zitat      
ohne lauffähigen code der den fehler reproduziert ist das hier nur rumgerate. Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Geranie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 22.08.2013, 11:37     Titel:
  Antworten mit Zitat      
@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 Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.08.2013, 11:39     Titel:
  Antworten mit Zitat      
Geranie hat Folgendes geschrieben:


@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 Wink

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 Smile ein datum sollte in der dummy datei auch datum sein und so weiter.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Geranie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 27.05.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 22.08.2013, 11:58     Titel:
  Antworten mit Zitat      
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})


Code:
function readData_TFC_MO

cd 'C:\Users\XXX\Desktop';
dirRaw = [pwd '\TestMat'];

fileNames = getfilenames(dirRaw,'*.csv');

for iRead=1:length(fileNames)
   
   disp(fileNames{iRead})
   
   [~, ~, untitled] = xlsread(fileNames{iRead});
   untitled(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),untitled)) = {''};
   
   % Get dates
   date = regexp(untitled(2:end,1),'-','split');
   startDate=[];
    endDate=[];
   
    for i=1:length(untitled(2:end,1))
        startDate{i,1} = date{i,1}{1,1};
        endDate{i,1} = date{i,1}{1,2};
    end
   startTime = datevec(startDate,'dd.mm');
   endTime = datevec(endDate,'dd.mm.yyyy');
   startTime(:,1) = endTime(:,1);
   
    clearvars -except iRead fileNames
end


EDIT: Öhm...wie hänge ich den Excel-Tabellen an? ich bekomme vom Forum die Meldung, das csv und auch xlsx "Erweiterungen" hier verboten seien?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.