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

Problem mit exist

 

hotsauce
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.03.09
Wohnort: Sindelfingen
Version: R2007B
     Beitrag Verfasst am: 05.04.2009, 15:08     Titel: Problem mit exist
  Antworten mit Zitat      
Hallo zusammen
jetzt würde ich in eine callback überprüfen,ob in Workspace eine bestimmte Variable steht,und zwar diese Variable ist von eine andere callback.
und damals mit Befehl 'assignin('base','V1',V1)' nach Workspace zugefügt.

wenn ich in callback B schreibe

if exist('V1')

dann wird immer '0' zurückgegeben

was ist los? wie kann man es richtig machen?

danke euch!!
Private Nachricht senden Benutzer-Profile anzeigen


josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 05.04.2009, 17:51     Titel:
  Antworten mit Zitat      
Es hängt immer davon ab, was der Parameter von exist ist. Ich empfehle Ihnen diesen Befehl:
Code:

_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
spawnferkel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 11.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.04.2009, 19:28     Titel:
  Antworten mit Zitat      
Code:
guckt auch nur im Workspace der Funktion, in der es aufgerufen wird; in deinem Fall also in callback B.
Du kannst
Code:
benutzen, um im Base Workspace zu arbeiten:
Code:
evalin('base','exist(''V1'',''var'')')
Private Nachricht senden Benutzer-Profile anzeigen
 
hotsauce
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 06.03.09
Wohnort: Sindelfingen
Version: R2007B
     Beitrag Verfasst am: 05.04.2009, 20:36     Titel:
  Antworten mit Zitat      
hey,danke spawnferkel!! es funtionert!!cool!

evalin und exist zusammen,was für eine schöne kombination!

danke! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Jazzer
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 28.03.10
Wohnort: HH
Version: 2009b 32bit
     Beitrag Verfasst am: 19.05.2010, 11:47     Titel:
  Antworten mit Zitat      
spawnferkel hat Folgendes geschrieben:

Code:
evalin('base','exist(''V1'',''var'')')


Das funktioniert schon mal ganz gut.
Nur was macht man wenn V1 ein variabler Variablenname ist?

z.B.:
Code:

Name='V1'
exist(Name,'var')
 

und das ganze jetzt so ausführen dass im Base-Workspace geschaut wird.

