C/AL Stringvergleich

10. Oktober 2022 13:57

Leider sind meine C/AL Kenntnisse nur rudimentär.
Ich muss für einen Etikettendruck aus der Tabelle BIN (Lagerplätze) das Feld Code auswerten.

Beginnt das Feld mit einem Buchstaben drucke ich das Etikett "APL" (das ist ein frei von mir gewählter Name)
Beginnt das Feld mit einer Zahl und die 6. oder 7. Stelle ist ein A dann drucke ich das Etikette "BinL"
Beginnt das Feld mit einer Zahl und die 6. oder 7. Stelle ist kein A dann drucke ich das Etikette "BinR"

Kann man das eleganter lösen, als mein Ansatz?

Code:
txtTyp := '';

IF      COPYSTR(Bin.Code,1,1) = 'A' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'B' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'C' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'D' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'E' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'F' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'G' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'H' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'I' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'J' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'K' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'L' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'M' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'N' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'O' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'P' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'Q' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'R' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'S' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'T' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'U' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'V' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'W' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'X' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'Y' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,1,1) = 'Z' THEN  txtTyp :='APL'
ELSE IF COPYSTR(Bin.Code,6,1) = 'A' THEN  txtTyp :='BinL'
ELSE IF COPYSTR(Bin.Code,7,1) = 'A' THEN  txtTyp :='BinL'
ELSE                                      txtTyp :='BinR'

Re: C/AL Stringvergleich

10. Oktober 2022 15:20

CASE OF würde sich hier anbieten.
CASE COPYSTR(...) OF ...
https://learn.microsoft.com/en-us/dynam ... statements

Re: C/AL Stringvergleich

10. Oktober 2022 16:58

Alternativ kann man das mit dem IN Operator prüfen, bzw. zusammen mit dem CASE OF kombinieren.
Beispiele für den Einsatz:
Code:
TestText := 'E';
IF TestText IN ['A'..'Z'] THEN
  MESSAGE('E liegt zwischen A und Z')
ELSE
  MESSAGE('E liegt nicht zwischen A und Z');

IF TestText IN ['A'..'D'] THEN
  MESSAGE('E liegt zwischen A und D')
ELSE
  MESSAGE('E liegt nicht zwischen A und D');

IF TestText IN ['A','K,'Y'] THEN
  MESSAGE('E ist bei AKY mit enthalten.')
ELSE
  MESSAGE('E ist bei AKY nicht mit enthalten.');

Re: C/AL Stringvergleich

11. Oktober 2022 10:55

Danke Euch beiden.

Der IN Operator verkürzt das Ganze massiv.