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 umbennen

 

sbstn

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2016, 10:44     Titel: Variablen umbennen
  Antworten mit Zitat      
Guten Tag,

ich habe eine Frage zu einem (vmtl) altbekannten Problem: Ich möchte in einer Schleife Variablen umbennen. Ich bin dabei schon auf die 'eval'-Funktion gestoßen, habe aber auch gelesen, dass man die nicht unbedingt nutzen soll.

Hier zu meinem konkreten Problem: Ich möchte Daten in Matlab einlesen und unter dem Variablennamen speichern, den die Ursprungsdatei hat. Nach einigem Suchen klappt das soweit auch super. Jetzt ist es aber so, dass in einem Ordner mehrerer Dateien liegen können, die ich einlesen möchte. Mein bisheriges Programm erzeugt die entsprechende Liste an einzulesenden Dateien und erzeugt die Vektoren. Diese möchte ich jetzt aber in einer Schleife umbennenen und zwar genau mit dem Wert, der aktuell gerade der Variablen 'filename' zugeordnet ist. Ich programmiere bisher in TCL, da nutzt man einfach das Dollarzeichen, um auf den Wert der Variablen zuzugreifen. In Matlab müsste das doch ähnlich gehen.

Hier mein bisheriger Code:

Code:

clear;

pathname = uigetdir('', 'Choose Directory');
if pathname == 0
  return
end

Mdir = dir(pathname);
nbentries = size(Mdir, 1);
Mfiles = [];
for entry_i = 1:nbentries
  if Mdir(entry_i).isdir == false

    filename = Mdir(entry_i).name;
    if filename(1) ~= '.'
      [p, n, ext] = fileparts(filename);
      if strcmpi(ext, '.dat')
        Mfiles = strvcat(Mfiles, filename);
      end
    end
  end
end
nbfiles = size(Mfiles, 1);

for i=1:nbfiles;
 filename_info = Mfiles(i,:);
 filename = strrep(filename_info, ' ', ''); %oder deblank(filename_info)
 [Time,Strain,Shearstress] = importfile(filename);    
 *****
end
 

An der Stelle ***** möchte ich nun Time etc umbennen in Time_"Wert der gerade in filename steckt". Irgendwie habe ich da gerade einen Knoten im Hirn, wie das gehen soll. Ich könnte auch eine neue Variable erzeugen und die Werte der alten reinkopieren, das wäre kein Problem für mich.

Danke für eure Hilfe,
Sebastian


Harald
Forum-Meister

Forum-Meister


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

wie du schon schreibst, sind dynamische Variablennamen keine gute Idee.

Die Frage ist, warum du das willst. Momentan würdest du in jeder Iteration die Daten überschreiben. Wäre ein Cell oder Struct Array denn eine Alternative?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2016, 10:59     Titel:
  Antworten mit Zitat      
Ja, das ist in der Tat mein Problem mit dem Überschreiben. Daher ja auch die Idee mit dem Umbennen.

Am Ende des Projekts werden in einem Ordner, den ich auswähle mehrere Dat-Dateien sein mit jeweils drei Spalten: Time, Strain,Stress.

Diese muss ich Auf Phasen-Differenz und Maximal-Amplitude und einigem mehr untersuchen. Daher muss ich tatsächlich auch später nach dem import noch auseinander halten können. Ich bin, das gestehe ich ganz offen, kein geübter Programmierer. Aber verschiedene Vektoren mit "systematischen" Namen zu erzeugen erschien mir am einfachsten.
 
Harald
Forum-Meister

Forum-Meister


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

das mag einfach erscheinen, zieht aber einen Rattenschwanz an Problemen nach sich.
Die einzige Möglichkeit wäre, mit eval zu arbeiten. Blöderweise bleibt dann nichts anderes, als von dann an weiterhin mit eval zu arbeiten.

Wie wäre es stattdessen z.B. mit:
Code:
for i=1:nbfiles;
 filename_info = Mfiles(i,:);
 filename = strrep(filename_info, ' ', ''); %oder deblank(filename_info)
 data(i).file = filename;
 [data(i).Time,data(i).Strain,data(i).Shearstress] = importfile(filename);    
end


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2016, 11:20     Titel:
  Antworten mit Zitat      
Danke Harald für die Hilfestellung.

Ich habe das mal übernommen und wenn ich meine Simulation umstelle, sodass die Daten anders sortiert werden, könnte das klappen. Immerhin sind jetzt alle Daten sauber importiert. Diese Darstellung hat vlt sogar am Ende noch einen Vorteil, weil ich die Ergebnisse, die in meiner Auswertung rauskommen, gleich in die gleiche Zeile (in einer Spalte weiter hinten) von data eintragen kann.

Ich versuche mir jetzt beizubringen, wie ich auf die einzelnen Teile von data zugreifen kann um dann die darin enthaltenen Daten weiter zu verarbeiten.
 
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.