Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi and / or (https://www.delphipraxis.net/138599-a.html)

chicky 13. Aug 2009 10:18


and / or
 
Ich hab nur eine kleine Frage.
Ich möchte sowas machen wie:
Delphi-Quellcode:
if ((A=1) and (B=1) and (C=1)) or ((A=2) and (B=3) and (C=4)) then
//..tue irgendwas..
Funktioniert das so mit der KLammersetzung oder wie interpretiert Delphi das hier?

Miolin 13. Aug 2009 10:20

Re: and / or
 
Das müsste eigentlich funktionieren...
Ich setze immer noch Klammern um den gesamten, zu prüfenden Ausdruck

Delphi-Quellcode:
if (((A=1) and (B=1) and (C=1)) or ((A=2) and (B=3) and (C=4))) then
//..tue irgendwas..
MfG

Oliver

DeddyH 13. Aug 2009 10:20

Re: and / or
 
Die Klammern werden von innen nach außen aufgelöst.

angos 13. Aug 2009 10:21

Re: and / or
 
ob das so funktioniert wie du das denkst, weis ich nicht ;) aber delphi prüft in dem Fall

if Bedingung1 or Bedingung2 then
...

// Wobei gilt:
Bedingung1 := (A=1) and (B=1) and (C=1);
Bedingung2 := (A=2) and (B=3) and (C=4);

chicky 13. Aug 2009 10:22

Re: and / or
 
Genau das will ich auch. Super danke, das wars schon :thumb:

chicky 13. Aug 2009 10:41

Re: and / or
 
Stop. Da gibts noch ein Problem :
Delphi-Quellcode:
if ((YearOf(LetztesDatum)) <> (YearOf(NeuesDatum)) and (MonthOf(LetztesDatum) <> 12)) then ..
Vor then meckert er:

Zitat:

Operator ist auf diesen OPerandenTyp nicht anwendbar !

Apollonius 13. Aug 2009 10:43

Re: and / or
 
Jetzt hast du zuviele Klammern gesetzt. Die Klammern in ) <> ( sind zu viel.

chicky 13. Aug 2009 11:10

Re: and / or
 
Manchmal sieht man den Wald vor lauter KLammern nicht :wall:

xZise 13. Aug 2009 16:34

Re: and / or
 
Genau deshalb habe ich mir bei solchen Ketten angewöhnt das wie begin/end zu behandeln:
Delphi-Quellcode:
function TExemplareVST.IstGefunden(const AData: TZeile): Boolean;
var
  PufferZeile : TExemplarZeile;
begin
  PufferZeile := AData as TExemplarZeile;
  Result := ((FSuchText = '') or
             ((Assigned(PufferZeile.Buch)) and (estoBuchtitel in FSuchTextOptionen) and (Pos(LowerCase(FSuchText), LowerCase(PufferZeile.Buch.Titel)) >= 1)) or
             ((estoBeschreibung in FSuchTextOptionen) and (Pos(LowerCase(FSuchText), LowerCase(PufferZeile.Bezeichnung)) >= 1))
            ) and
            ((FSuchBuchIDs.Count = 0) or ((Assigned(PufferZeile.Buch)) and (FSuchBuchIDs.IndexOf(PufferZeile.Buch.ID) >= 0))) and
            ((FSuchPersonenIDs.Count = 0) or ((Assigned(PufferZeile.Ausgeliehen)) and (FSuchPersonenIDs.IndexOf(PufferZeile.Ausgeliehen.ID) >= 0))) and
            (
             (FSuchAusgeliehenTyp = [esatNurAusgeliehene, esatKeineAusgeliehene]) or
             (
              ([esatNurAusgeliehene] = FSuchAusgeliehenTyp) and (Assigned(PufferZeile.Ausgeliehen))
             ) or
             (
              ([esatKeineAusgeliehene] = FSuchAusgeliehenTyp) and (not Assigned(PufferZeile.Ausgeliehen))
             )
            );
end;
Wobei das nicht 100% konsequent ist, aber die Ausdrücke in den Zeilen 7, 8, 10 und 11 gehören "zusammen" ;)

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz