CASE Fallunterscheidung mit String Abfrage

Paddi299

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich wollte heute eine CASE Fallunterscheidung mit STRING Abfrage durchführen.
Mit "Wert" als INT formuliert hatte das bisher gut geklappt
CASE Wert(= INT) OF
1:
xxx();
2:
yyy();
ELSE:
zzz();
END_CASE;

so hatte ich mir das nun vorgestellt

CASE Wert(= STRING) OF
'A':
xxx()
'B':
yyy();
ELSE:
zzz();
END_CASE

ist das möglich? Wenn ja, wie muss ich den Code berichtigen,
 

Anhänge

  • 123.JPG
    123.JPG
    121,4 KB · Aufrufe: 24
Zuviel Werbung?
-> Hier kostenlos registrieren
so hatte ich mir das nun vorgestellt

CASE Wert(= STRING) OF
'A':
xxx()
'B':
yyy();
ELSE:
zzz();
END_CASE

ist das möglich? Wenn ja, wie muss ich den Code berichtigen,
Ist der Inhalt Deines Strings immer nur 1 oder höchstens 2 Zeichen ('A' oder 'B' oder 'C1' ...)?
Dann könntest Du das CASE über den ASCII-Code des ersten (oder der ersten beiden) Zeichen des Strings machen, etwa so:
CASE CHAR_TO_INT(MyString[1]) OF ...
Falls MyString[1] in Codesys nicht geht, dann mit LEFT() oder MID() oder mit einem Pointer das erste oder irgendein Zeichen aus dem String holen und konvertieren --> CHAR --> INT

Wenn Dein STRING immer nur 1 Zeichen hat, warum dann als STRING deklariert? Dann ist es ja eigentlich nur ein CHAR und den CHAR kann man vermutlich easy in INT konvertieren.

Harald
 
Man könnte mit der Funktion FIND aus Strings etwas numerisches "machen" und die CASE-Selektion dann mit INT ausführen.
Hast Du mal ein Beispiel für die verschiedenen Strings, auf die die CASE-Selektion reagieren soll?

Nachtrag:
Ein VBA-Beispiel für die "Zahlifizierung":
Code:
xVergleichsString$ = " Fall_1 Fall_B Oder_3 Oder_anders Oder_so "
xSuchString$ = "Fall_B"

xPos& = InStr(xVergleichsString$, " " & xSuchString$ & " ")
xPos& liefert die Position des Leerzeichens vor dem in xVergleichsString$ gefundenen xSuchString$ und 0, wenn der Begriff in der "Liste" nicht enthalten ist.
Wichtig:
- die Begriffe in der Liste und in xSuchString$ dürfen kein Leerzeichen enthalten
- die Begriffe in der Liste werden durch 1 Leerzeichen getrennt
- die Liste beginnt und endet mit 1 Leerzeichen
Das bewirkt, dass nur ein Begriff mit exakter Übereinstimmung in der Liste gefunden wird.
Und es bewirkt, dass ein LeerString nicht in der Liste gefunden wird.

Will man sich den Luxus gönnen und nicht die Position als Ergebnis erhalten, sondern eine 1 für den ersten Begriff in der Liste, eine 2 für den zweiten Begriff in der Liste u.s.w., dann zählt man in der Liste die Leerzeichen bis zur Position xPos&.
In VBA geht das relativ bequem mit
Code:
xIdx& = xPos& - Len(Replace$(Left$(xVergleichsString$, xPos&), " ", ""))
da das VBA-Replace selbständig nach allen zu ersetzenden Zeichen sucht und man nicht die Position[en] der Zeichen mühsam "erarbeiten" muss.
In SCL oder ST ist wahrscheinlich das Zählen in einer Schleife der einfachere Weg.
 
Zuletzt bearbeitet:
Zurück
Oben