Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zuviele 'or's? (https://www.delphipraxis.net/15777-zuviele-ors.html)

Spike2k3 4. Feb 2004 00:03


zuviele 'or's?
 
Hi, :) ich glaub ich hab zuviele OR's eingebaut, denn es kommt immer die Fehlermeldung:

[Error] HTML.pas(76): Operator not applicable to this operand type

So sieht mein Befehl aus, was kann man ändern damit der Fehler verschwindet?????

Delphi-Quellcode:
if Mask<>'*.jpe' or '*.jpg' or '*.jpeg' or '*.png' or '*.gif' then sl.Add(RootFolder + SR.Name+'
') else sl.Add('[img]'+SR.Name+'[/img]
');

Chris1986 4. Feb 2004 00:08

Re: zuviele 'or's?
 
du musst die If-Abfrage anders schreiben:
Delphi-Quellcode:
if (Mask<>'*.jpe') or (Mask<>'*.jpg') or (Mask<>'*.png') //usw.
  then sl.Add(RootFolder + SR.Name+'
') else sl.Add('[img]'+SR.Name+'[/img]
');
MfG
Christian

Spike2k3 4. Feb 2004 00:47

Re: zuviele 'or's?
 
DAnke, jetzt klappts... :wall: :wall: :wall: :)

BungeeBug 4. Feb 2004 06:08

Re: zuviele 'or's?
 
Ausserdem kann man, mein ich, soviele or's machen wie man will. Man muss sie nur richtig machen :)

delphi_newbie_123 4. Feb 2004 10:44

Re: zuviele 'or's?
 
ich glaub das mask muss man auch net immer weider wiederholen oder?

Christian S. 4. Feb 2004 10:51

Re: zuviele 'or's?
 
Wie willst Du sonst einen Bool'schen Ausdruck produzieren? Und nur die kannst Du mit einem OR logisch verknüpfen!

choose 4. Feb 2004 10:58

Re: zuviele 'or's?
 
Hallo Peter,
Zitat:

Zitat von Peter Lustig
Und nur die [Bool'sche Asdrücke] kannst Du mit einem OR logisch verknüpfen!

ist eine mit Sicherheit eine Frage der Anschauung:
Delphi-Quellcode:
var
  myVar1, myVar2, myVar3: Cardinal;
begin
  // ...
  if (myVar1 or myVar2 or myVar3)>0 then
ist in diesem "Spezialfall" äquivalent zu
Delphi-Quellcode:
if (myVar1>0) or (myVar2>0) or (myVar3>0) then
und mitunter sogar etwas performanter...

Christian S. 4. Feb 2004 11:05

Re: zuviele 'or's?
 
Hallo!

Damit hast Du aber doch eine bitweise und keine logische Verknüpfung gemacht (ich habe da meine Worte schon mit bedacht gewählt). Und mit dem Ergebnis der bitweisen Verknüpfung hast Du schließlich einen Bool'schen Ausdruck konstruiert.

Mit einem String - und das ist hier in dem Falle wohl gefragt - wird Dir das aber nicht gelingen. Das geht halt nur im Spezialfall der Integerzahlen (und wahrscheinlich ein paar andere, die mir jetzt nicht einfallen).

MfG
Peter

FriFra 4. Feb 2004 11:19

Re: zuviele 'or's?
 
So geht es aber auch:
Delphi-Quellcode:
const
  Formats: array[0..2] of string = ('*.jpe', '*.jpg', '*.png');
begin
  if Mask in Formats then
    sl.Add('[img]'+SR.Name+'[/img]
')
  else
    sl.Add(RootFolder + SR.Name+'
');
Das finde ich in so einem Fall übersichtlicher, denn wenn noch ein paar Formate dazu kommen, wird die or-Version unübersichtlich.

choose 4. Feb 2004 11:34

Re: zuviele 'or's?
 
Hallo FriFra,
Zitat:

Zitat von FriFra
So geht es aber auch [Konstrukt mit in]

welchen Compiler nutzt Du, um das umzusetzen?

Zwar könnte man eine Lösung Deiner Art mit AnsiIndexText realisieren und dank format mit einem konstanten Array letztlich eine Lösung der Art (ungetestet)

Delphi-Quellcode:
const
  arFormats: array[0..2] of string = ('*.jpe', '*.jpg', '*.png');
  arResult: array[Boolean] of string = ('%s%s
', '[img]%:1s[/img]');
begin
  sl.Add(arResult[AnsiIndexText(AMask, arFormats)>0]);
hinbekommen, aber, dass man den is-Operator in der DL auf Arrays anwenden kann, ist mir unbekannt... :gruebel:

@Peter: Du hast selbstverständlich recht, es handelt sich bei meinen ORs um eine binäre Operation, dessen Ergebnis nur mit dem Vergleichsoperator zu einem Bool'schen wird. Ich war mir nicht sicher, wie genau Du Dein "logisch" nahmst und wollte schlicht eine andere Variante aufzeigen, die der natürlichen Formulierung "a oder b oder c größer null" näherkommt. In Zukunft werde ich wieder jedes Wort von Dir auf die Goldwaage legen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 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