Procedure di varia utilità
- angelo.santospago
- Messaggi: 5
- Iscritto il: mer nov 17, 2021 12:23 pm
Procedure di varia utilità
Elenco di procedure di varia utilità
- angelo.santospago
- Messaggi: 5
- Iscritto il: mer nov 17, 2021 12:23 pm
Funzione Val() potenziata
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)
- angelo.santospago
- Messaggi: 5
- Iscritto il: mer nov 17, 2021 12:23 pm
Funzione IntegerPart() potenziata
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)
Re: Procedure di varia utilità
Grande, grazie mille!!