Gestion des chaînes de caractères

Toutes les fonctions fonctionnant avec la position des caractères commencent par l’index 1 en tant que premier caractère (et non 0, ce qui est courant dans de nombreuses languages).

STRING – convertit toute valeur en chaîne

Cet exemple convertit le nombre entier 2000 en chaîne “2000”.

DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE c AS CHARACTER NO-UNDO.
i = 2000.
c = STRING(i).
DISPLAY c.

CHR (entier) : Renvoie la représentation des caractères pour un entier de code ascii

ASC (caractère) : Renvoie la valeur entière ascii du caractère

DEFINE VARIABLE ix AS INTEGER NO-UNDO.
DEFINE VARIABLE letter AS CHARACTER NO-UNDO FORMAT "X(1)" EXTENT 26.
DO ix = 1 TO 26:
letter[ix] = CHR((ASC("A")) - 1 + ix).
END.
DISPLAY SKIP(1) letter WITH 2 COLUMNS NO-LABELS TITLE "T H E A L P H A B E T".

LONGUEUR – renvoie la longueur d’une chaîne :

DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "HELLO".
MESSAGE "The string " cString " is " LENGTH(cString) " characters long" VIEW-AS ALERT-BOX.

SUBSTRING – retourne ou assigne une partie d’une chaîne

  • SUBSTRING (chaîne, position de départ, longueur).

Renvoie les caractères “length” à partir de “string” à partir de la position “start-position”.

  • SUBSTRING (chaîne, position de départ).

Renvoie le reste de “string”, en commençant à la position “start-position”

DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "ABCDEFGH".
DISPLAY SUBSTRING(cString, 4, 2). //Displays "DE"
DISPLAY SUBSTRING(cString, 4). //Displays "DEFGH"

La sous-chaîne peut également être utilisée pour écraser une partie d’une chaîne. Utilisez la même syntaxe, mais affectez cette sous-chaîne à la place:

DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "ABCDEFGH".
SUBSTRING(cString, 4, 2) = "XY". //Replaces position 4 and 5 with "XY" DISPLAY cString.

Il existe également une fonction similaire appelée OVERLAY Cet exemple de la documentation Progress couvre les différences entre OVERLAY et SUBSTRING :

/* This procedure illustrates the differences between the SUBSTRING and OVERLAY statements. / DEFINE VARIABLE cOriginal AS CHARACTER NO-UNDO INITIAL "OpenEdge". DEFINE VARIABLE cSubstring AS CHARACTER NO-UNDO. DEFINE VARIABLE cOverlay AS CHARACTER NO-UNDO. DEFINE VARIABLE cResults AS CHARACTER NO-UNDO. / Default behavior without optional LENGTH. / ASSIGN cSubstring = cOriginal SUBSTRING(cSubstring,2) = "" cOverlay = cOriginal OVERLAY(cOverlay,2) = ""
cResults = "target = ~"OpenEdge~". ~n~n" + "If you do not supply a length, SUBSTRING and OVERLAY default as follows: ~n~n" + "SUBSTRING(target,2) = ~"~" yields: " + cSubstring + ". ~n" + "OVERLAY(target,2) = ~"~" yields: " + cOverlay + "."./
Behavior with zero LENGTH. /ASSIGN cSubstring = cOriginal SUBSTRING(cSubstring,2,0) = "" cOverlay = cOriginal OVERLAY(cOverlay,2,0) = "" cResults = cResults + "~n~n" + "For a zero length, SUBSTRING and OVERLAY behave as follows: ~n~n" + "SUBSTRING(target,2,0) = ~"~" yields: " + cSubstring + ". ~n" + "OVERLAY(target,2,0) = ~"~" yields: " + cOverlay + "."./ Behavior with LENGTH < replacement. /ASSIGN cSubstring = cOriginal SUBSTRING(cSubstring,2,1) = "" cOverlay = cOriginal OVERLAY(cOverlay,2,1) = ""
cResults = cResults + "~n~n" + "For a length shorter than the replacement, SUBSTRING and OVERLAY behave as follows: ~n~n" + "SUBSTRING(target,2,1) = ~"~" yields: " + cSubstring + ". ~n" + "OVERLAY(target,2,1) = ~"~" yields: " + cOverlay + "."./
Behavior with LENGTH = replacement. /ASSIGN cSubstring = cOriginal SUBSTRING(cSubstring,2,3) = "" cOverlay = cOriginal OVERLAY(cOverlay,2,3) = ""
cResults = cResults + "~n~n" + "For a length equal to the replacement, SUBSTRING and OVERLAY behave as follows: ~n~n" + "SUBSTRING(target,2,3) = ~"~" yields: " + cSubstring + ". ~n" + "OVERLAY(target,2,3) = ~"~" yields: " + cOverlay + "."./
Behavior with LENGTH > replacement. */ASSIGN cSubstring = cOriginal SUBSTRING(cSubstring,2,6) = "" cOverlay = cOriginal OVERLAY(cOverlay,2,6) = ""
cResults = cResults + "~n~n" + "For a length greater than the replacement, SUBSTRING and OVERLAY behave as follows: ~n~n" + "SUBSTRING(target,2,6) = ~"~" yields: " + cSubstring + ". ~n" + "OVERLAY(target,2,6) = ~"~" yields: " + cOverlay + ".".
MESSAGE cResults VIEW-AS ALERT-BOX.

