![]() |
Überprüfen, ob drei Vergleiche gleich sind
Hallo ihr,
wie kann ich einfach überprüfen, ob in drei Strings kein Leerstring oder ein Leerstring steht? Also wenn ich drei Strings (S1, S2, S3) habe soll folgendes bei dem Vergleich herauskommen:
Ich möchte aber dabei das möglichst einfach halten, also ohne doppelte Zugriffe. MfG xZise |
Re: Überprüfen, ob drei Vergleiche gleich sind
Kännen Leerzeichen in den Strings vorkommen?
|
Re: Überprüfen, ob drei Vergleiche gleich sind
hmmmm?
Delphi-Quellcode:
kann grad nicht so überlegen :oops:
if (S1 = '') xor (S2 = '') xor (S3 = '') then
// oder if ((S1 = '') xor (S2 = '')) xor ((S1 = '') xor (S3 = '')) then ansonsten der einfache Weg ... so wie du es ja schon definiert hast :angel2:
Delphi-Quellcode:
if ((S1 = '') and (S2 = '') and (S3 = '')) or (S1 <> '') and (S2 <> '') and (S3 <> '') then
|
Re: Überprüfen, ob drei Vergleiche gleich sind
Delphi-Quellcode:
Function XZiseSeinVergleich (const S1,S2,S3 : String) : Boolean;
Var b : Boolean; Begin b := (S2 = ''); Result := ((S1 = '') = b) And (b = (S3 = '')) End; |
Re: Überprüfen, ob drei Vergleiche gleich sind
Hmmm, weiß ich nicht, also du willst wissen, ob Trim(SX) = '' wie SX = '' zu behandeln ist?
Nun ich weiß nicht wie ich das behandeln muss, aber auf was zielt die Frage ab? Wie wäre die Antwort wenn es erlaubt ist, und wie wenn es nicht erlaubt ist? Also ich möchte damit testen, ob es sich um eine gültige Exceltabelle handelt. Und wahrscheinlich sind Leerzeichenfelder ein Fehlerkriterium (also wie False). Zitat:
Und der zweite Vergleich greift zweimal auf eine Variable zu und der dritte (so ist es gerade implementiert), greift auf jede zweimal zu und ich so ist es gerade bei mir, aber ich habe die Befürchtung, dass der doppelte Zugriff in die Zeit geht. (Kann es leider auch nicht testen, da ich hier kein Excel habe :D ) Zitat:
MfG xZise |
Re: Überprüfen, ob drei Vergleiche gleich sind
den "doppelten Zugriff hab ich mal ignoriert, da Delphi ja sowas braus machen
Delphi-Quellcode:
also so Schlimm ist dann ein Vergleich via = oder <> garnicht :angel:
if S = '' then if S <> '' then
if Pointer(S) = nil then if Pointer(S) <> nil then if not LongBool(S) then if LongBool(S) then |
Re: Überprüfen, ob drei Vergleiche gleich sind
Da ja bereits simple Lösungen vorgeschlagen wurden:
Delphi-Quellcode:
Da True einen Ordinalwert von 1 hat, kommt entweder 3 raus (alle string leer => Alle Vergleiche liefern True) oder 0 (Alle String befüllt => Alle Vergleiche False=0)
if (((S1 = '') + (S2 = '') + (S3 = '')) mod 3) = 0 then
Das dann modulo 3 und du hast deinen Vergleich :mrgreen: Evtl. sind noch casts notwendig, aber die Idee sollte deutlich werden :P |
Re: Überprüfen, ob drei Vergleiche gleich sind
Zitat:
Außerdem hab ich das wirklich ehrlich unabhängig von himitsu ganz alleine hinbekommen. Und auußerdem bin ich in der Türkei, hier ist eine Stunde später, also hab ich das ja wohl eine Stunde früher gepostet und es ist wegen der Zeitverschiebung erst jetzt angekommen :freak: :wall: |
Re: Überprüfen, ob drei Vergleiche gleich sind
OOps, das sollte nicht so rüber kommen, als würdest du Code "stehlen", sondern mir ging es nur darum, da himitsus erste Variante ja geht, auch deine Variante geht :mrgreen:
Zitat:
Aber ich glaube so geht das dann auch, wenn True != 1 ist:
Delphi-Quellcode:
MfG
if (((S1 = '') + (S2 = '') + (S3 = '')) mod (3*True)) = 0 then
xZise |
Re: Überprüfen, ob drei Vergleiche gleich sind
da muß man aufpassen
True (die Konstante): BOOL (c) = LongBool (delphi) = -1 = $FFFFFFFF WordBool (delphi) = -1 = $FFFF bool (c) = ByteBool (delphi): -1 = $FF Boolean (Delphi): 1 = $01 True (bei booleanischen Vergleichen): alles: b<>0 True (bei binärischen Vergleichen): alles: b=Wert darum ist auch b=True so fartal, da dort wirklich geprüft wird, ob b genau dem True entspricht False (die Konstante und bei Vergleichen): alles: b=0 |
Re: Überprüfen, ob drei Vergleiche gleich sind
Um es schön in einer Zeiler zu halten, mit dem Wissen, dass Boolean = equivalent XNOR:
Delphi-Quellcode:
not ((not ((S1 = '') xor (S2 = ''))) xor (S3 = ''))
|
Re: Überprüfen, ob drei Vergleiche gleich sind
1. Später weiß bei sowas doch keiner mehr was der Programmierer da eigentlich wollte. (Dazu müsste man das bissl schon kommentieren)
2. Seh ich das richtig, das es falsch ist? Wenn man alle 3 Strings voll übergibt, ergibt das xor ture wird negiert und false kommt raus. Hier, eine funktionierende Variante mit nur einen Zugriff auf die Variablen:
Delphi-Quellcode:
function XZiseSeinVergleich(const S1, S2, S3: string): Boolean;
begin if Str1='' then begin if Str2='' then result := Str3='' else Result := false end else begin if Str2<>'' then result := Str3<>'' else Result := false end; end; |
Re: Überprüfen, ob drei Vergleiche gleich sind
Hm, du hast Recht. Beim schreiben hatte ich nicht beacht, dass xor nicht so einfach auf n Operanden erweiterbar ist :) Letztlich kommt es wohl immer aufs selbe raus: in Delphi geht das nur mit mehreren Zugriffen, oder nur mit mehreren Zeilen.
|
Re: Überprüfen, ob drei Vergleiche gleich sind
i hab's jetzt
Delphi-Quellcode:
if not (((S1 = '') xor (S2 = '')) or ((S1 = '') xor (S3 = ''))) then
// oder if not (((S1 <> '') xor (S2 <> '')) or ((S1 <> '') xor (S3 <> ''))) then |
Re: Überprüfen, ob drei Vergleiche gleich sind
Zitat:
Zitat:
Zitat:
Zitat:
Und es hört sich so schön an:
Delphi-Quellcode:
Nun da ich eh die Werte zwischenspeichern "muss", werde ich himitsus letzte Variante nehmen.
Result := ((S1 = '') = (S2 = '') = (S3 = ''))
MfG xZise |
Re: Überprüfen, ob drei Vergleiche gleich sind
Zitat:
|
Re: Überprüfen, ob drei Vergleiche gleich sind
Aus der Tabelle aber nicht mehr. (Imho)
MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 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