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

Daten einer Cell in dynamische Variable schreiben

 

Torben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2011, 14:02     Titel: Daten einer Cell in dynamische Variable schreiben
  Antworten mit Zitat      
Hallo,


ich glaube ich habe schon alles ausprobiert, komm aber leider nicht weiter.
Ich lese mit meinem Code verschiedene Dateien ein, deren Name in einer Cell gespeichert wird. Die einzelnen Dateien bearbeite ich in einer for schleife und benenne sie mit assignin um.
Nun würde ich es gerne so machen, dass der ursprüngliche Dateiname nach der Bearbeitung der Variablenname ist. Ich hoffe ich konnte mein Problem gut erklären ;-).

Code:
%

[filename, pathname] = uigetfile('C:\Users\Torben\Daten\*.txt','Daten auswählen','multiselect','on');

for k = 1:datei_anzahl;
 

daten = textread(filename{k},'%f','headerlines',1');  

variable_1 = reshape(daten,50,50)';                        
variable_2 = variable_1;
variable_2(1:1:25,:) = [ ];                                  
variable_3 = variable_2;
variable_3(3:1:22,:) = [ ];                                  
variable_4 = sum(variable_3)/3;                              

assignin ('base',sprintf('datei%d',k), variable_4);                


end
 


Ziel wäre das am Schluss im Workspace nicht datei1 datei2 etc.. stehen sonder die Dateien mit ihren ursprünglichen Namen.
Danke im voraus,


Mfg Torben


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.03.2011, 14:53     Titel:
  Antworten mit Zitat      
Hallo

meinst du so:?
Code:

[filename, pathname] = uigetfile('C:\Users\Torben\Daten\*.txt','Daten auswählen','multiselect','on');

for k = 1:datei_anzahl;
 

daten = textread(filename{k},'%f','headerlines',1');  

variable_1 = reshape(daten,50,50)';                        
variable_2 = variable_1;
variable_2(1:1:25,:) = [ ];                                  
variable_3 = variable_2;
variable_3(3:1:22,:) = [ ];                                  
variable_4 = sum(variable_3)/3;
% Extention entfernen                              
varname   = regexprep(filename{k},'\.(.)+','');
assignin ('base',varname, variable_4);                


end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Torben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2011, 10:32     Titel:
  Antworten mit Zitat      
hallo,

danke für die schnelle Antwort. Leider hat das nicht ganz funktioniert. Bin aber eh davon abgekommen. Da ich diese Daten anschließend gerne plotten möchte. Da wäre es doch nicht schlecht sie mit datei1 datei2 etc. zu benennen.
Ich würde nun noch gerne die Daten in einer Schleife plotten. Dazu muss ich auf jede Variable allgmein zugreifen. Das heißt ungefähr so:

Code:


for m= 1:dateianzahl;

     plot(datei(m))

     hold on

end


Bei mir denke ich ist jedoch die Syntax falsch um nacheinander auf datei1 datei2 etc zuzugreifen. Wie muss ich das anstellen? Und wie kann ich jeden plot in der Schleife eine andere Formatierung geben?


Mfg
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 25.03.2011, 11:15     Titel:
  Antworten mit Zitat      
Hallo Torben,
dazu würde ich die Daten in einem structure abspeichern.
Code:

datei = struct();

[filename, pathname] = uigetfile('C:\Users\Torben\Daten\*.txt','Daten auswählen','multiselect','on');

for k = 1:datei_anzahl

daten = textread(filename{k},'%f','headerlines',1');  

variable_1 = reshape(daten,50,50)';                        
variable_2 = variable_1;    % Brauchst du diesen Zwischenschritt später?
variable_2(1:1:25,:) = [ ];                                  
variable_3 = variable_2;    % Brauchst du diesen Zwischenschritt später?
variable_3(3:1:22,:) = [ ];                                  
variable_4 = sum(variable_3)/3;                              

datei(k).Werte = variable_4

end
 


Dann kannst du mit
Code:

for m= 1:dateianzahl

     plot(datei(m).Werte)
     hold on
end
 

drauf zugreifen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Torben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2011, 13:01     Titel:
  Antworten mit Zitat      
Super, vielen Dank.

So sollte das sein.
Jedoch wollte ich die erste Datei als Referenz zu jeweils den übrigen Dateien machen. Das heißt jede datei, welche ja ein Zeilenvektor mit 50 Spalten ist durch die 50 Spalten der datei1 teilen. Hab es so weiter gebastelt:

Code:


referenz = datei(1).Werte;

for m=2:datei_anzahl;
   
       
    kurve(m).Werte = datei(m).Werte/referenz ;
   
    plot(kurve(m).Werte) ;
   
    hold on  
   
       
end

 


Jedoch ist kurve nun auch ein struct mit m Elementen, aber in jedem Element steht wiederum nur ein Wert und nicht ein Zeilenvektor mit 50 Werten. Daher kommen beim plotten nur einzelne Punkte raus ;-).
Wie stell ich das am besten an? Und wie kann ich jedem Plot innerhalb der Schleife automatisch eine andere Formatierung zuweisen?


Mfg
 
Torben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2011, 13:09     Titel:
  Antworten mit Zitat      
ok, die zweite Frage ist schon beantwortet.

In einer Schleife unterschiedlich formatieren (farbe etc.) funktionert ganz gut mit hold all.

Die erste Frage besteht aber immer noch Confused
 
Jan S
Moderator

Moderator


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

Sorry, ich kann gerade nicht folgen: Welche ist die "erste" Frage?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2011, 14:21     Titel:
  Antworten mit Zitat      
Hallo Jan,

die "erste" Frage ist das Problem mit der Referenzdatei.

Gruß Torben
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.03.2011, 15:09     Titel:
  Antworten mit Zitat      
Hallo Torben,

Zitat:
die "erste" Frage ist das Problem mit der Referenzdatei.

Was ist denn das "Problem mit der Referenzdatei"? Ich verstehe es nach dem Durchlesen dieses Threads immer noch nicht.
Vielleicht meinst Du den Ausdruck "datei(m).Werte/referenz"? Brauchst Du vielleicht den "./" Operator, da "referenz" ein Vektor ist?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2011, 09:28     Titel:
  Antworten mit Zitat      
Hallo Jan,

habe übers Wochenende nochmal den Code überarbeitet. Dennoch bleibt mein Problem bestehen:
Ich lese eine Datei ein mit Namen "referenz" welche den Wert 1x50 double hat. Daneben habe ich noch ein 1x3 struct namens "datei". Nun möchte ich die 3 vektoren des structs je durch "referenz" teilen und wieder in einer struct-variablen "kurve" abspeichern, damit ich diese dann ploten kann.
habe es bisher so probiert:

kurve(m).Werte = datei(m).Werte/referenz

oder auch so

kurve = datei./referenz

etc.

Bisher hat nichts funktioniert. Die Fehlermeldung lautet:

??? Undefined function or method 'rdivide'
for input arguments of type 'struct'.

Error in ==> Datenverarbeitung2703 at 166
kurve(m).Werte = datei(1,m)./referenz ;


Mfg
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 28.03.2011, 12:17     Titel:
  Antworten mit Zitat      
Hallo Torben,
kannst du nochmal deinen momentanen Quellcode posten?
Bei mir läuft folgendes Problemlos durch:
Code:

referenz = rand(1,50);
size(referenz)  % 1 50

var_1 = rand(50, 50);
var_1(1:1:25,:) = [];
var_1(3:1:22,:) = [];
var_1 = sum(var_1)/3;
size(var_1) % 1 50
datei(1).Werte = var_1;

>> datei(1).Werte / referenz
ans =
    1.0847

>> datei(1).Werte ./ referenz
ans =
  Columns 1 through 10
    0.5585    0.5521    7.7208    0.9829    1.8338   11.1737    1.6315    1.0464    1.0313    1.1035
  Columns 11 through 20
    4.8641    0.6209    0.9439    0.6744    1.2853    5.7327    1.3769    0.7335    1.2987    0.7619
  Columns 21 through 30
    1.0508   30.1473    1.3560    0.8187    0.9921    1.1038    1.1337    1.1803    0.9369    5.5565
  Columns 31 through 40
    1.0351   25.0437    2.1855   17.9438    8.3232    0.7358    1.6927    2.8633    0.8093   22.7096
  Columns 41 through 50
    2.7981    1.6912    1.4808    0.8715    2.3215    1.7846    2.7701    1.4356    1.1023    0.4542
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Torben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2011, 13:46     Titel:
  Antworten mit Zitat      
ja super,

jetzt läufts. Es war wie Jan bereits gemeint hat, dass ich den Punktoperator brauche. Hab ihn aber falsch eingesetzt.
Danke Peter, durch dein Beispiel hab ich jetzt meinen Fehler gefunden:
So läufts:


kurve(m).Werte = datei(m).Werte./referenz % hier zweimal Punkt-Operator

plot(kurve(m).Werte,farbe{m,1});



Danke Torben
 
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.