INDEX – renvoie la position d’une chaîne dans une chaîne.

R-INDEX va à la même chose mais chercher de droite à gauche.

INDEX (source, cible)

Recherchez la cible dans la source (de gauche à droite) et retournez sa position. S’il manque le résultat 0.

INDEX (source, cible, position de départ).

Comme ci-dessus, mais commencez à chercher au départ

DEFINE VARIABLE str AS CHARACTER NO-UNDO.
str = "ABCDEFGH".
DISPLAY INDEX(str, "cd") INDEX(str, "cd", 4). //Will display 3 and 0

REPLACE – remplace une chaîne dans une chaîne.

REPLACE (chaîne, from-string, to-string)

Remplace de string par to-string dans string. From-string et to-string n’ont pas besoin d’avoir la même longueur, to-string peut aussi ne rien avoir (“”) pour supprimer un caractère.

DEFINE VARIABLE c AS CHARACTER NO-UNDO.
c = "ELLO".
DISPLAY REPLACE(c, "E", "HE"). // Displays "HELLO"
c = "ABABABA".
DISPLAY REPLACE(c, "B", ""). // Remove all B's

TRIM – supprime les espaces de début et de fin (ou autres caractères).

Cela peut être utile pour nettoyer l’indata.

TRIM (chaîne)

Supprime tous les espaces de début et de fin, les tabulations, les sauts de ligne et les retours chariot.

TRIM (chaîne, caractère).

Supprime tous les “caractères” de début et de fin.

LEFT-TRIM et RIGHT-TRIM font la même chose mais ne font que conduire ou suivre.

DEFINE VARIABLE c AS CHARACTER NO-UNDO.
c = "__HELLO_WORLD___".
DISPLAY TRIM(c, "_").
/*Displays HELLO_WORLD without all the leading and trailing underscores but leaves the one in the middle.
REPLACE would have removed that one as well */

SUBSTITUTE – remplace les paramètres dans une chaîne.

SUBSTITUTE is a limited function for replacing up to nine preformatted parameters in a string.

SUBSTITUTE (chaîne, param1, param2, …, param9).

Les paramètres doivent être au format &1 à &9 .

Si vous voulez utiliser une esperluette dans la chaîne (et ne pas l’utiliser comme paramètre), écartez-la avec une autre perluète: && .

DEFINE VARIABLE str AS CHARACTER NO-UNDO.
str = "&1 made &2 goals in &3 games playing for &4".
MESSAGE SUBSTITUTE(str, "Zlatan Ibrahimovic", 113, 122, "Paris Saint-Germain") VIEW-AS ALERT-BOX.
MESSAGE SUBSTITUTE(str, "Mats Sundin", 555, 1305, "Toronto Maple Leafs") VIEW-AS ALERT-BOX.

Un paramètre peut apparaître plus d’une fois dans une chaîne, tous seront remplacés:

MESSAGE SUBSTITUTE("&1 &2 or not &1 &2", "To", "Be") VIEW-AS ALERT-BOX.

Reference : https://riptutorial.com/fr/progress-4gl/example/27624/manipulation-de-cordes