# Strings Vergleichen?



## Kmann (12 Oktober 2010)

Hallo,

kann mir einer sagen, ob es eine Funktion gibt mit der man Strings vergleichen kann?

Folgendes Problem: Ich bekomme übers I-Net ein Passwort zugeschickt und will in meinem Programm prüfen, ob das pw korrekt ist.

Dazu mein code:

FOR t:= 0 TO 1 BY 1 DO
                         IF WLoginOut.AssLvl = check[t].level AND Boxpw = check[t].pw THEN    (*Level und PW korrekt*)
                                    granted:= TRUE;
                            ELSE IF WLoginOut.AssLvl = check[t].level AND (Boxpw <> check[t].pw      THEN    (*Level korrekt, aber PW falsch*)
                             ELSE IF WLoginOut.AssLvl >2 THEN    (*ungültiges Level*)
                                 granted:= FALSE;
                             END_IF
                         END_IF
                     END_IF
                 EXIT;
            END_FOR


Allerdings funktioniert diese Abfrage in der ersten if-schleife nicht. Solange die Strings die gleiche Länge haben, kriege ich immer granted:= true.


----------



## Cerberus (12 Oktober 2010)

1. Du hast in deinem ersten Elsif eine offenen Klammer, die nicht zu gemacht wird.

2. Hast du das gleiche Verhalten, wenn du statt nach deinen Check-Strings nach festen Strings (z.B. 'TestPasswort') abfrägst?


----------



## Kmann (12 Oktober 2010)

Hi,

zu 1. : die Klammer ist dort fehl am Platz.

zu 2. : auch der Test mit einem festen String funktioniert nicht, bzw.     
verläuft   genauso, wie ichs oben beschrieben habe.


----------



## Cerberus (12 Oktober 2010)

Wenn du in der Online-Ansicht bist, was zeigt er dir für Werte der einzelnen Strings an?? Sind die dort auch verschieden und er liefert dir trotzdem granted := true? Oder ist das granted vorher schon true und du meinst nur, dass er es true setzt?


----------



## Kmann (12 Oktober 2010)

Kann ich nicht genau sagen, da ich momentan nicht wirklich debuggen kann.


----------



## Cerberus (12 Oktober 2010)

Hast du die Möglichkeit dein komplettes Programm zu posten?


----------



## Kmann (12 Oktober 2010)

Sorry, aber das kann ich nicht machen. (Firma).

Habe mir allerdings nochmal Gedanken gemacht und folgende Funktion ausgedacht, mit der funktioniert der Vergleich:

input1:='test2';
input2:='test1';
IF LEN(input1) = LEN(input2) THEN
    equal:=TRUE;
    FOR i:=1 TO LEN(input1) BY 1 DO
    IF MID(input2,1,i)<> MID(input1,1,i)THEN
        equal:= FALSE;
        EXIT;
    END_IF
    END_FOR
ELSE
    equal:=FALSE;
END_IF


----------



## Bitmanipulator (12 Oktober 2010)

Naja, gewöhnlich verwendet man Funktionen wie strcmp oder memcmp.


----------



## Cerberus (12 Oktober 2010)

Brauchst du das exit unbedingt? Ansonsten würde ich es rauswerfen.


----------



## Kmann (12 Oktober 2010)

ja brauch ich, denn wenn ein buchstabe mitten im wort ungleich wäre würde die for-schleife ja trotzdem bis zum ende durchlaufen. so stoppe ich den vergleich bei dem ersten ungleichen buchstaben.


----------



## Cerberus (12 Oktober 2010)

Ich finde Exits haben immer so einen "unsauberen" Touch. Alternative wär, dass du das Ganze in ner while-Schleife handlest, die ein negatives Vergleichsergebnis als Abbruchbedingung hat.


----------



## Kmann (12 Oktober 2010)

ok, werd ich mal ausprobieren! danke!


----------



## Cerberus (12 Oktober 2010)

Noch einfacher:

Bau in deine For-Schleife einfach eine zweite Bedingung ein (letzter Vergleich true), die du mit der anderen Bedingung verundest und du kannst dir die while-Schleife sparen.

*Edit:*
*Vergiss es gleich wieder. Hab die for-Schleife aus ST gerade mit der for-Schleife aus C# verwechselt. In ST geht das natürlich nicht!*


----------



## KvT (13 Oktober 2010)

Hi,

ich bin ja neu hier und werde sicherlich gleich zerrissen, aber bei mir funktioniert folgendes ohne Probleme:

sInput1:='Hallo';
IF sInput1 = sInput2 THEN
equal:=TRUE;
ELSE
equal:=FALSE;
END_IF;

Bei sInput2='hallo' ist equal FALSE. Erst wenn es identisch - also groß - geschrieben wird, ist die Bedingung war. Also programmiere ich irgendwie auf einem anderen System???


----------

