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

string und num in Struct abspeichern

 

JohnLocke
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2013, 11:02     Titel: string und num in Struct abspeichern
  Antworten mit Zitat      
Hallo,

habe ein string (z.B. Fenster) und eine Zahl (z.B. 5).

Nun möchte ich ein Strukt erstellen (z.B. Haus).
Darin soll automatisch gespeichert werden

Haus.Fenster=5...

wie mache ich das?

Das Ganze soll in einer For-SChleife laufen und ca. 40 Eigenschaften so nacheinander in das Struckt speichern.

Hab schon viel gesucht, aber nix gefunden...
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: 08.08.2013, 11:57     Titel:
  Antworten mit Zitat      
Hallo,

suchst du sowas?
Code:
name = 'Fenster';
wert = 5;
Haus.(name) = wert;


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2013, 12:35     Titel:
  Antworten mit Zitat      
jein,

Das hier ist mein Code:

Code:
for zaehler=1:5        
string=raw{zaehler};    %Name wird in string-Format gespeichert
zahl=raw(zaehler,2);    %zahl wird von Raw in cell-Format gespeichert
D=cell2mat(zahl);       %Zahl von Cell in num - Format umwandeln
name=[string,'=D;'];    %Zahl wird string zugeordnet
eval(name);
end


Also ich les ne Excel Datei aus. die Excel Datei hat 2 Spalten, den Namen (als String z.B. Fenster) und einen Zugehörigen wert (als Zahl z.B. 5).

Mithilfe des obigen Codes kann ich lauter einzelne Variablen erstellen, die den Namen und den zugehörigen Wert haben.
Jetzt würde ich aber gerne innerhalb der Schleife namen und wert in eine Stucktur speichern.

Wenn ich aber sag: strucktur.string=zahl dann speicherts natürlich nicht den richtigen Namen sondern "string" ab.

Hab ich mein Problem verständlich geschildert?
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: 08.08.2013, 13:29     Titel:
  Antworten mit Zitat      
Hallo,

genau das wird doch gelöst, wenn du
Code:
daten.(string) = D;

schreibst?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2013, 13:36     Titel:
  Antworten mit Zitat      
@Harald - nicht ganz.

Weil ich string ja immer in jedem Schleifendurchlauf benützte speicherts mir immer die neue Zahl unter "daten.string" ab
Dann hab ich nachher zwar jede Zahl kurz im String abgespeichert gehabt. Aber am Ende ist nur die Letzte Zahl gespeichert.

Aber ich will dass es das unter dem Namen, der im String abgespeichert ist abspeichert.
Wenn also
Code:
string=Fenster
ist.

Möcht ich dass nachher
Code:
daten.fenster=D
rauskommt.

Wird mein Problem klarer?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.08.2013, 13:41     Titel:
  Antworten mit Zitat      
Hallo JohnLocke,

Von der EVAL-Methode kann ich wärmstens und mit Nachdruck abraten! Das macht mehr Probleme als es löst.

Code:
for zaehler=1:5        
  string=raw{zaehler,1};    %Name wird in string-Format gespeichert
  zahl = raw{zaehler,2};    %zahl wird von Raw in cell-Format gespeichert
  S.(string) = D;
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnLocke
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2013, 13:47     Titel:
  Antworten mit Zitat      
Ich habs =)!!

Code:
Widerstand.(raw{zaehler})=D;


Das hat noch in meine SChleife reingehört!! =)!
Private Nachricht senden Benutzer-Profile anzeigen
 
JohnLocke
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2013, 13:48     Titel:
  Antworten mit Zitat      
Ok,

beim mir funktionierts jetzt auch ohne EVAL... nur interessehalber:

Wo ist das Problem an der EVAL - Methode?

Bei mir hats gut funktioniiert...
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: 08.08.2013, 13:53     Titel:
  Antworten mit Zitat      
eval ist nur sehr schwer zu debuggen und alles was das debuggen erschwert ist mist ^^
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.08.2013, 14:14     Titel:
  Antworten mit Zitat      
Hallo JohnLocke,

Matlab wird durch eine Methode beschleunigt, die "JIT acceleration" heißt. Diese analysiert eine M-Funktion zunächst und kann sie dann deutlich schneller ausführen. Wenn man dann aber dynamisch, also während der Laufzeit, neue Variablen erzeugt, wird die Analyse inkonsistent und Matlab kann massive langsamer werden. Das kann auch ein Faktor von 100 sein.

Zudem kann man nicht mehr im Editor nach der Zeile suchen, in der eine Variable definiert wurde. Und sowie ein Code eine Grenze von 1000 Zeilen überschreitet, wird das Debugging sehr wichtig, denn nicht-triviale Programme enthalten immer Bugs.
Wenn man dann 20 EVALs vor sich hat, ist das Löschen des Files die effizienteste Methode um Fehler zu beheben.

Ein weiterer Nachteil ist, dass man für Variablen, die kompliziert per Eval erstellt wurden, später wqieder genauso komplizierte Methoden benötigt, um auf die Variablen zuzugreifen. Und wenn es wirklich notwendig ist, den Namen einer Variablen dynamisch zu kreieren, zeigt dies, dass man hier Werte im Namen versteckt, anstatt sie ordentlich als Daten zu speichern. Die suaberer Trennung von Daten, Programmen und GUIs ist aber ein grundlegender Schritt bei der erstellung wartbaren und debugbaren Codes.
Gruß, Jan
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: 08.08.2013, 14:31     Titel:
  Antworten mit Zitat      
Hallo,

JohnLocke hat Folgendes geschrieben:
Ich habs =)!!

Code:
Widerstand.(raw{zaehler})=D;


Das hat noch in meine SChleife reingehört!! =)!


und da du string = raw{zaehler} gesetzt hast, ist es genau das, was ich dir vorgeschlagen habe.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 07.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2013, 14:33     Titel:
  Antworten mit Zitat      
hmm... ok, dank euch!
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 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.