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

Problem bei if- Anweisung

 

p.nietnagel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2010, 16:36     Titel: Problem bei if- Anweisung
  Antworten mit Zitat      
Hallo,

ich raufe mir jetzt seit Stunden die Haare über ein Problem, das eigentlich keines sein dürfte:

Ich habe einen Ordner mit Bildern, von denen ich bestimmte Bilder in eine Liste einfügen möchte.
Und zwar: alle ".bmp" Dateien, die an 5. Stelle keine eine "3" und keine "6" enthalten dürfen.
Das mit der Selektion der ".bmp" Dateien klappt, warum dann die analoge Selektion der beiden Zahlen nicht?
Ich habe es mit switch Anweisungen probiert, mit "==" und dann einfach übergehen, aber ich komme nicht auf das gewünschte Ergebnis. Was mache ich falsch?


Code:

Dir = {
'.\images\rf151_mask.bmp'      
'.\images\rf152.bmp'      
'.\images\rf153_mask.bmp'      
'.\images\rf154_mask.bmp'      
'.\images\rf155_mask.bmp'      
'.\images\rf156_mask.bmp'      
'.\images\rf15neutral_mask.bmp'
'.\images\rf161_mask.bmp'      
'.\images\rf162_mask.bmp'      
'.\images\rf163_mask.bmp'      
'.\images\rf164_mask.bmp'      
'.\images\rf165_mask.bmp'      
'.\images\rf166_mask.bmp'
'.\images\rf151_mask.png'      
'.\images\rf152.png'      
'.\images\rf153_mask.png'      
'.\images\rf154_mask.png'      
'.\images\rf155_mask.png'      
'.\images\rf156_mask.png'      
'.\images\rf15neutral_mask.png'
'.\images\rf161_mask.png'      
'.\images\rf162_mask.png'      
'.\images\rf163_mask.png'      
'.\images\rf164_mask.png'      
'.\images\rf165_mask.png'      
'.\images\rf166_mask.png'
}

counter = 0;
for iFiles = 1:length(Dir);
    AllFiles = cell2mat(Dir(iFiles));
    SearchBMP = AllFiles((length(AllFiles)-3):length(AllFiles));
    if SearchBMP == '.bmp'
        SearchNumber = AllFiles(length(AllFiles)-length(AllFiles)+5);
        if (SearchNumber~=3) || (SearchNumber~=6)
            counter = counter + 1;
            ListBMP(counter,:) = cellstr(AllFiles);
        end
    end
end
size(ListBMP)
 


Vielen Dank im Voraus!!!

p.nietnagel
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 09.08.2010, 17:01     Titel:
  Antworten mit Zitat      
Hallo,
du machst schon einige Fehler:

1) Verwende FILEPARTS
2) Strings sollte man nicht mit Gleich-Operatoren vergleichen,
sondern dazu die Funktionen verwenden wie STRCMP oder STRFIND

3) String mit Double zu vergleichen, kann einfach nicht klappen


Code:

double('3')
% ergibt 51, und nicht 3
 


4) Vektorisierung verwenden

Code:

Dir = {
'.\images\rf151_mask.bmp'      
'.\images\rf152.bmp'      
'.\images\rf153_mask.bmp'      
'.\images\rf154_mask.bmp'      
'.\images\rf155_mask.bmp'      
'.\images\rf156_mask.bmp'      
'.\images\rf15neutral_mask.bmp'
'.\images\rf161_mask.bmp'      
'.\images\rf162_mask.bmp'      
'.\images\rf163_mask.bmp'      
'.\images\rf164_mask.bmp'      
'.\images\rf165_mask.bmp'      
'.\images\rf166_mask.bmp'
'.\images\rf151_mask.png'      
'.\images\rf152.png'      
'.\images\rf153_mask.png'      
'.\images\rf154_mask.png'      
'.\images\rf155_mask.png'      
'.\images\rf156_mask.png'      
'.\images\rf15neutral_mask.png'
'.\images\rf161_mask.png'      
'.\images\rf162_mask.png'      
'.\images\rf163_mask.png'      
'.\images\rf164_mask.png'      
'.\images\rf165_mask.png'      
'.\images\rf166_mask.png'
};

counter     = 0;
searchfiles = false(size(Dir));
for iFiles = 1:length(Dir);

   [fpath,fname,ext] = fileparts(Dir{iFiles});
    if strcmpi(ext,'.bmp')
       
       
        if ~strcmpi(fname(5),'3') && ~strcmpi(fname(5),'6')
            searchfiles(iFiles)=true;
        end
    end
end
ListBMP = Dir(searchfiles);
size(ListBMP)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
p.nietnagel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 11:24     Titel:
  Antworten mit Zitat      
Hi denny,

vielen Dank für Deine Mühe!

Zitat:
du machst schon einige Fehler:
Embarassed
Ich hatte es befürchtet.

Vielen Dank für die wertvollen Tipps, ich hab viel gelernt!
Allerdings hab ich noch eine Verständnisfrage:
mir ist die Logik klar (denke ich), dass Du quasi erstmal die Matrix
Code:
searchfiles
mit Nullen füllst, bzw. annimmst, die Abfrage sei false. Und dann wird bei Zutreffen der Abfragen das false durch true ersetzt.
Und am Ende wird die Liste mit nur den false Einträgen ausgegeben?

Gruß,
p.nietnagel
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.08.2010, 11:50     Titel:
  Antworten mit Zitat      
Hallo

p.nietnagel hat Folgendes geschrieben:

erstmal die Matrix
Code:
searchfiles
mit Nullen füllst, bzw. annimmst, die Abfrage sei false. Und dann wird bei Zutreffen der Abfragen das false durch true ersetzt.
Und am Ende wird die Liste mit nur den false Einträgen ausgegeben?

Gruß,
p.nietnagel


Ja, das stimmt so fast.
Ich belege für meine Variable SEARCHFILES mit FALSE-Werten vor,
das sind Logikwerte, welcher nur aus Null(FALSE)-Werten und Einser(TRUE)-Werten bestehen. Diese Kann man auch dann als Indizien verwenden, dabei werden nur die Werte, die TRUE sind, ausgegeben. Deswegen Lege ich SEARCHFILES in der Größe von DIR-Variable.

In der Schleife werden die Stellen rausgesucht, wo an 5.Stelle keine 3 und keine 6 vorkommt. Diese Werte mit TRUE-Markiert.

Und dann kann ich aus DIR, die gesuchten Files ausgeben, Es werden die Stellen ausgeben die mit TRUE markiert sind.
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.