Heute ist ein Tag... [erledigt - ich auch]

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Heute ist ein Tag... [erledigt - ich auch]

Beitrag von Herbert »

...mit doofen Problemen

Code: Alles auswählen

//Test 1
      IF UPPER(aPWert[i])<>UPPER(TRIM(anPWert[i]))
        lchg := .T.
        EXIT
      ENDIF
// Test2
      IF !EMPTY(aPWert[i]) .AND. EMPTY(anPWert[i])
        lchg := .T.
        EXIT
      ENDIF
aPWert[12]="TEST"
anPWert[12]=""
--> Bei Test1 wird die IF-Schlaufe nicht als wahr anfgesehen, lchg ist weiterhin .F.
Warum ist Test 1 in diesem Fall nicht wahr?
Test 2 ist wahr und ok.
Hilfe! Was ist der Grund??
Zuletzt geändert von Herbert am Mo, 09. Aug 2010 23:52, insgesamt 1-mal geändert.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Heute ist ein Tag...

Beitrag von Herbert »

um das Ganze noch verwirrlicher zu machen:
Ist die erste Variable leer, dann ist Test 1 ok... #-o

Code: Alles auswählen

aPWert[12]=""
anPWert[12]="TEST"
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Heute ist ein Tag...

Beitrag von Tom »

SET EXACT ON. :wink:

Oder versuch's hiermit:

Code: Alles auswählen

IF !UPPER(aPWert[i])==UPPER(TRIM(anPWert[i]))
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Heute ist ein Tag...

Beitrag von Martin Altmann »

Moin,
ganz einfach:
<> ist nicht gleichbedeutend mit .NOT. ... == ... :!:
Ist also eine Frage, wie Deine SET EXACT-Einstellungen lauten!
Sind die ON, dann wären beide äquivalent und Deine Abfrage würde funzen. Also wird SET EXACT OFF eingestellt sein.
Wenn Du wirklich sicher gehen willst, musst Du so testen:

Code: Alles auswählen

IF .NOT. ( UPPER( aPWert[ i ] ) == UPPER( TRIM( anPWert[ i ] ) ) )
        lchg := .T.
        EXIT
ENDIF
Steht auch so in der Hilfe beschrieben.

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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Heute ist ein Tag...

Beitrag von Martin Altmann »

:sleepy2: Tom war schneller - ich gehe ins Bett - hat keinen Sinn mehr. 8)

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
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Heute ist ein Tag...

Beitrag von Herbert »

Also: ein leerer String wird mit EXACT OFF nicht positiv verglichen? Versteh ich nicht.

Hmm
! (UPPER(bla1)=UPPER(bla2))

soll nicht gleich <> sein.... so was

Warum gehts dann, wenn in meinem Beispiel die Variable links stehend leer ist und die rechts nicht?
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Heute ist ein Tag...

Beitrag von Tom »

Hallo, Herbert.

Schau einfach mal in die Doku zu "SET EXACT". Da steht u.a. (verglichen werden cLeftString und cRightString):

Wenn cRightString ein Null-Zeichen ("") enthält, liefert der Ausdruck den Wert .T. (wahr).
Herzlich,
Tom
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Heute ist ein Tag...

Beitrag von Herbert »

RTFM

Trotzdem krass widersprüchlich...

Danke, danke

Habs geändert und es klappt so.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Heute ist ein Tag...

Beitrag von Martin Altmann »

Steht in der Hilfe beschrieben:
Bei SET EXACT ON wird bis zur Länge der linken Zeichenkette verglichen und bei SET EXACT OFF wird bis zur Länge der rechten Zeichenkette verglichen.
Wenn die betreffende Zeichenkette leer ist, werden keine Zeichen verglichen (da ja nix zu vergleichen ist) und es wird .F. zurück gegeben.
So interpretiere ich die Hilfe - und dann würde auch SET EXACT ON nichts an dem falschen Ergebnis ändern, wenn die Inhalte der beiden Variablen (oder deren Reihenfolge beim Vergleich) ebenfalls vertauscht wären:

Code: Alles auswählen

SET EXACT OFF
IF UPPER(aPWert[i])<>UPPER(TRIM(anPWert[i]))
        lchg := .T.
        EXIT
ENDIF
SET EXACT ON
IF UPPER(anPWert[i])<>UPPER(TRIM(aPWert[i]))
        lchg := .T.
        EXIT
ENDIF
Müsste also beides "falsch" sein (von der Logik her) - kannst Du ja mal ausprobieren!
Sobald Du jedoch .NOT. ... == ... nutzt, bist Du aus dem Schneider.

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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Heute ist ein Tag... [erledigt - ich auch]

Beitrag von Martin Altmann »

Da ich gerade Toms Hinweis zu der Hilfe zu SET EXACT gelesen habe:
Ich habe die Hilfe von dem Thema "<> != #Operator" genutzt - und da kann man das durchaus so interpretieren, wie ich das oben wiedergegeben habe.
Einfach mal ausprobieren - ich hau mich jetzt hin.

Nacht,
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
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Heute ist ein Tag... [erledigt - ich auch]

Beitrag von Herbert »

Nun, es ist wie Tom geschrieben hat

- Wenn rechts ein Leerstring steht, wird der Test nicht aktzeptiert (also kein Vergleich)
- Wenn links ein leerer String steht, und rechts nicht, wird getestet

Mit !... == klappts immer.

Tja, hau mich auch hin, danke!
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Heute ist ein Tag... [erledigt - ich auch]

Beitrag von Jan »

Moin Herbert Leidensgenosse,

mit genau dem gleichen Problem habe ich mich auch schon rumgeschlagen. Ich dachte auch immer, <> wäre das gleiche wie .NOT. ==. Hat mich schier zur Verzweiflung getrieben.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten