MainframeSupports
tip uge 15/2002:

TRANSLATE funktionerne i REXX og PL/1 har den egenskab, at de virker på samme måde og har de samme parametre i samme rækkefølge. Det er en sjældent set egenskab ved en så stærk funktion som TRANSLATE. Mange af jer vil være bekendt med TRANSLATE, og dette tip vil udelukkende dyrke en smart detalje, som TRANSLATE kan anvendes til, og som nogen af jer sandsynligvis er bekendt med.

TRANSLATE tager tre parametre. Den første parameter er den streng, man ønsker at foretage TRANSLATE af. Den anden parameter angiver, hvad der skal laves TRANSLATE til. Den tredie og sidste parameter angiver, hvad der skal laves TRANSLATE fra. Et eksempel:

SAY 'REXX --> 'TRANSLATE('bølGe', 'BLE', 'ble')
REXX --> BøLGE
DISPLAY('PL/1 --> ' !! TRANSLATE('bølGe', 'BLE', 'ble'))
PL/1 --> BøLGE

b, l og e i første parameter bliver konverteret til B, L og E og øvrige tegn pilles der ikke ved. Sådan bruges TRANSLATE traditionelt og det er også denne virkemåde, der er beskrevet i manualerne. Men hvad hvis nu man gør sådan her:

SAY 'REXX --> 'TRANSLATE('gh/ef-abcd', '2002-05-11', 'abcd-ef-gh')
REXX --> 11/05-2002
DISPLAY('PL/1 --> ' !! TRANSLATE('gh/ef-abcd', '2002-05-11', 'abcd-ef-gh'))
PL/1 --> 11/05-2002

Hvad var det nu lige, der skete her. Faktisk præcis det samme som i forrige eksempel, men effekten var en helt anden. Hvis vi lader anden parameter være en dato på DB2-format, så kan vi med en enkelt TRANSLATE formattere den om til et helt andet format.

Når først man har forstået dette lille trick, så er anvendelsesmulighederne ret store. Hvad med eksempelvis at bytte rundt på rækkefølgen af en tegnstreng:

SAY 'REXX --> 'TRANSLATE('abcdefghi', 'regninger', 'ihgfedcba')
REXX --> regninger
DISPLAY('PL/1 --> ' !! TRANSLATE('abcdefghi', 'regninger', 'ihgfedcba'))
PL/1 --> regninger

Hov, hvad pokker gik der galt. Nå nej, den er jo god nok. Ja, og så kan man også ...

Forrige danske tip        Last tip in english        Tip oversigten