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

Variablen durch verschiedene strings ergänzen

 

TH123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2013, 09:54     Titel: Variablen durch verschiedene strings ergänzen
  Antworten mit Zitat      
Hallo zusammen,

ich möchte aus verschiedenen Variablen zwei bestimmte Zahlen herausfiltern und diese Zahlen an weitere Variablen anfügen, um diese miteinander zu verknüpfen. Das folgende Beispiel erklärt es besser:

Ausgangssituation sind 3 Variablen und 3 zugehörige Zeiten

--> Variable__ls_0_rs__3
Variable__ls_1_rs__5
Variable__ls_2_rs__2

time2
time3
time5

die 0 zwischen ls und rs gibt die Nummer der Variablen an,
die Zahl am Ende die zugehörige Zeit.


Jetzt möchte ich die beiden folgendermaßen zusammenfügen, dass die passende Zeit mit der korrekten Variablen verknüpft und unter dem neuen Namen abgespeichert wird.


Variable_0 = [time_3, Variable__ls_0_rs__3];


Folgenden Code habe ich bisher:


Code:


 variables = who(Variable__*');
 
 
 
 for labelcount=1:length(variables)
     
     string = char(variables{labelcount});
     x = string(end);
     y = string(end-6);
 
     
     
 try
     
    eval( Variable_[y] = [time [x], string]);

%[u]weiß nicht wie ich die strings miteinander verknüpfen soll [/u]
       
 catch
     disp(['Es gab ein Problem bei der Konvertierung der Größe ',char(labellist{labelcount})]);
 end
 end

 


Freue mich über jede Hilfe!

Grüße
TH123


TH123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2013, 10:16     Titel:
  Antworten mit Zitat      
... vielleicht kommt dieser Code schon näher an die Lösung dran.

Code:


clc;

 variables = who('Variable__*');
 
 display(variables)
 
 for labelcount=1:length(variables)
     
     string = char(variables{labelcount});
     x = string(end);
     y = string(end-6);
 
     
     
 try
     
    eval(['Variable_' char(y) ,'=' ['time' char(x), string]]);
       
 catch
     disp(['Es gab ein Problem bei der Konvertierung der Größe ',char(variables{labelcount})]);
 end
 end
 


Grüße TH123
 
TH123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2013, 15:57     Titel:
  Antworten mit Zitat      
... ich bin etwas weiter gekommen!

Code:

clc;

 variables = who('Variable__*');
 
 display(variables)
 
 for labelcount=1:length(variables)
     
     string = char(variables{labelcount});
     x = string(end);
     y = string(end-6);
 
     
     
 try
     
   eval(['Variable_'  y  '= Variable__ls_' y '_rs__' x ,]) ;
       
 catch
     disp(['Es gab ein Problem bei der Konvertierung der Größe ',char(variables{labelcount})]);
 end
 end
 
 




Jetzt steht im meinem workspace

Variable_1 = 20000x1 double
Variable_2 = 20000x1 double

usw...


Jetzt müssen diese Variablen aber noch mit dem passenden 'Zeitvektor' veknüpft werden, dass ich diese in Simulink einspeisen kann.

Variable_y = [time_x, Variable_y]

wie kann ich das in der Schleife oben gleich mitmachen?? Ich habe eigentlich alle nötigen Daten!! In der Variablen x steht die Nummer des Zeitvektors. Jetzt müsste ich diese Nummer an time_x anfügen und diese Werte aus dem workspace mit den Werten der Variable_y in einer Matix zusammenführen.

Kann man bei eval nicht gleich noch eine Spalte hinzufügen?? Das wäre pefekt! Dann könnte ich gleich beide Spalten auf einmal füllen!


Vielen Dank für deine Hilfe!!!

Grüße
TH123
 
Harald
Forum-Meister

Forum-Meister


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

die Vorgehensweise mit EVAL ist meist sehr fehlerträchtig und schwierig zu debuggen. Mein Vorschlag wäre einen Weg zu suchen, EVAL zu vermeiden.

Wenn du Daten aus einer .mat-Datei lädst, geht dies z.B. mit
Code:
und die verschiedenen Variablen werden zu Feldern einer Struktur, was das ganze schon mal handlicher macht.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2013, 09:21     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort.
Ich muss in diesem Fall keine .mat Datei laden. Meine Daten befinden sich mit Hilfe eines mdf-imports im workspace. Nun muss ich aus dem workspace die relevanten Größen finden und mit den zugehörigen Zeiten verknüpfen, um in Simulink arbeiten zu können.
Mein Problem bei der Sache ist, dass ich jedes mal wenn ich versuche die beiden Vektoren in einer Matrix zusammenfassen will, nur den string
Code:

[time_1 , vektor_1]
 


bekomme. Aber nicht mehr auf die Werte zugreifen kann.
Hast du mir dafür vielleicht ein Tipp? Oder soll ich das oben mit assign versuchen zu lösen? Hab mich halt gefreut, dass es wenigstens funktioniert.
Ich muss jetzt eigentlich nur noch versuchen in der Schleife gleich die passende Zeit anzufügen... dann wäre alles perfekt!

Vielen Dank!


Grüße
TH123
 
TH123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2013, 12:05     Titel:
  Antworten mit Zitat      
... habe jetzt eine vorübergehende Lösung gefunden, indem ich die Variablen zuvor passend benenne und dann hart überbeschreibe.

Code:

clc;

 variables = who('Variable__*');
 
 display(variables)
 
 for labelcount=1:length(variables)
     
     string = char(variables{labelcount});
     x = string(end);
     y = string(end-6);
 
 try
     
   eval(['Variable_'  y  '= Variable__ls_' y '_rs__' x ,]) ;
   eval(['Variable_' y 'time' '= time_' x]);    
 
catch

 disp(['Es gab ein Problem bei der Konvertierung der Größe ',char(variables{labelcount})]);
 end
 end
 


... da ich weiß, dass die Variablen immer Variable_1 , Variable_2 ... heißen schreibe ich sie mit den passenden Zeiten, die immer Variable_1time, Variable_2time ... heißen in eine Matrix!

Code:

Variable_1 = [Variable_1time, Variable_1];
Variable_2 = [Variable_2time; Variable_2];
...
 



So funktioniert es zumindest mal, wäre aber trotzdem an einer eleganteren Lösung interessiert!!

Grüße
TH123
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.03.2013, 16:13     Titel: Re: Variablen durch verschiedene strings ergänzen
  Antworten mit Zitat      
Hallo TH123,

Ich rate dringend von dieser Methode ab. Es gibt keinen vernünftigen Grund sich mit EVAL das Programmieren zu erschweren.
Der Ausgangspüunkt ist bereits das Problem:
Zitat:
Variable__ls_0_rs__3
Variable__ls_1_rs__5
Variable__ls_2_rs__2

time2
time3
time5

Hier tragen die Namen der Variablen Informationen, die nicht in den Namen gehören: Wenn man statt "time2" die daten ordentlich strukturiert, lösen sich solche Schwierigkeiten von alleine auf:
Code:
time.index = 2;
time.value = rand

Und equivalent für "Variable__ls_0_rs__3".

Die Namen der Variablen sollen die Klasse des Objektes beschreiben, dessen Daten gespeichert werden. Indices oder Messbedingungen gehören dagegen nicht in die Namen, da dies die Programmierung sehr erschwert. Aus dem gleichen Grund heisse ich auch nicht Jan73kg_hatHeuteNachtGutGeschlafen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
TH123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2013, 09:12     Titel:
  Antworten mit Zitat      
Hallo Jan S,

danke für deinen Beitrag!
Das stimmt natürlich was du sagst... leider kann ich die Art des Imports nicht beeinflussen, da ich den mdfimporter nur als Benutzer verwende.
Somit muss ich leider mit den Gegebenheiten etwas zaubern!

Grüße
TH123
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.03.2013, 10:31     Titel:
  Antworten mit Zitat      
Hallo TH123,

Ja, das Problem kenne ich.
Ein guter Programmierer kann trotz einer solchen verkorksten Daten-Struktur ein Programm draus zaubern.
Ein sehr guter Programmierer kann das als "Junk" zurückweisen und den Verursacher auffordern, das nochmal ordentlich zu implementieren.

Es gibt in jedem Programmier-Projekt Punkte, an denen entschieden werden muss, ob ein Weiterfrickeln oder ein gründliches Aufräumen teurer ist. Ich möchte Dich ermutigen, nach solchen Gelegenheiten zu suchen, denn in Matlab Programmieren bedeutet mehr als einfach nur die Syntax korrekt anzuwenden.

Gruß, Jan
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.