Logisches Problem mit And

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von foxm2k.

    Logisches Problem mit And

    Ich habe folgenden Code:

    VB.NET-Quellcode

    1. For Each filereader As IO.FileInfo In inforeader.GetFiles
    2. If ((Not filereader.Name.EndsWith(".jpg")) And (Not filereader.Name.EndsWith(".alb"))) And ((Not filereader.Name.EndsWith(".ini") And (Not filereader.Name.EndsWith(".txt")))) Then
    3. Dosomething() 'Nur ausführen, falls filereader.Name nicht mit einem der oben genannten Endungen endet
    4. End If
    5. Next


    Ich möchte, dass DoSomething() nur ausgeführt wird, falls fiereader.Name nicht mit einer der im Code stehenden Endungen endet. Allerdings funktioniert das nicht. ich vermute, ich habe einfach einen logischen Denkfehler, aber ich komme einfach nicht darauf. Es wäre super, falls mir jemand sagen kann, wieso DoSomething auch ausgeführt wird, wenn filereader.Name mit z.B. ".txt" endet.
    Ohne konkreten Code ist schwer was zu sagen.

    Na schau dir doch die Wahrheitstabelle mal an und vergleich das mit deinem konkreten Ausdruck, achte auch auf evtl. auf die Klammersetzung. Dein DoSomething wird dann ausgeführt, wenn die Bedingung Wahr wird. Und wahr wird sie sobald mindestens ein Literal wahr wird. Wenn es dir beim Aufbauen deiner Bedingung hilft dann laß zunächst die Negationen weg oder schreib etwas in die Else-Zweig oder probier es zunächst nur mit einem oder zwei Literalen, bis du die Logik verstanden hast. Nur eine Frage der Logik.

    foxm2k schrieb:

    das logische Und, die Konjunktion, wird nur dann wahr, wenn alle Teile der Synthese war sind.


    Genau das will er doch.

    Wenn er Or nimmt, dann wid DoSomething immer ausgeführt, egal welche Endung die Datei hat.

    Vielleicht stimmt etwas mit der Anordnung der Klammern nicht. Probier's mal so:

    VB.NET-Quellcode

    1. If (Not filereader.Name.EndsWith(".jpg")) And (Not filereader.Name.EndsWith(".alb")) And (Not filereader.Name.EndsWith(".ini")) And (Not filereader.Name.EndsWith(".txt")) Then


    Falls das auch nichts bringt, könntest du es noch so probieren:

    VB.NET-Quellcode

    1. If Not (filereader.Name.EndsWith(".jpg") Or filereader.Name.EndsWith(".alb") Or filereader.Name.EndsWith(".ini") Or filereader.Name.EndsWith(".txt")) Then
    Klar kann man alles auch negiert verknüpfen, aber davon wirds doch auch nicht übersichtlicher oder? So sollte es funktionieren:

    VB.NET-Quellcode

    1. Dim inforeader As New IO.DirectoryInfo("C:\")
    2. For Each filereader As IO.FileInfo In inforeader.GetFiles
    3. If Not (filereader.Name.EndsWith(".jpg") Or filereader.Name.EndsWith(".alb") Or filereader.Name.EndsWith(".ini") Or filereader.Name.EndsWith(".txt")) Then
    4. MsgBox(filereader.Name) 'Nur ausführen, falls filereader.Name nicht mit einem der oben genannten Endungen endet
    5. End If
    6. Next


    P.S. Habs jetzt ausprobiert... die MSGBox kommt nur noch wenn es sich um Dateien handelt die nicht einem der angegebenen Typen entsprechen.

    Gruß,

    f0x

    Edit: Seh grad, das ist eh das was roddy ganz unten geschrieben hat.