Funzione REPLACE per stringhe

Adonix non prevede un’istruzione per la sostituzione di una parte di stringa.

L’unica istruzione che prevede è

ctrans(STR,"AB","C")

che prende la stringa STR e ne sostituisce tutte le occorrenze delle lettere ‘A’ e ‘B’ con la lettera ‘C’.
Nota bene, non sostituisce la stringa “AB”, ma tutte le occorrenze di ‘A’ e tutte le occorrenze di ‘B’.

Rimediamo implementando una funzione REPLACE e un suo wrapper,
in modo da poter gestire con lo stesso codice sia le semplici stringhe sia i clob.

 

#
#File YSAGEDEV
#

#############################################################################
# Author: SageDev.it
# sostituisce tutte le occorrenze di OLD con NEW
# STR è un clob
#############################################################################
Funprog REPLACE(STR, OLD, NEW)
    Value Clbfile STR()
    Value Char OLD()
    Value Char NEW()
    Local Integer LENOLD
    Local Integer LENNEW

    #lunghezza della stringa da sostituire
    LENOLD= len(OLD)
    #lunghezza della stringa che sostituirà la OLD
    LENNEW= len(NEW)

    If LENOLD<=0 or LENOLD>len(STR)
        #la stringa da sostituire è vuota o è più lunga della stringa iniziale, quindi non sostituisco niente
        End STR
    Endif

    Local Integer INDEX
    Local Integer INDEXSTART

    #cerco la stringa da sostituire
    INDEX=instr(1,STR,OLD)

    While INDEX>0
        #INDEX>0 significa che è stata trovata una corrispondenza di OLD
        #sostituisco l'occorrenza di OLD con la stringa NEW
        STR =left$(STR, INDEX-1) + NEW + right$(STR, INDEX+LENOLD)

        #calcolo l'indice a cui finisce la stringa NEW inserita
        INDEXSTART=INDEX+LENNEW

        #cerco la stringa da sostituire a partire dalla fine dell'ultima corrispondenza trovata
        INDEX=instr(INDEXSTART,STR,OLD)
    Wend
End STR
#############################################################################

#############################################################################
# Author: SageDev.it
# Wrapper di REPLACE(STR, OLD, NEW)
# sostituisce tutte le occorrenze di OLD con NEW
# il parametro STR è un CHAR(), non un clob
#############################################################################
Funprog REPLACESTR(STR, OLD, NEW)
    Value Char STR()
    Value Char OLD()
    Value Char NEW()

    Local Char RET(250)
    Local Clbfile STRCLB(1)
    STRCLB = STR
    RET = func YSAGEDEV.REPLACE(STRCLB, OLD, NEW)
End RET
#############################################################################

Questo codice fa parte della libreria YSAGEDEV

Spero vi sia d’aiuto!

Lascia un commento

Scopri di più da SageDev

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continue reading