Procedure di varia utilità

Forum in Italiano NON ufficiale
Rispondi
Avatar utente
angelo.santospago
Messaggi: 5
Iscritto il: mer nov 17, 2021 12:23 pm

Procedure di varia utilità

Messaggio da angelo.santospago »

Elenco di procedure di varia utilità
Avatar utente
angelo.santospago
Messaggi: 5
Iscritto il: mer nov 17, 2021 12:23 pm

Funzione Val() potenziata

Messaggio da angelo.santospago »

Codice: Seleziona tutto

PROCEDURE VAL_POWERED(sValoreStringa is string = "")

sTitolo      is string  = "Ritorno valore"
sSepDecimale  is string
i, j      is int

//*** La procedura ritorna il valore di una stringa dopo averla formattata.
//    La formattazione tende a far rimanere la stringa con uno ed un solo carattere di separatore decimale, il punto '.', infatti Val("1,2") = 1, troncando le cifre dopo ","
//    Interpreta i seguenti formati (dove tre ripetizioni dello stesso simbolo indicano una serie indefinita di ripetizioni):
//    ,,,.
//    ...,
//    ,,,
//    ...
//    ,.
//    .,
//    '''
//    ''',
//    '''.
//    ,,,...
//    ...,,,

// rimuove gli spazi
sValoreStringa  = NoSpace(sValoreStringa,sscAll)

// rimuove "'"
sValoreStringa  = Replace(sValoreStringa,"'","")

// non deve esserci nessun "+" in quanto superfluo
sValoreStringa  = Replace(sValoreStringa,"+","")

// in base al numero di "-" trovato
SWITCH StringCount(sValoreStringa,"-")
  // troppi "-": da rimuovere
  CASE > 1
    sValoreStringa = Replace(sValoreStringa,"-","")
    
  // un solo "-"
  CASE 1
    // se trovato "fuori posto", deve essere riportato al primo posto, altrimenti la funzione Val() non lo riconosce
    IF Position(sValoreStringa,"-") > 1 THEN sValoreStringa = "-" + Replace(sValoreStringa,"-","")
    
  // nessun "-" trovato: meglio così!
  OTHER CASE
END

// individua il primo separatore decimale da destra tra "." e ","
j = Length(sValoreStringa)
FOR i = j TO 1 STEP -1
  IF sValoreStringa[[i]] _IN_ (".",",") THEN
    sSepDecimale = sValoreStringa[[i]]
    BREAK
  END
END

// in base al separatore trovato
SWITCH sSepDecimale
  // se trovato ".", rimuove tutte le ",", lasciando il separatore = "."
  CASE "."
    sValoreStringa  = Replace(sValoreStringa,",","")  
    
  // se trovato ",", rimuove tutti i "." e poi trasforma "," in ".", impostando il separatore = "."
  CASE ","
    sValoreStringa  = Replace(Replace(sValoreStringa,".",""),",",".")
    sSepDecimale  = "."
    
  // se non trova nulla, ritorna subito il valore
  OTHER CASE
    RESULT Val(sValoreStringa)  
END

// se il separatore è ripetuto, lo rimuove
IF StringCount(sValoreStringa,sSepDecimale) > 1 THEN sValoreStringa = Replace(sValoreStringa,sSepDecimale,"")

// ritorna il valore
RESULT Val(sValoreStringa)
Avatar utente
angelo.santospago
Messaggi: 5
Iscritto il: mer nov 17, 2021 12:23 pm

Funzione IntegerPart() potenziata

Messaggio da angelo.santospago »

Codice: Seleziona tutto

PROCEDURE INTEGER_PART_POWERED(Numero)

sTitolo is string = "Parte intera"

//*** La procedura ritorna la parte intera di un valore passato.
//    Utilizzando IntegerPart(), infatti, ritorna l'intero più piccolo se negativo: -3.22 -> -4

// ritorna la parte intera comprensiva del segno
RESULT (Abs(Numero) - DecimalPart(Numero)) * (Numero < 0 ? -1 ELSE 1)
marcov
Site Admin
Messaggi: 18
Iscritto il: mar nov 16, 2021 12:24 pm

Re: Procedure di varia utilità

Messaggio da marcov »

Grande, grazie mille!!
Rispondi