wie function string vergleich, was ist das ergebnis
Moderator: Moderatoren
wie function string vergleich, was ist das ergebnis
Hi,
ich habe folgende function gefunden und frage mich wieso wird das mit 11 0 verglichen. was ist das Ergebnis?
if upper(substr(var,95,10))="00000000000"
var_neu=" "
endif
kann mir jemand helfen?
ich habe folgende function gefunden und frage mich wieso wird das mit 11 0 verglichen. was ist das Ergebnis?
if upper(substr(var,95,10))="00000000000"
var_neu=" "
endif
kann mir jemand helfen?
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Öhm... Es wird kontrolliert, ob die 10 Zeichen ab dem 95. Zeichen im String "var" = "0000000000" ist. Wenn ja, dann wird die Varibale var_neu mit einem Leerzeichen belegt. Was aber nie funktionieren kann. Denn der abgefragte Teilstring ist nur 10 Zeichen lang, der Vergleichsstring aber 11. Das kann niemals wahr sein.
War das die Frage, oder habe ich das mißverstanden?
Jan
War das die Frage, oder habe ich das mißverstanden?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Wenn die zehn (!) Stellen von "var" ab Position 95 elf (!) Nullen sind, was niemals der Fall sein kann, wird "var_neu" geleert. Sieht nach Bullshitcode aus.
Herzlich,
Tom
Tom
Re: wie function string vergleich, was ist das ergebnis
okay, das ist auch meine vermutung. kann das upper da einen einfluss haben?
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Was ist denn ein Upper("0")? Immer noch 0. Im Prinzip ist das zumindest hierfür vollkommen belanglos.
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Tom, Du bist manchmal so herrlich direktTom hat geschrieben:Sieht nach Bullshitcode aus.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Vielleicht hat es ja Sinn, aber der Sinn ist nie ausprobiert worden, weshalb der Tippfehler mit der elften Null nie bemerkt wurde. Eleganter wäre übrigens das hier:
Immerhin würde das dann irgendwann feuern. Fragt sich, warum "var_neu" geleert werden soll, wenn "var" diese x Nullen enthält.
Code: Alles auswählen
IF SubStr(var,95,10) = Replicate("0",10)
Herzlich,
Tom
Tom
- Muecke
- 1000 working lines a day
- Beiträge: 623
- Registriert: Di, 24. Okt 2006 7:19
- Wohnort: Samstagern CH
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 9 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
kann es nicht sein das
var= absUBN..... 100000000000
Vielleicht darum Upper und den String vergleichen !
Gruss Thomas
var= absUBN..... 100000000000
Vielleicht darum Upper und den String vergleichen !
Gruss Thomas
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
@Thomas: Wenn ich dann ausschließlich mit Ziffern vergleiche, spielt das Upper() keine Rolle. "asx000..." und "ASX000..." entsprechen sich in dieser Hinsicht.
Herzlich,
Tom
Tom
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
@Jan:
Anyway, wahrscheinlich hat diese Funktion/Abfrage einen Sinn, aber der Tippfehler (elfte Null) ist nie bemerkt worden. Jetzt gilt es, danach zu forschen, warum "var_neu" geleert werden muss, wenn ab Stelle zwölftausendlangsam in "var" zehn Nullen enthalten sind. Viel Spaß dabei!
Manchmal?Tom, Du bist manchmal so herrlich direkt
Anyway, wahrscheinlich hat diese Funktion/Abfrage einen Sinn, aber der Tippfehler (elfte Null) ist nie bemerkt worden. Jetzt gilt es, danach zu forschen, warum "var_neu" geleert werden muss, wenn ab Stelle zwölftausendlangsam in "var" zehn Nullen enthalten sind. Viel Spaß dabei!
Herzlich,
Tom
Tom
Re: wie function string vergleich, was ist das ergebnis
Vielen Dank!
Es gibt 1 Erklärung: Die Abfrage hatte mal einen Sinn, aber mit einem anderen string als den 11 Nullen. Und um sie zu deaktivieren udn zu parken, hat man 11 Nullen darein geschrieben.
Trotzdem Euch vielen Dank!
Es gibt 1 Erklärung: Die Abfrage hatte mal einen Sinn, aber mit einem anderen string als den 11 Nullen. Und um sie zu deaktivieren udn zu parken, hat man 11 Nullen darein geschrieben.
Trotzdem Euch vielen Dank!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Hey, Profis am Werk! Falls Du noch einmal mit "man" sprichst, sag ihm, dass es eine fantastische Möglichkeit gibt, die sich "Kommentar" nennt.Und um sie zu deaktivieren udn zu parken, hat man 11 Nullen darein geschrieben.
Herzlich,
Tom
Tom
Re: wie function string vergleich, was ist das ergebnis
Das ist nur meine Vermutung. Ich kann niemanden mehr fragen.Tom hat geschrieben:Hey, Profis am Werk! Falls Du noch einmal mit "man" sprichst, sag ihm, dass es eine fantastische Möglichkeit gibt, die sich "Kommentar" nennt.Und um sie zu deaktivieren udn zu parken, hat man 11 Nullen darein geschrieben.
- Manfred
- Foren-Administrator
- Beiträge: 21219
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: wie function string vergleich, was ist das ergebnis
Hat es Dir die Sprache verschlagen?stefu hat geschrieben: Das ist nur meine Vermutung. Ich kann niemanden mehr fragen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Also, laut Dokumentation wird bei bis zur Länge der linken Zeichenkette verglichen. In diesem Fall könnte also trotzdem TRUE herauskommen, oder
Code: Alles auswählen
SET EXACT ON
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15701
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Hallo Uli,
nein ...
wenn exact off ist, darf rechts ein kürzerer String stehen als links.
bei exact on müssen beide gleich lang sein.
wenn links länger ist als rechts, wird es immer false geben.
PS: dein Hinweis auf die Doku hat mich jetzt etwas unsicher gemacht, daher habe ich es nochmal nachgesehen:
aber es ging oben nicht um Blanks.
Ich habe bisher immer == genutzt und nach dem Hinweis ist das auch wirklich sinnvoll
nein ...
wenn exact off ist, darf rechts ein kürzerer String stehen als links.
bei exact on müssen beide gleich lang sein.
wenn links länger ist als rechts, wird es immer false geben.
PS: dein Hinweis auf die Doku hat mich jetzt etwas unsicher gemacht, daher habe ich es nochmal nachgesehen:
das mit den Leerzeichen (Blanks) am Ende erscheint mir seltsam, besonders nach dem Beispiel unter exact off ...Wenn SET EXACT auf ON gesetzt ist, liefert der Vergleich zweier Zeichenketten durch die Vergleichsoperatoren (=, >, <, => und =<) dann den Wert .T. (wahr), wenn deren Zeichen mit Ausnahme endständiger Leerzeichen übereinstimmen.
aber es ging oben nicht um Blanks.
Ich habe bisher immer == genutzt und nach dem Hinweis ist das auch wirklich sinnvoll
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Hallo, Hubert.
You're wrong. Das hier steht in der Doku zum Vergleichsoperator "=" bei Zeichenketten:
Bei SET EXACT OFF erfolgt der Zeichenvergleich bis zur Länge der rechten Zeichenkette <Expression2> . Wenn SET EXACT ON gesetzt ist, erfolgt der Vergleich bis zur Länge der linken Zeichenkette.
Mit EXACT ON würde die oben gezeigte Abfrage also tatsächlich feuern. Uli hat recht.
Edit: Besonders bei Vergleichsoperationen mit Zeichenketten ist also, wenn man exakte Ergebnisse benötigt, dringend angeraten, mit "==" zu arbeiten!
You're wrong. Das hier steht in der Doku zum Vergleichsoperator "=" bei Zeichenketten:
Bei SET EXACT OFF erfolgt der Zeichenvergleich bis zur Länge der rechten Zeichenkette <Expression2> . Wenn SET EXACT ON gesetzt ist, erfolgt der Vergleich bis zur Länge der linken Zeichenkette.
Mit EXACT ON würde die oben gezeigte Abfrage also tatsächlich feuern. Uli hat recht.
Edit: Besonders bei Vergleichsoperationen mit Zeichenketten ist also, wenn man exakte Ergebnisse benötigt, dringend angeraten, mit "==" zu arbeiten!
Zuletzt geändert von Tom am Mi, 22. Aug 2012 18:09, insgesamt 1-mal geändert.
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15701
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Ich habe dort auch nachgesehen aber den Text kann ich in der SL1 nicht finden, habt ihr die Hilfe von 1.90.331 ?
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Nein, das ist durchaus aus der Hilfe zu SL1, Thema "= (Vergleichsoperator)".
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15701
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
da steht das Gleiche, wo seht ihr nach (ich im index nach SET EXACT) ...
Code: Alles auswählen
Syntax
SET EXACT on | OFF | <lToggle>
Gültigkeit: Thread-lokal
Parameter
<lToggle>
<lToggle> ist ein logischer Ausdruck, der in ()-Klammern stehen muß. Anstelle des logischen Ausdrucks kann die Option ON für den Wert .T. (wahr) oder OFF für den Wert .F. (falsch) angegeben werden. Wenn .T. oder ON angegeben ist, erfolgt der Vergleich zweier Zeichenketten unter Berücksichtigung der Länge beider Zeichenketten.
Beschreibung
Der Befehl SET EXACT existiert aus Gründen der Kompatibilität und sollte nicht mehr verwendet werden. Der Befehl SET LEXICAL eignet sich wesentlich besser, wenn ein ungefährer Vergleich bei zwei Zeichenketten durchgeführt werden soll.
SET EXACT definiert die Regeln für den ungefähren Vergleich zweier Zeichenketten durch die Vergleichsoperatoren (=, >, <, => und =<). Wenn SET EXACT auf OFF gesetzt ist, wird der Ausdruck cLeftString = cRightString nach folgenden Regeln ausgewertet:
Wenn cRightString ein Null-Zeichen ("") enthält, liefert der Ausdruck den Wert .T. (wahr).
Wenn cRightString mehr Zeichen enthält als cLeftString , liefert der Ausdruck den Wert .F. (falsch).
In allen anderen Fällen liefert der Ausdruck den Wert .T. (wahr), falls die Zeichen in cRightString mit den Zeichen in cLeftString übereinstimmen, sonst .F. (falsch).
Wenn SET EXACT auf ON gesetzt ist, liefert der Vergleich zweier Zeichenketten durch die Vergleichsoperatoren (=, >, <, => und =<) dann den Wert .T. (wahr), wenn deren Zeichen mit Ausnahme endständiger Leerzeichen übereinstimmen.
Der exakte Gleichheitsoperator == berücksichtigt auch die endständigen Leerzeichen bei einem Zeichenkettenvergleich.
Die Einstellung SET LEXICAL ON hat Vorrang vor der Einstellung SET EXACT ON. Falls lexikalische Vergleichsregeln mit SetLexRule() definiert sind, werden sie erst gemäß diesen Regeln umgeformt, bevor ein Vergleich in Abhängigkeit von SET EXACT erfolgt.
Beispiel
// SET EXACT Beispiel
// Das Beispiel zeigt die Wirkung von SET EXACT bei dem Vergleich
// von Zeichenketten durch den einfachen Gleichheitsoperator.
PROCEDURE Main
SET EXACT OFF
? "Abc" = "Abcde" // Ergebnis: .F.
? "Abcde" = "Abc" // Ergebnis: .T.
? "Abc" = "" // Ergebnis: .T.
? "" = "Abc" // Ergebnis: .F.
? "Abc" = "Abc " // Ergebnis: .F.
SET EXACT ON
? "Abc" = "Abcde" // Ergebnis: .F.
? "Abcde" = "Abc" // Ergebnis: .F.
? "Abc" = "" // Ergebnis: .F.
? "" = "Abc" // Ergebnis: .F.
? "Abc" = "Abc " // Ergebnis: .T.
// Exakter Gleichheitsoperator
? "Abc" == "Abc " // Ergebnis: .F.
RETURN
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15701
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
ja dort steht das, nun wie geschrieben, ich nutze das nie.
Die Erklärung in der Hilfe läßt Spielraum für Spekulationen, hilft nur ausprobieren.
Ich bin im Urlaub, das dürft ihr erledigen
Die Erklärung in der Hilfe läßt Spielraum für Spekulationen, hilft nur ausprobieren.
Ich bin im Urlaub, das dürft ihr erledigen
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15701
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 69 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
Hi,
so nach dem Essen hatte ich doch noch Lust ...
und die Moral von der Geschicht, glaube der Hilfe nicht (immer)
so nach dem Essen hatte ich doch noch Lust ...
Code: Alles auswählen
proc main
local cT1, cT2
cls
cT1 := replicate("0",10)
cT2 := replicate("0",11)
? cT1, "len()=",len(cT1)
? cT1, "len()=",len(cT2)
set exact off
? "OFF: cT1=cT2 ",cT1=cT2
? "OFF: cT2=cT1 ",cT2=cT1
set exact on
? "ON: cT1=cT2 ",cT1=cT2
? "ON: cT2=cT1 ",cT2=cT1
wait
return
ERGEBNIS:
0000000000 len()= 10
0000000000 len()= 11
OFF: cT1=cT2 N
OFF: cT2=cT1 J
ON: cT1=cT2 N
ON: cT2=cT1 N
Press any key to continue...
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9388
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: wie function string vergleich, was ist das ergebnis
@Hubert: Ja, ich hatte spaßenshalber auch rumprobiert. Die Doku ist hier nicht eindeutig - die Aussagen im Hinblick auf die Länge sind zwar prinzipiell richtig, aber es fehlt die Klarstellung, dass es bei etwaigen Längenunterschieden rechts vs. links lediglich um nachfolgende Leerzeichen geht.
Herzlich,
Tom
Tom