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

leere Zeilen aus Struct löschen

 

timlie
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2021, 09:36     Titel: leere Zeilen aus Struct löschen
  Antworten mit Zitat      
Hey weiß jemand wie man leere Zeilen aus einem Struct löscht. Wie mein Struct aussieht, könnt ihr im angehängten Bild sehen. Ich will die Zeile jedoch nur löschen, wenn sie komplett leer ist.

Lg
Tim

struct.PNG
 Beschreibung:

Download
 Dateiname:  struct.PNG
 Dateigröße:  12.46 KB
 Heruntergeladen:  136 mal
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 08.03.2021, 10:24     Titel:
  Antworten mit Zitat      
1. prüfen ob leer
2. struct(Index) = []
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2021, 10:49     Titel:
  Antworten mit Zitat      
Hallo,

das Struct lässt sich vielleicht (statt Screenshot wäre ein .mat-File hilfreich, dann könnte man es einfach ausprobieren) in einen Table umwandeln (struct2table). Dann ginge das Löschen leerer Zeilen (und einiges anderes) vermutlich deutlich einfacher.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
timlie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2021, 11:33     Titel:
  Antworten mit Zitat      
Hey danke für eure antworten . Ich habe eine Lösung bei Matlab Answers gefunden:
Code:

s( all( cell2mat( arrayfun( @(x) structfun( @isempty, x ),s , 'UniformOutput', false ) ), 1 ) ) = [];
 


Lg
Tim
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2021, 11:52     Titel:
  Antworten mit Zitat      
Hallo,

das ist eine recht monströse Lösung. Ich könnte mir vorstellen, dass es mit Tables deutlich einfacher wäre. Dafür bitte wie gesagt die Variable als .mat anhängen, ggf. gezippt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
timlie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2021, 12:13     Titel:
  Antworten mit Zitat      
Habe die mat-file in den Anhang gepackt
Lg
Tim

test.mat
 Beschreibung:

Download
 Dateiname:  test.mat
 Dateigröße:  772 Bytes
 Heruntergeladen:  129 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das "schlimme" an der Struktur ist, dass die Datentypen innerhalb eines Feldes nicht einheitlich sind. Dadurch wird das Umwandeln in einen Table erst mal kompliziert. Das kann sich aber langfristig lohnen, damit man besser mit den Daten arbeiten kann.

Code:
t = struct2table(s)

% Spalten "vernünftig" formatieren
t.art(cellfun(@isempty, t.art)) = {""};
t.art = vertcat(t.art{:});
t.art(t.art == "") = missing;

t.koordinaten(cellfun(@isempty, t.koordinaten)) = {[NaN, NaN]};
t.koordinaten = cell2mat(t.koordinaten);

t.einlegen(cellfun(@isempty, t.einlegen)) = {NaN};
t.einlegen = vertcat(t.einlegen{:});

t.parameter(cellfun(@isempty, t.parameter)) = {[NaN, NaN]};
t.parameter = cell2mat(t.parameter)

% Jetzt wird es dafür einfach:
t = rmmissing(t, 'MinNumMissing', width(t))


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
timlie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2021, 14:42     Titel:
  Antworten mit Zitat      
Hey danke für den Ansatz. Hat die Lösung, die ich oben gefunden habe irgendwelche Nachteile. An sich muss ich danach nicht mehr viel mit den Daten aus dem Struct machen, sondern nur auf die einzelnen Felder zugreifen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2021, 17:37     Titel:
  Antworten mit Zitat      
Hallo,

ich finde Tables übersichtlicher.
Wenn du mit den Daten nicht mehr viel machen musst, ist das relativ egal.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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: 09.03.2021, 14:00     Titel: Re: leere Zeilen aus Struct löschen
  Antworten mit Zitat      
Hallo timlie,
Code:
C = squeeze(struct2cell(s));
remove = all(cellfun(@isempty, C), 1);
s(remove) = [];

STRUCTFUN und ARRAYFUN sind hier ein Overkill.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
timlie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2021, 17:55     Titel:
  Antworten mit Zitat      
Danke für eure Hilfe Smile!
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.