Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "If not" bei string realisieren (https://www.delphipraxis.net/108710-if-not-bei-string-realisieren.html)

o0o 18. Feb 2008 10:13


"If not" bei string realisieren
 
hallo leutz ich hab da wieder ein problem:

also so hatte ich es mir vorgestellt nur so stimmt das nicht:
Delphi-Quellcode:
if not domain = 'xxx.de'
or 'xx.com'
or 'xx-xx.de'
or 'xxxxxxx.de'
or 'x.de'}
then begin
irgendwas machen;
end;
also ich hab hier ein paar domains die gefiltert werden sollen was auch gut klappt mit fast dem selben source(ohne das 'not')
wieso geht es mit if not nicht wenn die domain zb unbekannt ist? oder habt ihr ne alternative idee?

da o0o

mkinzler 18. Feb 2008 10:15

Re: "If not" bei string realisieren
 
Sind alle Bedingungen alternativ? Dann musst du Klammern. Zudem musst du die Variable in jede Teilbedingung aufnehmen. statt not = kannst du auch <> nehmen

chest3rs 18. Feb 2008 10:17

Re: "If not" bei string realisieren
 
Hi,

if not funktioniert bei Strings nicht. Versuchs mal mit

Delphi-Quellcode:
if (domain <> 'xxx.de')
or (domain <> 'xx.com')
or (dowmain <> 'xx-xx.de')
etc...
then begin
irgendwas machen;
end;

mkinzler 18. Feb 2008 10:20

Re: "If not" bei string realisieren
 
Zitat:

if not funktioniert bei Strings nicht
not negiert eine Bedingung, das hat nichts mit dem Typen der Bedingung zu tun.

Sharky 18. Feb 2008 10:22

Re: "If not" bei string realisieren
 
Hai oOo,

wenn das ganze etwas flexibler sein soll wäre es eventuell besser mit z.B. einer TStringList zu arbeiten.

chest3rs 18. Feb 2008 10:25

Re: "If not" bei string realisieren
 
Zitat:

not negiert eine Bedingung, das hat nichts mit dem Typen der Bedingung zu tun.
Dann hat das etwas mit der Schleife zu tun?

mkinzler 18. Feb 2008 10:27

Re: "If not" bei string realisieren
 
Das hat mit den oben genannten Gründen zu tun:
statt s = x or y or z muss es (s= x) or (s = y) or (s= z) heissen

peschai 18. Feb 2008 10:29

Re: "If not" bei string realisieren
 
Um auf Sharky einzugehen....

Delphi-Quellcode:
var
  j1:TStringlist;
begin
  j1 := TStringList.Create;
  try
    j1.Add('xxx.com');
    j1.Add('xxx-xxx.com');

    if (j1.IndexOf(domain)<0) then
      begin
        ...Dann tue etwas...
      end;
  finally
    FreeAndNil(j1);
  end;
end;

himitsu 18. Feb 2008 10:29

Re: "If not" bei string realisieren
 
NOT und OR funktionieren schon, nur nicht mit Strings.
Sie sind binäre/logische Operatoren und keine für Strings!

also entweder ähnlich wie es chest3rs schon zeigte (nur mit AND :zwinker: )

Delphi-Quellcode:
if (domain <> 'xxx.de')
and (domain <> 'xx.com')
and (dowmain <> 'xx-xx.de')
etc...
then
oder
Delphi-Quellcode:
if (domain = 'xxx.de')
or (domain = 'xx.com')
or (dowmain = 'xx-xx.de')
etc...
then
oder schau mal nach
Delphi-Referenz durchsuchenMatchText/Delphi-Referenz durchsuchenAnsiMatchText oder Delphi-Referenz durchsuchenMatchStr/Delphi-Referenz durchsuchenAnsiMatchStr
Delphi-Quellcode:
if not MatchText(domain, ['xxx.com', ..., 'x.de']) then

chest3rs 18. Feb 2008 10:35

Re: "If not" bei string realisieren
 
Zitat:

statt s = x or y or z muss es (s= x) or (s = y) or (s= z) heissen
sorry, ka was du meinst...

Ich weis nur, dass man eine Negierung bei dieser Art von Operanden nicht verwenden kann. In dem Fall muss es Text <> '{Text}' heißen.

Grüße

mkinzler 18. Feb 2008 10:37

Re: "If not" bei string realisieren
 
Delphi-Quellcode:
if s <> 'xxx'
bewirkt das gleiche wie
Delphi-Quellcode:
if not (s = 'xxx')

