Funzione replace

From SageDev KB
Jump to navigation Jump to search
#
#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
#############################################################################