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

Bestimmte Einträge aus Array löschen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2010, 09:14     Titel: Bestimmte Einträge aus Array löschen
  Antworten mit Zitat      
Hallo zusammen,

ich fange quasi frisch mit Matlab an, daher eine vermutlich recht simple Frage. Mir fehlt die Matlab-spezifische Syntax, ich hoffe mir kann jemand aushelfen.

Mit
Code:
indexA=strmatch('_A_',strvcat(handles.verzeichnisinfo.name));
indexB=strmatch('_B_',strvcat(handles.verzeichnisinfo.name));
 

werden einzlne Verzeichnisnamen rausgesucht und mit
Code:

handles.directory_index=[indexA;indexB];
 

weiterverarbeitet.

Leider sollen nicht alle Verzeichnisnamen in handles.directory_index auftauchen, eine Blacklist sozusagen. Ich bräuchte also eine kleine Schleife über alle indexA, die bestimmte Einträge entfernt.

Die Verzeichnisstuktur sieht ungefähr so aus (Verzname steht hierbei für einen beliebigen Namen):
Code:

Verzname_A_C
Verzname_A_D
Verzname_A_E
Verzname_A_F
Verzname_A_F
 

Und "_F" filtert alle Verzeichnisse raus, die nicht in der Liste auftauchen sollen.

Ich hoffe, ich habe mich nicht all zu unklar ausgedrückt Very Happy Ich bin dankbar für jede Hilfe.


Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 09.03.2010, 10:01     Titel:
  Antworten mit Zitat      
Hi,

eine mittelmäßig elegante Methode wäre auf die selbe weise mit strmatch alle verbotenen (auf '_F' endende) Verzeichnisse herauszusuchen, und mit setdiff die Differenzmenge der beiden Vektoren zu bilden. Besser ginge es sicher mit regulären Ausdrücken, da bin ich allerdings nicht besonders fit drin:

Code:


Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2010, 09:55     Titel:
  Antworten mit Zitat      
Ich habe jetzt mal folgendes ausprobiert:
Code:

indexA=strmatch('_A_',strvcat(handles.verzeichnisinfo.name));
indexB=strmatch('_B_',strvcat(handles.verzeichnisinfo.name));
indexAnti=strfind(strcat(handles.verzeichnisinfo.name),'_F');
indexTest=setdiff(index_m9,index_anti);
handles.directory_index=[indexTest;indexB];
 

Irgendwie wollte strvcat bei strfind nicht funktionieren - obwohl strmatch und strfind nicht so unterschiedlich sind..

Dies liefert jedoch kein anderes Ergebnis. Der Inhalt von indexA ist
Code:

25
26
27
28
29
 

(als nicht-Matlab-Pro frage ich mich, warum der Inhalt mit Nummern ausgedrückt wird und nicht als Name des Verzeichnisses)
und der Inhalt von indexTest ist
Code:

die zwei Nummern hätten zwischen 25 und 29 liegen müssen, damit setdiff funktioniert. Zumal es sich ja auch um die selben Verzeichnisse handelt.

Wo ist der Fehler?
 
Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 10.03.2010, 11:08     Titel:
  Antworten mit Zitat      
Hi,

strmatch und strfind liefern als Zahl zurück _wo_ eine Überstimmung vorliegt. Ich nehme mal an, dass die Verzeichnisse als Cell-Array im Struct vorliegen. Dann könntest du es zum Beispiel so machen:

Code:
verzeichnisse{1} = 'bla_A_C';
verzeichnisse{2} = 'bla_A_F';
verzeichnisse{3} = 'bla_B_C';
verzeichnisse{4} = 'bla_A_D';
verzeichnisse{5} = 'bla_A_F';
pos = strfind(verzeichnisse,'_A_');
neg = strfind(verzeichnisse,'_F');
indPos = ~cellfun('isempty',pos);
indNeg = ~cellfun('isempty',neg);
setdiff(verzeichnisse(indPos == 1),verzeichnisse(indNeg == 1))
 


Das geht aber vermutlich mit regulären Ausdrücken auch in einer Zeile.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.03.2010, 12:06     Titel:
  Antworten mit Zitat      
Hallo

Habe ehrlich gesagt nicht ganz verstanden, was am Ende rauskommen soll.
Etwa Neu Liste mit Verzeichnissen, wo kein _A_F auftaucht?
Oder Indizien auf Verzeichnisse, wo kein _A_F auftaucht?
Oder Mehrere Liste mit Verzeichnissen, nach _A_ und _B_ getrennt?

Das geht in der Tat mit Regulären Ausdrücken viel einfacher,
aber leider nicht ganz in einer Zeile
Code:

verzeichnisse{1} = 'bla_A_C';
verzeichnisse{2} = 'bla_A_F';
verzeichnisse{3} = 'bla_B_C';
verzeichnisse{4} = 'bla_A_D';
verzeichnisse{5} = 'bla_A_F';
%
%
verz_A = regexp(verzeichnisse,'(.)+_A_[^F]$','match')
verz_A = [ verz_A{:}]
 
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 - 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.