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

dynamische Struktur mithilfe einer for schleife erstellen

 

Diana

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2013, 15:32     Titel: dynamische Struktur mithilfe einer for schleife erstellen
  Antworten mit Zitat      
Hallo!
ich bin ziemlicher Neuling in der Matlabwelt, hoffe aber trotzdem auf Hilfe.
Und zwar:

Ich habe ca 100 Textdateien mit Messdaten, die ich einlesen möchte. Die Funktion, die ich geschrieben habe läuft auch. Darin speicher ich die eingelesenen Messwerte in einem struct Messdaten.
Am Schluss möchte ich 100 Strukturen vom Typ Messdaten haben.

Code:

 function einlesen= einlesenX(path_messdaten,num)
%% Befehle zum einlesen

for f=50:150 % Die Textdateien haben Namen von 50 an, also Messdaten50.txt, Messdaten51.txt etc, deshalb würde ich die Strukturindizes gerne gleich benennen

Messwerte(num).X_Wert=X % in der X Matrix stehen die eingelesenen Messdaten, die ich in die struct ablegen möchte
end;
 


Jetzt ist es aber ziemlich aufwendig, 100 mal die Funktion aufzurufen,
deshalb habe ich an eine for-Schleife gedacht:

als Aufruf im Command Window:

Code:


for z=50:150 %for-schleife, um die 100 Textdateien einzulesen

daten(z)=einlesenX(['Textdatei',num2str(z),'.txt'],z);
 end

 


Problem 1: Anstatt die Strutkuren 50 -150 zu erstlllen, erstellt mir die Funktion Strukturen immer beginnend bei 1 (die aber natürlich leer sind), Ich möchte aber erst ab Messwerte(51) Strukturen erzeugen.

Problem 2: Die for-schleife im Coomand Window überschreibt mir bei jedem Durchgang die Struktureinträge, sprich bei z=50 habe ich für Messwerte(50).X_Wert Einträge, die aber bei z=51 wieder mit null überschrieben sind. Wie kann ich das ändern?

Wäre super, wnen mir jemand helfen könnte,

Danke schon einmal!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.05.2013, 16:24     Titel: Re: dynamische Struktur mithilfe einer for schleife erstelle
  Antworten mit Zitat      
Hallo Diana,

Mir wird das Problem nicht ganz klar. Vielleicht hilft dies:
Code:
for z = 1:101 %for-schleife, um die 100 Textdateien einzulesen
  daten(z) = einlesenX(['Textdatei',num2str(z + 49),'.txt'],z);
end

Das "daten"-Array kann natürlich nicht einfach bei 51 Anfangen, da alle Arrays in Matlab linear indiziert sind. Da das der Sinn eines Arrays ist, suchst du vielleicht nach etwas anderem:
Code:
for z = 1:101 %for-schleife, um die 100 Textdateien einzulesen
  daten(z).Index = z + 49;
  daten(z).Wert = einlesenX(['Textdatei',num2str(z + 49),'.txt'],z);
end

Das Problem 2 verstehe ich gar nicht. Kannst Du den dazugehörigen Matlab-Code posten?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2013, 07:45     Titel:
  Antworten mit Zitat      
danke schon mal für deine Hilfe.
Ich versuche mein Problem etwas genauer zu beschreiben:
Die Funktion einlesenX soll jeweils eine Textdatei mit Messwerten einlesen und diese zunächst in die Matrix X ablegen. Die Werte der Marix X sollen dann in das struct Messwerte (globale Variable) abgelegt werden, am besten in die gleiche Indexnummer wie die Textdatei hat, also dass z. Bsp. Messwerte(51).X_Wert alle Messwerte der Messdatendatei Messdaten51.txt enthält. Ich habe eben schon ein Fehler entdeckt und zwar glaube ich, dass in der Funktion keine for-schleife notwendig ist, da ich ja bei jedem Aufruf der Funktion nur ein Struct genereieren möchte und nicht 100. Deshalb die korrigierte Variante der Funktion (ohne die einlesenBefehle mit fopen, getline etc.)

Code:
function einlesen= einlesenX(path_messdaten,num)

%% zuerst Befehle zum einlesen, dann:

global Messwerte;
Messwerte= struct('X_Wert',[]);
Messwerte(num).X_Wert=X

end;



Du hast geschrieben, dass das mit dem Index mit Matlab nicht so einfach geht, wäre es denn möglich, dass ich mit einem zusätzlichen Befehl einfach die Messdatenstrukturen 1-49 lösche?

ansonsten muss ich es wohl doch mit deiner Messwerte.Index Variante machen...

So und mein Problem 2: Da es ziemlich aufwendig ist, 100mal die Funktion einlesen X aufzurufen, dachte ich, ich könnte dies mit einer for-schleife realisieren, (welche ich zwar schon gepostet hab, aber hier gerne nochmal:

Code:

global Messwerte

for z=50:150 %for-schleife, um die 100 Textdateien einzulesen

einlesenX(['Textdatei',num2str(z),'.txt'],z);

 end
 


diese läuft zwar, aber legt bei jedem Durchgang das struct Messwerte neu an, d.h. die eingelesenen Daten vom Durchgang zuvor gehen verloren.
Wie kann ich es so lösen, dass die beim Durchgang 1 eingelesenen und in Messwerte(50) abgespeicherten Messwerte bei Durchgang 2 nicht verloren gehen, sondern dass mir die for-schleife einfach ein Objekt mehr abspeichert, nämlich zusätzlich zu Messwerte(50) auch Messwerte(51) usw.?
Also dass bei jedem Durchgang ein weiteres Objekt zu den alten hinzugefügt wird und nicht die alten überspeichert?

Jetzt etwas klarer, was ich meine?Falls nicht, sag Bescheid Smile
Wäre super, wenn du nochmal drüber schauen würdest...
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2013, 08:21     Titel:
  Antworten mit Zitat      
Prinzipiell anders.

Zuerst:
Code:
function Messwert = einlesenX(path_messdaten)

%irgendwas einlesen
Messwert = irgendwas; %was in daten(z) dann stehen soll.

end;


Die Funktion gibt "Messwert" zurück, wie in der 1. Zeile definiert.
Dann:

Code:
for z=50:150
daten(z)=einlesenX(['Textdatei',num2str(z),'.txt'],z);
end


fertig.

LG
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: 22.05.2013, 09:19     Titel:
  Antworten mit Zitat      
Hallo,

zum Code von Diana:
Code:
Messwerte= struct('X_Wert',[]);

Hier initialisierst du die Struktur. Wenn du das jedes Mal machst, verlierst du die Daten von vorher. Dieses Initialisieren ist aber ohnehin vollkommen unnötig.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2013, 10:15     Titel:
  Antworten mit Zitat      
danke für eure hilfe Smile ich hab jetzt die variante von jurtsche angewandt und es hat funktioniert Smile
 
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.