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

schleife-mat

 

flop
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2008, 10:53     Titel: schleife-mat
  Antworten mit Zitat      
Hallo

Hab eine mat-file taw.mat in dem einige struct stehen wie zB:
data11234
data11236
data23555
usw
und auch 2 struct die heißen:
infile
statn

Hat jemand eine Idee wie ich eine Schleife um die dataxxxxx machen kann?
Weil ich aus diesen dann Daten herauslese

flop
Private Nachricht senden Benutzer-Profile anzeigen


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 27.05.2008, 12:12     Titel:
  Antworten mit Zitat      
mit der Funktion WHOS kannst Du abfragen welche Variablen sich im MAT-File befinden (noch bevor der MAT-File geladen wird). Wenn Du es hast selektiere daraus alle Namen die mit "data" anfangen und lasse diese über die Schleife bearbeiten:

Code:
vars = whos('-file','*****.mat');
varnames = {vars(strncmp({vars.name},'data',4)).name};

for i = 1:length(varnames)
   varnames{i}
end



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2008, 13:24     Titel:
  Antworten mit Zitat      
leider bringt er mir eine Fehlermeldung bei der Zeile

Varnames = (vars(.........

und zwar :
too many input arguments

weißt vieleicht eine Lösung

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 27.05.2008, 20:21     Titel:
  Antworten mit Zitat      
mein Code funzt einwandfrei!

Achte genau auf die Klammer - es gibt nicht nur Runde, sondern auch geschweifte...


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2008, 10:51     Titel:
  Antworten mit Zitat      
Danke jetzt erstellt er mir ein cell array

aber wenn ich jetzt eine Schleife machen will funktioniert es nicht
w= beliebige Zeit
for i = 1: length(varnames)
ind = find(varnames(i).sdate == w)
end

kommt immer die Fehlermeldung:
"Improper index matrix reference"

Eine Idee für eine Lösung?

mfg flop
Private Nachricht senden Benutzer-Profile anzeigen
 
freshp
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.05.08
Wohnort: Schwabenländle ;)
Version: R2007b
     Beitrag Verfasst am: 28.05.2008, 11:03     Titel:
  Antworten mit Zitat      
flop hat Folgendes geschrieben:
Danke jetzt erstellt er mir ein cell array

aber wenn ich jetzt eine Schleife machen will funktioniert es nicht
w= beliebige Zeit
for i = 1: length(varnames)
ind = find(varnames(i).sdate == w)
end

kommt immer die Fehlermeldung:
"Improper index matrix reference"

Eine Idee für eine Lösung?

mfg flop


Ich würde vorschlagen mir die Geschichte mit den Cellarrays und dem Zugriff auf die dort enthaltenen Elemente nochmal anzuschauen. Ich hab in deinem Code mal rot markiert, wo du runde Klammern benutzt hast. Vergleiche das mal mit Steve's Codebeispiel:

Code:

for i = 1:length(varnames)
   varnames{i};
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2008, 11:10     Titel:
  Antworten mit Zitat      
Naja mit geschwungener Klammer kommt jetzt die fehlermeldung

"Attempt to reference field of non-structure array"

soll ich jetzt cell array umwandeln und wie?


mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 28.05.2008, 11:22     Titel:
  Antworten mit Zitat      
ich nehme an "sdate" ist ein Feld in dem Struct data***
Du kannst nicht darauf direkt zugreifen, weil "varnames{i}" nicht die Variable ist, sondern lediglich der Name dieser Variable als String.

d.h. Du musst zuerst die Daten aus dem File mit LOAD auslesen, oder Du machst das in der Schleife

Code:
for i=length(varnames)
   % nur diese bestimme Variable aus dem MAT-File laden
   load('***.mat',varnames{i})
   % nun wenn Du auf den "sdate" zugreifen willst,
   % dann musst Du entweder über EVAL gehen oder mit GETFIELD
   tmp_sdate = getfield(varnames{i},'sdata')
end% for



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 28.05.2008, 11:23     Titel:
  Antworten mit Zitat      
freshp hat Folgendes geschrieben:
[...]
Vergleiche das mal mit Steve's Codebeispiel:
[...]

Danke für die Ehre, aber es war outsider, der das Beispiel gepostet hat Wink

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2008, 12:00     Titel:
  Antworten mit Zitat      
Kannst du mir das Programm ein wenig genauer erklären

muss ich varnames zuvor in einem mat file speichern oder muss ich einfach den mat file laden in dem die namen (also data11234,...) dann vorkommen.

und die Zeile mit getfield macht mir dann genau was? bzw welche Variable muss ich dann für meine weiteren Berechungen mit sdate verwenden?
Private Nachricht senden Benutzer-Profile anzeigen
 
freshp
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.05.08
Wohnort: Schwabenländle ;)
Version: R2007b
     Beitrag Verfasst am: 28.05.2008, 12:20     Titel:
  Antworten mit Zitat      
steve hat Folgendes geschrieben:
freshp hat Folgendes geschrieben:
[...]
Vergleiche das mal mit Steve's Codebeispiel:
[...]

Danke für die Ehre, aber es war outsider, der das Beispiel gepostet hat Wink

Gruß
Alex


Verdammich noch eins.. Very Happy Is ja noch früh am Tag.. Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 28.05.2008, 12:48     Titel:
  Antworten mit Zitat      
Code:
Kannst du mir das Programm ein wenig genauer erklären

eigentlich muss Du mir erklären, was Du vor hast! Smile

Also ich habe es so verstanden. Du hast einen MAT-File. In diesem MAT-File gibt es mehrere Variable. Von Interesse sind nur die, die mit "data" anfangen. Dabei handelt es sich um Strukts. Diese Variablen sollen nacheinander aus dem MAT-File ausgelesen werden und alle diese Strukt beinhalten den Feld mit dem Namen "sdate" mit dem Du etwas machen willst.

Wenn das so ist, dann sollte das funzen
Code:
% bestimme alle Variablen im MAT-File
vars = whos('-file','*****.mat');
% bestimme aus der Menge nur die, die mit "data" anfangen
varnames = {vars(strncmp({vars.name},'data',4)).name};

% lasse eine Schleife über diese Variablennamen laufen
for i=length(varnames)
   % die Variablen einzeln aus dem MAT-File auslesen
   load('***.mat',varnames{i})
   % den Inhalt von dem Feld "sdate" auslesen
   tmp_sdate = getfield(varnames{i},'sdate')
   % damit etwas anstellen
   % ...
   % ...
end% for



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
flop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 19.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2008, 13:35     Titel:
  Antworten mit Zitat      
Du hast genau richtig verstanden was ich machen will

aber das mit getfield funktioniert nicht, vielleicht weil meine struct so aufgebaut ist:
***.mat:
data11234 -->data11234.sdate --> Werte
-->data11234.ff --> Werte
-->usw.

data11236 --> .........

kommen gleich mehrere Fehlermeldungen
was ist mit dem eval?

flop
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 28.05.2008, 13:56     Titel:
  Antworten mit Zitat      
Hänge mal eine kleinen MAT-File an, damit ich was "handfestes" habe.


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