chest3rs 18. Feb 2008 10:39

Re: "If not" bei string realisieren
 
Oh :roll:,

alles klar, wusste ich nicht, dass das auch so geht.

Danke

SirThornberry 18. Feb 2008 10:39

Re: "If not" bei string realisieren
 
er meint das man klammern muss. Ansonsten wird versucht die operatoren auf die Variable anzuwenden und das klappt nicht. Durch das Klammern wird erst das in der Klammer aufgelöst und da kommt ein bool raus. Und diesen kann man mit logischen und binären operatoren handhaben. String1 or String2 macht ja auch keinen Sinn, was soll da schon rauskommen? alle Bytes so weit möglich miteinander irgendwie vermixen?!

o0o 18. Feb 2008 10:49

Re: "If not" bei string realisieren
 
ach gott ihr seid ja heut mal aktiv:D
ich war nur was essn und soviele posts hier...klasse ich liebe euch:)

also damit:
Delphi-Quellcode:
if not (s = 'xxx')
klappt es einwandfrei...genauso wie ich es wollte...

ich danke mal allen die sich hier am thread beteidigt haben...da o0o

himitsu 18. Feb 2008 10:57

Re: "If not" bei string realisieren
 
Zitat:

Zitat von o0o
klappt es einwandfrei...genauso wie ich es wollte...

hast du dir auch mal alle Beiträge komplett angesehn?

(da hat wer am Ende seines Beitrags nette Funktion erwähnt :zwinker: )

peschai 18. Feb 2008 11:00

Re: "If not" bei string realisieren
 
... und was ist mit der idee von Sharky mit stringlist und indexof (bsp peschai) ?

himitsu 18. Feb 2008 11:24

Re: "If not" bei string realisieren
 
nja, abgesehn davon daß man dafür erstmal 'ne Klasse (TStringList) erstellen, befüllen und am Ende wieder freigeben muß,
diese Klasse nicht unbedingt sooo schnell ist
und sie auch etwas Speicher verbraucht ...

ist da nix einzuwenden,

aber wie gesagt, es gibt praktische/fertige Funktionen :angel:

Delphi-Quellcode:
if not MatchText(domain, ['xxx.com', 'xxx-xxx.com', 'x.com']) then ...


const MyList = Array[0..2] of String = ('xxx.com', 'xxx-xxx.com', 'x.com');
if not MatchText(domain, MyList) then ...

und wer die vielen ADD's nicht mag, könnte es auch zusammen übergeben und über die Trennzeichen (#13, #10 oder #13#10 ... CRLF) abgrenzen.
Delphi-Quellcode:
var
  j1:TStringlist;
begin
  j1 := TStringList.Create;
  try
    j1.Text := 'xxx.com'#10'xxx-xxx.com'#10'x.com';
    if j1.IndexOf(domain) < 0 then
      begin
        // ... tue etwas ...
      end;
  finally
    j1.Free;
  end;
end;

o0o 18. Feb 2008 13:32

Re: "If not" bei string realisieren
 
hmm jo was isn eigendlich matchtext?
hab mal gesucht und gefunden:
http://www.delphipraxis.net/internal...ight=matchtext

verstehe leider nicht wie es funkt...0_o
waere nice wenn mir jemand auf die spruenge helfen koennte^^

da o0o

marabu 18. Feb 2008 13:39

Re: "If not" bei string realisieren
 
Hallo,

vielleicht kannst du es so umsetzen:

Delphi-Quellcode:
// if not MatchText(domain, ['xxx.com', 'xxx-xxx.com', 'x.com']) then ...
if {StrUtils.}AnsiIndexText(domain, ['xxx.com', 'xxx-xxx.com', 'x.com']) < 0 then ...
Freundliche Grüße

himitsu 19. Feb 2008 08:26

Re: "If not" bei string realisieren
 
jupp, intern macht MatchText ja auch nichts anderes, als IndexText aufzurufen :stupid:

es ist aber auch schon in meinem D7 enthalten (obwohl die OH es noch nicht kennt).
nja, jedenfalls kennt es die Ansi-Version AnsiMatchText (auch Unit StrUtils).

o0o 19. Feb 2008 12:33

Re: "If not" bei string realisieren
 
heyho marabu...

mit AnsiIndexText funkt es einwandfrei;)
was wuerde DP nur ohne dich machen...:)

naja ich denke das thema ist jetzt ausgibig behandelt worden und ich moechte mich noch mal bei allen beteidigten bedanken fuer die hilfe

da o0o


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

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