![]() |
Ü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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 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