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

Bestimmt Werte aus struct with fields auswählen

 

Alexfromgalax
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2019, 15:24     Titel: Bestimmt Werte aus struct with fields auswählen
  Antworten mit Zitat      
Hallo Leute,
ich habe ein Poblem, bei dem ich leider alleine nicht weiter komme.
Mein Programm lässt den user über eine gui eine File auswählen und soll diese später untersuchen.
Die eingelesene Datei ist ein struct with fields.
und sieht folgendermaßen aus
'struct with fields '

Rxx1Lxxx1_time: [9331×1 single]
Rxx1L0xx1_distance: [9331×1 single]
Rxx1L0xx1_Temperature: [9331×1 single]
Rxx1L0xx1_Pmanifold: [9331×1 single]
R0xx1Lxxx1_Pintake: [9331×1 single]
Rxx1L0xx1_Tmanifold: [9331×1 single]
und so weiter .........

Der vordere Teil der Bezeichnung also Rxx1Lxxx1 variiert je nach Datei. Die Endungen time, distance etc bleiben immer gleich.
Mein Programm soll aus der Datei die Daten von distance, Pmfl und Pitk raussuchen und weiter verarbeiten. Das habe ich nun versucht folgendermaßen zu lösen:
Code:
Data = load(fullpath) % load the file in Data
Name = fieldnames(Data);% get fieldnames
PMFLName = who("*_Pmanifold");% which field has the name _Pmanifold in it

A_index = strcmp(Name, PMFLName);%set the value to one where _Pmanifold is
PMFL = Data.(Name{A_index}) %get the Data corresponding to _Pamifold
 


Das Problem ist, dass manche Kanäle ähnlich benannt wurden. Zum Beispiel gibt es Team_Pmanifold aber auch einfach Pmanifold. Ich benötige aber nur das Pmanifold.
Wie kann ich jetzt alle Kanäle mit dem begriff "Team" im Namen von der weiterverarbeitung ausschließen?
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.06.2019, 16:29     Titel: Re: Bestimmt Werte aus struct with fields auswählen
  Antworten mit Zitat      
Hallo Alexfromgalax,

Du siehst, dass die Programmierung viel einfacher wäre, wenn das "Rxx1Lxxx1_" nicht stören würde. Hier werden Messbedingungen (oder was auch immer) in den Fieldnames des Structs versteckt und behindern so die Verwendung. Viel praktischer wäre:

'struct with fields '

time: [9331×1 single]
timeCondition = 'Rxx1Lxxx1';
distance: [9331×1 single]
distanceCondition = 'Rxx1L0xx1';
usw. Dann wäre die Aufgabe trivial.
Das Vermeiden ungeschickter Variablen-Strukturen ist wichtig beim Programmieren. Denn wenn man sich mit einer ungeschickten Wahl die Arbeit unnötig schwer macht, vergeudet man viel Zeit.

"Pmfl und Pitk" tauchen gar nicht auf, aber du meinst wahrscheinlich "Pmanifold" und "Pintake".

Variablen direkt per load in den WorkSpace zu laden, ist ein weiteres ernstes Problem. Dieses "dynamische Erzeugen" von Variablen bremst Matlab massiv aus, weil nun nicht im im Vorhinein klar ist, welche Variablen woher stammen. Das Debuggen wird auch entsprechend schwieriger.
Du verwendest stattdessen einen Output für den load() Befehl. Dann kannst du aber nicht mit who im Workspace suchen, sondern kannst dich auf den Inhalt von "Name" beschränken:
Code:
Data = load(fullpath) % load the file in Data
Name = fieldnames(Data);% get fieldnames
PMFLName_ = Name{contains(Name, '_Pmanifold')};
PMFL_ = Data.(PMFLName_);

% Um PManifold zu bekommen, aber nicht _PManifold:
PMFLName = Name{contains(Name, 'Pmanifold') & ~containscontains(Name, '_Pmanifold')};

Zitat:
Wie kann ich jetzt alle Kanäle mit dem begriff "Team" im Namen von der weiterverarbeitung ausschließen?

Schwer zu sagen. Was sind denn die "Kanäle"? Was bedeutet "ausschließen"? Du brauchst sie ja einfach nicht auszuwählen. Du könntest die entsprechenden Namen auch einfach aus der List entfernen:
Code:
Name(contains(Name, 'Team')) = []

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.