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

Vektoren in Workspace nach bestimmter Endung suchen

 

Hans11
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2017, 08:49     Titel: Vektoren in Workspace nach bestimmter Endung suchen
  Antworten mit Zitat      
hallo Zusammen,

ich habe folgendes Problem:
Ich lese Messdaten ein, die dann verschiedene Endungen im Workspace haben.
Jetzt muss ich Endungen mit einer bestimmten Endung bearbeiten.


Über den Befehl:
Code:
Labels = who('*_ms')


bekomme ich ein Cell erzeugt, mit allen Namen der zu bearbeitenden Vektoren.
Wie kann ich jetzt über diese Cell auf meinen eigentlichen Vektor zugreifen um beispielsweiße die Länge des Vektors zu ändern?


Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.05.2017, 22:38     Titel:
  Antworten mit Zitat      
Hallo,

dazu müsstest du eval o.ä. verwenden, und davon wird generell abgeraten.

Zitat:
Ich lese Messdaten ein, die dann verschiedene Endungen im Workspace haben.

Wie erfolgt das Einlesen?
Das Laden in eine Struktur wäre deutlich zu bevorzugen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2017, 14:12     Titel:
  Antworten mit Zitat      
Ich lese die Dateien mit dem Tool mdfimport ein.
https://de.mathworks.com/matlabcent.....-import-tool-and-function

Dann erhalte ich die Messdaten als Vektoren (Typ double).
Im Anschluss muss ich bestimmte Vektoren (die aber die gleich Endung haben), bearbeiten. Und zwar möchte ich diese Vektoren dann auf die selbe Länge bringen.

Hat mir jemand für dieses Problem eine Abhilfe?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.05.2017, 20:35     Titel:
  Antworten mit Zitat      
Hallo,

nach dem Laden mit mdfimport:
Code:
save('mdf_data.mat');
clear
data = load('mdf_data.mat');


Danach hast du die Daten in einer Struktur.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2017, 19:00     Titel:
  Antworten mit Zitat      
Ich habe nach dem Import mit MDFImport eine Vielzahl von Vektoren mit unterschiedlichen Namen vom Typ "double".
Jetzt möchte ich Vektoren, die eine bestimmte Endung im Namen haben, aufrufen und auf eine bestimmte Länge bringen.
Wie kann ich das am einfachsten bewerkstelligen?

Danke für Eure Hilfe.

Gruß Hans
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.07.2017, 19:55     Titel:
  Antworten mit Zitat      
Hallo,

das, was du jetzt geschrieben hast, hast du eigentlich auch schon vor einem Monat geschrieben.

Wenn du die Daten wie vorgeschlagen in eine Struktur geladen hast, dann kannst du eine for-Schleife über fieldnames machen. Dann ist nun die Frage, wie du die Vektoren auf eine Länge bringen willst: erste n Elemente extrahieren, interpolieren, oder vielleicht was ganz anderes?

Code:
flds = fieldnames(data);
for k = 1:numel(flds)
if strcmp(flds(end-n:n), endung)
data.(flds{k}) = Anpassung von data.(flds{k})
end
end
 

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2017, 21:24     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte es nochmal geschrieben weil ich nicht zurecht kam mit der Umwandlung.
Das hat jetzt mal geklappt.
Ich würde gerne die Funktion interp1 verwenden.

Code:
flds = fieldnames(data);
for k = 1:numel(flds)
if strcmp(flds(k,1), '*_10ms')
data.(flds{k}) =interp1(1:length(data.(flds{k})), data.(flds{k}), linspace(1, length(data.(flds{k})), length(data.time_10ms)))';
end
end


Leider findet er beim Prüfen ob die Strings die selben sind keine Treffer:
Code:
if strcmp(flds(k,1), '*_10ms')


Wenn ich statt
Code:
den ganzen Namen vom Vektor eintippe um zu prüfen ob das Skript funktioniert, klappt es wunderbar.
Was mache ich falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.07.2017, 21:47     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich hatte es nochmal geschrieben weil ich nicht zurecht kam mit der Umwandlung.

Bitte dann die konkreten Probleme nicht vergessen anzugeben.

strcmp unterstützt keine Platzhalter. Du musst also wie in meinem Beispiel angedeutet die letzten 4 Buchstaben vergleichen. Alternativ die relativ neue Funktion endsWith .

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2017, 11:23     Titel:
  Antworten mit Zitat      
Ich habe das ganze jetzt nochmal versucht, jedoch habe ich ein Problem mit Skript.

Und zwar weiß ich nicht wie ich den Code formulieren muss, damit er eben die letzten 5 Zeichen abgleicht und nicht die ersten 5.

So prüft er die ersten 5 Zeichen:
Code:
if strncmp(flds{k},'XXXYY',5)


Wie muss ich den Code formulieren damit er die letzten 5 Zeichen prüft?
Hast du mir noch einen Tipp?


Vielen Dank.
Gruß Hans
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.07.2017, 12:06     Titel:
  Antworten mit Zitat      
Hallo,

habe ich dir bereits geschrieben. Entweder du verwendest endsWith oder
Code:
strcmp(flds(end-4:end), '_10ms')


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2017, 12:45     Titel:
  Antworten mit Zitat      
Code:
strcmp(flds(end-4:end), '_10ms')


Mit diesem Ausdruck nimmt er aber die letzten 5 Einträge aus dem Cell "flds" und nicht die letzten 5 Buchstaben eines Eintrags.
Oder stehe ich gerade auf dem Schlauch?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.07.2017, 12:48     Titel:
  Antworten mit Zitat      
Hallo,

pardon:
Code:
strcmp(flds{k}(end-4:end), '_10ms')


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 05.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2017, 12:57     Titel:
  Antworten mit Zitat      
Hallo,

herzlichen Dank! Jetzt funktioniert es.

Gruß Hans
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.