Exakte Nicht-Übereinstimmung

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14662
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Exakte Nicht-Übereinstimmung

Beitrag von Jan »

Gerade bin ich auf ein (für mich) interessantes Phänomen gestoßen. Ich vergleiche 2 Zeichenketten. Die eine lautet 3.8.351, die andere 3.8.35. Als Character jeweils natürlich. Wenn ich jetzt Frage

Code: Alles auswählen

If AllTrim(cErsteZeichenfolge) <> Alltrim(cZweiteZeichenfolge)
, überspringt der den Schleifeninhalt einfach, als ob die beiden Zeichenfolgen gleich seien. Nur wenn ich SET EXACT ON einstelle, dann macht der das. Nun gibt es ja bei den Vergleichsoeratoren auch den Unterschied zwischen = und ==. Kann man sowas auch bei <> haben? Oder habe ich da nur ein gedankliches Problem?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Exakte Nicht-Übereinstimmung

Beitrag von Martin Altmann »

Hallo Jan,
  • entweder tauscht Du die Seiten der beiden Ausdrücke (so dass die längere auf der linken Seite steht)
  • oder Du nutzt statt <> die Operatoren !=
  • oder Du nutzt statt == das Konstrukt .NOT ( A == B )
  • ...
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14662
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Exakte Nicht-Übereinstimmung

Beitrag von Jan »

Martin,

Du meinst, der längere der beiden Ausdrücke muß immer links stehen für eine exakte Überprüfung? Und != ist etwas anderes als <>?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Exakte Nicht-Übereinstimmung

Beitrag von Martin Altmann »

Hallo Jan,
nagel mich jetzt nicht darauf fest, ob der längere links oder rechts - das müsste ich ausprobieren.
Jedenfalls genaus andersrum, als bei Dir :D
Und ja, != ist was anderes als <> - ersteres entspricht nämlich == in der Hinsicht, dass SET EXACT ON für den Vergleich gilt (genau so wie bei .NOT. (A==B) )

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Exakte Nicht-Übereinstimmung

Beitrag von brandelh »

Hi,
Martin Altmann hat geschrieben:nagel mich jetzt nicht darauf fest, ob der längere links oder rechts - das müsste ich ausprobieren.
der RECHTE darf kürzer sein, daher gibt auch jeder Vergleich mit cVarEgal = "" immer .t.
Martin Altmann hat geschrieben:Und ja, != ist was anderes als <> - ersteres entspricht nämlich == in der Hinsicht, dass SET EXACT ON für den Vergleich gilt (genau so wie bei .NOT. (A==B) )
das habe ich gerade ausprobiert und auch im Handbuch nachgesehen.

<>, != und # verhalten sich genau gleich !

Alle drei sind von set exact abhängig. Um ! == zu vergleichen muss man :

! cVarLang == cVarKurz schreiben.
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Exakte Nicht-Übereinstimmung

Beitrag von Rolf Ramacher »

HI Jan,

du kannst doch auch die mit Len() die Länge der beiden Variablen abfragen. Oder eine andere alternative wäre
die "." bzw. Sonderzeichen zu entfernen und mit Val() abfragen.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Exakte Nicht-Übereinstimmung

Beitrag von Martin Altmann »

Hallo Hubert,
danke für die Klarstellung :!: Ich hatte aus der Erinnerung heraus gedacht, dass != und .NOT. ( A == B ) identisch sind...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Exakte Nicht-Übereinstimmung

Beitrag von brandelh »

Hallo Martin,

so ging es mir vor einiger Zeit als ich fest glaubte "abc" # "ab" ergäbe .t. :wink:

Damals hatte ich das sogar noch unter Clipper geprüft und musste einsehen, dass es nicht so ist. :D
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Re: Exakte Nicht-Übereinstimmung

Beitrag von brandelh »

Hallo Jan,

so wird es funktionieren:

Code: Alles auswählen

If ! AllTrim(cErsteZeichenfolge) == Alltrim(cZweiteZeichenfolge)
oder ausgeschrieben ...

Code: Alles auswählen

If .not. AllTrim(cErsteZeichenfolge) == Alltrim(cZweiteZeichenfolge)
Achtung, bei mehreren Bedingungen, am Besten Klammern setzen, .not. .or. .and. arbeiten nicht immer so wie man es erwartet ;-)

Code: Alles auswählen

If .NOT. (AllTrim(cErsteZeichenfolge) == Alltrim(cZweiteZeichenfolge))
hier kann nix mehr schiefgehen.
Gruß
Hubert
Antworten