Einer ne Idee???[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Germanus
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 15.12.09
Wohnort: ---
Version: 7.8.0 (R2009b), Linux
     Beitrag Verfasst am: 09.12.2010, 21:14     Titel:
  Antworten mit Zitat      
Hallo,

auch wenn die Frage schon etwas länger her ist, will ich hier mal einen möglichen Lösungsansatz aufzeigen, denn auch ich hatte heute das gleiche Problem...

Code:

% Testweise im normalen Arbeitsspeicher k definieren oder nicht also z.B.
k = 1
 


und dann mit folgender Funktion prüfen:

Code:

function fkt_ExistInBase

myVar = 'k'

evalin('base',['exist(''',myVar,''')'])
 


Der "Trick" besteht im Zusammensetzen eines strings mittels den eckigen Klammern, also [] und Kommata, sowie den dreifachen Einfachanführungszeichen.

Achtung bei der Verwendung von "return" verlässt man allerdings nicht die Funktion sondern wandert vom 'base' zurück in den Funktionsarbeitsspeicher.

MFG,
Germanus
Private Nachricht senden Benutzer-Profile anzeigen
 
Fragender

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2012, 18:30     Titel: Frage zu evalin in Kombi mit exist
  Antworten mit Zitat      
Hallo zusammen,

die Kombination von Germanuns mit evalin und exist:

Code:

function fkt_ExistInBase

myVar = 'k'

evalin('base',['exist(''',myVar,''')'])
 


funktioniert bei mir super.
Allerdings komm ich nicht dahinter, was denn die einzelnen
Kommata bewirken bzw. zu bedeuten haben.
Es wäre super wenn mir jemand diese eine Zeile Code erklären könnte.

Viele Grüße
 
Germanus
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 15.12.09
Wohnort: ---
Version: 7.8.0 (R2009b), Linux
     Beitrag Verfasst am: 16.10.2012, 19:41     Titel:
  Antworten mit Zitat      
Hallo,

also auf die Nachfrage, wie der Code zu verstehen sei:

1.) Im Forum wird der Quelltext falsch editiert dargestellt (Farben). Wenn man den Quelltext nach Matlab kopiert, sieht man, dass das myVar aus der eckigen Klammer (also letzte Zeile) schwarz wird. Dies ist vielleicht der schlüssel zum Verständniss.

2.) Wenn der Durchblick bei solchen Kombinationen von Befehlen fehlt, empfehle ich, wie auch für diesen Fall den Debugger. Ein roter Punkt vor die letzte Zeile und dann im gehaltenen Modus die eckige Klammer sammt Inhalt in der Komandozeile ausgeführt ergibt folgende Ausgabe:

Code:
['exist(''',myVar,''')']

ans = exist('k')


3.) Zum Grundverständnis für die Bausteine der Funktion mal folgende Erläuterungen in eigenen Worten evalin braucht einen "Arbeitsbereich" und eine "Arbeitsanweisung", sprich "ich sage dir jetzt, dass du später draußen den Müll in die Tonne XY werfen musst...". Diese Arbeitsanweisung muss als String übergeben werden ("Schreibe dir auf, was du tun musst, damit du es dann später vom Zettel ablesen kannst") Solche Strings können mit eckigen Klammern aus Teilstrings zusammengesetzt werden, sprich str_ges = [str_1,str_2]. Und nun muss in diesen string noch ein "dynamisches" Element, also eine Variable enthalten sein. Dies klappt nur mittels Anführungszeichen innerhalb des strings. Verständlich wird das Ganze, wenn man sich folgende Beispiele anschaut:
Code:
und
Code:
. Das doppelte Anführungszeichen wird innerhalb eines durch Anführungszeichen gekennzeichneten Strings zum Anführungszeichen. So jetzt dürften alle Klarheiten beseitigt sein oder?

MFG,
Germanus
Private Nachricht senden Benutzer-Profile anzeigen
 
Fragender

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2012, 10:51     Titel: Frage zu evalin in Kombi mit exist
  Antworten mit Zitat      
Hallo Germanus,

erst einmal vielen Dank für die schnelle und ausführliche Antwort.
Tolles Forum hier. Ich werde mich auch anmelden.

Mir sind nun prinzipiell auch fast alle Punkte klar geworden.

Was ich allerdings immer noch nicht verstehe, sind die Kommas
direkt vor und nach

Code:


Wenn man mir hier noch auf die Sprünge helfen könnte.

Viele Grüße
Fragender
 
Germanus
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 15.12.09
Wohnort: ---
Version: 7.8.0 (R2009b), Linux
     Beitrag Verfasst am: 17.10.2012, 14:42     Titel:
  Antworten mit Zitat      
Hallo Fragender,

Die Kommas in den eckigen Klammern folgen den gängigen Konventionen von Vektoren in Matlab, d.h. es gibt Zeilenvektoren (getrennt durch komma)
Code:
und Spaltenvektoren (getrennt durch semikolon)
Code:

Argumente sind in diesem Fall einfach strings also Text im Falle des Zeilenvektors werden alle Teiltexte zu einem gesammten zusammengebaut. In unserem Fall also
Code:
['exist(''', myVar, ''')']
ist ein zusammengesetzter String sprich
Code:
[String1, String2, String]
wobei gilt:

Code:
String1 = 'exist('''
ergibt exist('
Code:
String2 = myVar
<- also z.B. myVar = 'k' und ergibt k
Code:
String3 = ''')'
ergibt ')

Durch die eckige Klammer gibt die Aneinanderreihung folglich wie schon in meinem vorangegangenen Beispiel unter 2. gesagt und hier nun im Detail erläutert: exist('k')

qed

MFG,
Germanus

P.S.: Um fit mit dem Ganzen zu werden empfehle ich einfach mal meine Beispielfragmente in die Komandozeile zu kopieren und dort auszuführen. Viel Spaß.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fragender

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2012, 14:37     Titel: Frage zu evalin in Kombi mit exist
  Antworten mit Zitat      
Hallo Germanus,

nun hab ich es begriffen.
Viele Dank für die ausführliche Erklärung.

Viele Grüße
Fragender
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 2024 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.