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!