2017-09-07 5 views
-3

Je veux supprimer tous les caractères de contrôle de la chaîne donnée. Je ne veux pas utiliser la méthode Replace car cela prend plusieurs itérations. Aidez-moi.Progression 4gl caractère de contrôle supprimer

Merci d'avance.

+0

Vous voudrez peut-être poser votre vraie question. Ce qui est apparemment quelque chose comme "puis-je utiliser des expressions régulières avec Progress". –

Répondre

2

Vous ne l'aimerez peut-être pas, mais REPLACE est le moyen le plus simple de le faire. J'ai utilisé ce code pour supprimer les caractères non imprimables d'une chaîne. Cela remplacera les caractères de contrôle avec un espace:

DEFINE VARIABLE str AS CHARACTER NO-UNDO. 
DEFINE VARIABLE iLoop AS INTEGER NO-UNDO. 

DO iLoop = 1 TO 31: 
    str = REPLACE(str, CHR(iLoop), " "). 
END. 

Comme il y a des caractères de contrôle multiples qui doivent être supprimés, il semble que toute solution impliquera plusieurs itérations. En fonction de ce que vous définissez en tant que caractère de contrôle et du jeu de caractères que vous utilisez, cela peut faire l'affaire.

+0

merci, mais est-il possible de le remplacer en utilisant des expressions régulières. –

+1

Les expressions régulières ne sont pas supportées nativement dans OpenEdge, mais vous pouvez utiliser un objet .Net: https://community.progress.com/community_groups/openedge_development/f/19/t/29622 – TheDrooper

2

Ou au moins vous orienter dans une direction utile:

define variable i as integer no-undo. 
define variable n as integer no-undo. 
define variable c as character no-undo. 
define variable s as character no-undo. 
define variable x as character no-undo. 

s = "something with control characters in it". 
x = "". 

n = length(s). 
do i = 1 to n: 
    c = substring(s, i, 1). 
    if asc(c) >= 32 and asc(c) < 127 then 
    x = x + c. 
end. 
+0

Merci Tom, mais je veux réduire l'itération. S'il y a un moyen de faire la même chose en utilisant une expression régulière, aidez-moi s'il vous plaît. –

+0

Si vous imaginez qu'une expression régulière ne parcourt pas la chaîne, vous allez être déçu –