Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - verkürzte IF-Abfrage möglich?


NuCHiLL - Fr 19.03.04 15:20
Titel: verkürzte IF-Abfrage möglich?
Hallo,
kann man in dem folgenden Schnipsel die IF-Abfage verkürzen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: Stringvar Suppress: Boolean);
var Text: String;
begin
 Text:=ansilowercase(acontent);

 memo1.lines.add('<' +auser.Nick+ '> ' +acontent);
   if ((Text = channel.Text + ' :ich teste'OR
       (Text = channel.Text + ' :ich teste!'OR
       (Text = channel.Text + ' :ich teste !'))
   then
      begin
      ...
      end;
end;


wenn möglich mit Schnipsel :wink:

Moderiert von user profile iconPeter Lustig: Topic verschoben


NuCHiLL - Fr 19.03.04 15:33

Sorry! hab zu spät gemerkt, das es in der falschen "abteilung" war... :oops:


MaxiTB - Fr 19.03.04 18:54

Leider kenne ich keinen schnelleren Weg ...
Es gäbe noch die Möglichkeiten, den String auseinanderzuschnippseln, damit bist du vielleicht (!) ein bisserl schneller, aber der Code wird sogar mehr. Selbst wenn es ein elegantes 'case of' für strings gäbe würde es dir nicht weiterhelfen ... auch wenn das persönlich bei den meisten Programmiersprachen vermisse (da glänzt mal VB).


NuCHiLL - Sa 20.03.04 12:28

MaxiTB hat folgendes geschrieben:
Leider kenne ich keinen schnelleren Weg ...
...


Es soll eigentlich nicht schneller sein! Ich möchte den Code verkürzen...
Hab mir überlegt den Find-Dialog einzubauen, dürfte aber das gleiche Problem sein, zudem wird der code dadurch länger...

so wie es aussieht scheint es wirklich keine andere Möglichkeit zu geben...

danke @MaxiTB!


catweasel - Sa 20.03.04 13:34

Hmm Ich weiss zwar selbst nicht wie das geht, aber kann man da keine Mengen in Delphi definieren ?

Muss irgendwie mit SET of gehen, hab aber keine Ahnung da so richtig
So nach dem Motto:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const
menge : set of  ['ich teste','ich teste!','ich teste !'];

var abfrage : string;


//   .. und dann irgendwie so abfragen...

if abfrage is in menge then ..........


Hab aber echt keien Ahnung ob das so irgendwie möglich ist..... bzw. wie das mit den Sets genau funktiuoniert


Phantom1 - Sa 20.03.04 13:38
Titel: Re: verkürzte IF-Abfrage möglich?
versuche es mal so hier:

NuCHiLL hat folgendes geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: Stringvar Suppress: Boolean);
begin
 memo1.lines.add('<' +auser.Nick+ '> ' +acontent);

 if Pos(channel.Text+' :ich teste', acontent)>0 then
 begin
   ...
 end;
end;



NuCHiLL - Sa 20.03.04 16:09

thx @Phantom1 !!!

funktioniert!


Delete - Sa 20.03.04 16:13

catweasel hat folgendes geschrieben:
Muss irgendwie mit SET of gehen, hab aber keine Ahnung da so richtig


Nee, nee... mit Set is da nix. Ein set ist intern was ganz anderes, nämlich eine Bitmaske.

Zum Beispiel in "Set of byte" sind 256 bits, sprich 8 Integers hintereinander.
Wird 8 in das Set aufgenommen, dann wird das 8te Bit auf 1 gesetzt. Umgekehrt funktioniert der Test mit 'in'.
Wenn du jetzt ein "Set of (Element1,Element2,Element3,Element4)" deklarierst, bekommst du intern eine Bitmaske aus 4 Bits.
Mit irgendwas anderem als solchen internen Konstanten und Zahlen bis 255 geht das aber nicht.

Mann verdammt ich sollte echt langsam mal eine "Was macht Delphi intern"-FAQ schreiben anstatt sowas 10X in unterschiedlichen Foren zu erklären.