Seite 1 von 1

C/AL Stringvergleich

Verfasst: 10. Oktober 2022 13:57
von eFuchsi
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

Verfasst: 10. Oktober 2022 15:20
von enh
CASE OF würde sich hier anbieten.
CASE COPYSTR(...) OF ...
https://learn.microsoft.com/en-us/dynam ... statements

Re: C/AL Stringvergleich

Verfasst: 10. Oktober 2022 16:58
von Kowa
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

Verfasst: 11. Oktober 2022 10:55
von eFuchsi
Danke Euch beiden.

Der IN Operator verkürzt das Ganze massiv.