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

Zugriff auf Messwerte über Skript und for- Schleife

 

Univac93

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.02.2016, 10:00     Titel: Zugriff auf Messwerte über Skript und for- Schleife
  Antworten mit Zitat      
Hallo liebe Community,

ich habe derzeit ein kleines, eigentlich eher lästiges Problem. Ich arbeite derzeit an Simulationen, deren Ergebnisse ich glücklicher Weise als .MAT- Dateien abspeichern kann. Diese Werte sollen alle eingelesen werden. Abgespeichert habe ich sie als "Pn.MAT", wobei n=01..50 oder auch mehr/weniger.

Ich dachte jetzt, ich bin clever und schreibe schnell ein kleines Skript, dass die Dateien aufruft und die gespeicherten Werte als Variablen in den Zwischenspeicher legt (rufe ich die Dateien so, wie sie sind, einzeln auf, funktioniert das problemlos). Dummer Weise kriege ich die for- Schleife nicht hin.

bis jetzt hatte ich folgende Idee:
Code:
cd B:\Profil\Desktop\MESS
for i=01:50
num2str(i); %Hier wahrscheinlich fehl am Platz?!
load P"i".MAT



Da ist natürlich noch ein wenig schmückendes Beiwerk dabei, aber das ist ja für das Problem unerheblich. Jedenfalls funktioniert es so nicht. Ich habe es bisher geschafft, dass mit Octave den Inhalt einer Variable ausgibt, in die ich i geschrieben habe, aber damit habe ich am Ende auch nichts gekonnt, denn beim Einlesen erkennt Matlab nur "i" und sagt dann "Pi.MAT nicht gefunden".

Hat einer von Euch evtl. eine Idee, was ich hier machen kann?
Vielen lieben Dank schon einmal im Voraus,
mit lieben Grüßen,
Philipp.


lukel
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 27.08.15
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 29.02.2016, 10:56     Titel:
  Antworten mit Zitat      
Hey,

also ich würde das so machen, vorrausgesetzt, dass in den einzeln .mat-Dateien die gespeicherten Daten einen anderen Namen haben. Ansonsten überschreibst du die Daten immer wieder und erhälst am ende nur die Daten für i=50. Dann müsstest du die Daten zum Beispiel in einer Matrix speichern die du dann Spaltenweise befüllst.

Code:

for i=1:50
    if i<10
        load(['P0' num2str(i) '.mat'])
    else
        load(['P' num2str(i) '.mat'])
    end
end

 


MfG
lukel
Private Nachricht senden Benutzer-Profile anzeigen
 
Univac93

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.02.2016, 11:14     Titel:
  Antworten mit Zitat      
Hallo lukel,

vielen Dank für die schnelle Hilfe! Das hat mir sehr geholfen, allerdings hast Du schon den nächsten Punkt angesprochen, der bei mir nicht klappt.

Der Wert, der aus der Datei eingelesen wird, heißt immer "vAnfang", daher dachte ich, ich könnte das Problem analog zum "load" - Befehl lösen:

Code:

for i=1:50
  if i<10
      load(['P0' num2str(i) '.MAT'])
      ['q0' num2str(i)]= vAnfang;
      clear vAnfang
  else
    load(['P' num2str(i) '.MAT'])
    ['q' num2str(i) ]= vAnfang;
    clear vAnfang
  end
 
 


Es sollen also die Variablen q01, q02, ... ,q50 erstellt werden. Vielleicht kann mir jemand den Fehler hier noch kurz erläutern.
Tausend Dank schon einmal,
liebe Grüße,
Philipp.
 
lukel
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 27.08.15
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 29.02.2016, 11:25     Titel:
  Antworten mit Zitat      
Das geht nicht weil du jetzt einem String (also einem text) einen Wert zuordnen willst.

Allerdings weiß ich nicht wie du aus deinem String eine Variable machst.


ich speichere die Daten dann immer so ab:

Code:

for i=1:50
  if i<10
      load(['P0' num2str(i) '.MAT'])

  else
      load(['P' num2str(i) '.MAT'])

  end

  q(:,i)= vAnfang;
  clear vAnfang
end

 


Dann steht in der ersten Spalte von q P01, in der zweiten P02 und so weiter auf die du dann zugreifen kannst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Univac93

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.02.2016, 11:43     Titel:
  Antworten mit Zitat      
Ganz herzlichen Dank!

Jetzt funktioniert es, wie erhofft und ich kann mir endlich die lästige, manuelle Eingabe sparen!

Made my day! Smile
 
Jan S
Moderator

Moderator


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

Das manuelle einfügen einer 0 ist umständlich und fehleranfällig. Einfacher:
Code:
for i=1:50
  Data = load(sprintf('P%02d.MAT', i);
  q(:,i)= Data.vAnfang;
end

Da im MAT file z.B. die Variable "i" stehen könnte, ist ein direktes Laden in den Workspace immer eine Quelle schwer auffindbarer Fehler. Deshalb sollte man die Ausgaben von LOAD immer in einer Variablen speichern.

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