Strings Vergleichen?

Kmann

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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?
 
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
 
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.
 
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.
 
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!
 
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???
 
Zurück
Oben