Sei in: Per i Webmaster - Corso di ASP - Funzioni interne di VbScript
Nel linguaggio VBScript, sono disponibili parecchie funzioni
interne, cioè pronte e disponibili per effettuare un notevole numero di
operazioni piuttosto comuni. La prima cosa che prendiamo in considerazione
è il typecasting delle variabili. Può capitare di avere bisogno di
modificare il subtipo di una variabile; per esempio se si ha una stringa
il cui valore è "350" e la si vuole fare diventare un numero intero per
compiere operazioni matematiche, oppure una stringa con valore
"09/02/1968" la si vuole fare diventare a tutti gli effetti una variabile
di subtipo data. Come vedremo non ci sono solo funzioni per il
typecasting.
Il seguente codice ci fa capire meglio di cosa si sta
parlando:
<%
Dim varMyVar1, varMyVar2
varMyVar1 = "200"
varMyVar2 = "300"
Response.Write varMyVar1 + varMyVar2 & "<br>"
' Conversione delle stringhe in numeri interi
varMyVar1 = CInt(varMyVar1)
varMyVar2 = CInt(varMyVar2)
Response.Write varMyVar1 + varMyVar2
%>
La prima volta che si effettua la somma delle variabili si
ottiene una stringa il cui valore è "200300", dopo la conversione in
numeri interi il risultato è un intero che vale 500.
Vediamo una
tabella riassuntiva di alcune funzioni di typecasting:
| Funzione | Sintassi | Descrizione | Esempio |
| CBool | CBool(espressione) | Ritorna un valore booleano corrispondente al valore di una espressione. Se l'espressione vale zero il risultato è falso altrimenti è vero. | intCounter = 5 blnValue = CBool(intCounter) blnValue è Vero |
| CByte | CByte(espressione) | Ritorna una espressione convertita ad un variant di subtipo byte. Si ha errore se il valore esce dal range accettabile per un Byte (da 0 a 255) | dblValue = 5.456 bytValue = CByte(dblValue) bytValue vale 5 |
| CCur | CCur(espressione) | Ritorna una espressione convertita ad un variant di subtipo currency. Il risultato dipende dalle impostazioni internazionali del server. I numeri vengono formattati con l'appropriato separatore decimale e la quarta cifra dopo la virgola viene arrotondata per eccesso se la quinta cifra è superiore o uguale a 5. | dblValue = 821.555790 curValue = CCur(dblValue) curValue vale 821,5558 |
| CDbl | CDbl(espressione) | Ritorna una espressione convertita ad un variant di subtipo double. Il risultato dipende dalle impostazioni internazionali del server. Il separatore delle cifre decimali è formattato a seconda di queste impostazioni. | dblValue = CDbl(3.49) dblValue diventa 3,49 |
| CInt | CInt(espressione) | Ritorna una espressione convertita ad un variant di subtipo integer. Il risultato dipende dalle impostazioni internazionali del server. Il valore decimale viene prima arrotondato e poi scartato. Nel caso di numeri tipo 0.5, 1.5, 2.5 ecc... il numero viene arrotondato al numero pari più vicino. | varValue = 5579.56 intValue = CInt(varValue) intValue vale 5580 |
| CLng | CLng(espressione) | Ritorna una espressione convertita ad un variant di subtipo long. Il risultato dipende dalle impostazioni internazionali del server. Il valore decimale viene prima arrotondato e poi scartato. | varValue = 5579.56 lngValue = CLng(varValue) lngValue vale 5580 |
| CSng | CSng(espressione) | Ritorna una espressione convertita ad un variant di subtipo single. Il risultato dipende dalle impostazioni internazionali del server. | varValue = 5.456 sngValue = CSng(varValue) sngValue vale 5,456 |
| CStr | CStr(espressione) | Ritorna una espressione convertita ad un variant di subtipo string. Il risultato dipende dalle impostazioni internazionali del server. Si ha errore se espressione vale Null. Valori di tipo numeric e err diventano numeri, valori booleani diventano Vero o Falso, le date vengono convertite al formato di tipo short (corto). | strBool = CStr(True) strDate = CStr(#1/1/01#) strNum = CStr(5,45) strBool vale "Vero" strDate vale "01/01/2001" strNum vale "5,45" |
Gli esempi precedenti sono stati testati su un server con
impostazioni italiane di default.
Vediamo una tabella riassuntiva
di alcune funzioni matematiche:
| Funzione | Significato | Esempio |
| Abs(numero) | Valore assoluto | Abs(-58) Ris: 58 |
| Atn(numero) | Arcotangente | 4 * Atn(1) Ris: 3,14159265358979 |
| Cos(numero) numero in radianti |
Coseno | Cos(30 * 3.14 / 180) Ris: 0,866158094405463 |
| Exp(numero) | e ^ numero (e = 2,718282) | Exp(2) Ris: 7,38905609893065 |
| Fix(numero) | Parte intera | Fix(-7.6) Ris: 7 |
| Hex(numero) | Esadecimale in base 10 | Hex(200) Ris: C8 |
| Int(numero) | Parte intera | Int(-7.6) Ris: 8 |
| Log(numero) | Logaritmo naturale | Log(5) Ris: 1,6094379124341 |
| Oct(numero) | Ottale in base 10 | Oct(8) Ris: 10 |
| Rnd | Numero casuale | Randomize Int(Rnd * 10) Ris: nr. casuale >= 0 e < 10 |
| Round(numero) | Arrotonda a intero più prossimo | Round(4.5) Ris: 4 Round(4.51) Ris: 5 |
| Round(numero,decimali) | Arrotonda al valore di decimali | Round(4.515,2) Ris: 4,51 Round(4.516,2) Ris: 4,52 |
| Sgn(numero) | Segno | numero < 0 = -1 numero = 0 = 0 numero > 0 = 1 |
| Sin(numero) | Seno | Sin(30 * 3.14 / 180) Ris: 0,499770102643102 |
| Sqr(numero) numero>0 |
Radice quadrata | Sqr(9) Ris: 3 |
| Tan(numero) | Tangente | Tan(10) Ris: 0,648360827459087 |
Esistono tante altre funzioni interne di VBScript relative a
date, stringhe, formattazioni particolari ecc...
Vediamo l'uso di
alcune di esse molto comuni, mentre per una lista completa conviene fare
riferimento ad un manuale VBScript o a documentazione ufficiale
Microsoft.
Funzioni di data e orario:
Date restituisce
la data del giorno attuale
DatePart("h",Now) restituisce l'ora
(es: 7 o 13 o 18 ....) dell'orario attuale
Segue un elenco dei valori
che si possono inserire al posto di "h":
d - giorno
m - mese
n
- minuto
q - trimestre
s - secondo
w - giorno della
settimana
ww - settimana dell'anno
y - giorno dell'anno
yyyy -
anno
Day(Date) restituisce il giorno della data
attuale
Time restituisce l'orario attuale
Hour(Time)
restituisce l'ora dell'orario attuale
Minute(Time) restituisce i
minuti dell'orario attuale
Second(Time) restituisce i secondi
dell'orario attuale
IsDate(espressione) restituisce un variant
di subtipo booleano
Esempio:
IsDate(Date) = Vero
IsDate("") =
Falso
IsDate(#01/01/2002#) = Vero
MonthName(month,
[abbreviato]) restituisce il nome del mese indicato da
month
Esempio:
MonthName(Month(Date)) restituisce il nome del mese
corrente
MonthName(Month(Date),True) restituisce il nome abbreviato del
mese corrente
Now restituisce la data e l'ora attuale
Funzioni di stringa:
qualunque cosa faccia la
nostra applicazione, spesso ci si trova a dover manipolare delle stringhe.
Vi sono molte funzioni di stringa ed ora ne vediamo qualcuna nel
dettaglio:
InStr([start,] string1, string2 [,
compare])
ritorna un numero intero che indica la posizione della
prima occorrenza di una parte di stringa all'interno di una
stringa.
start (opzionale) è una qualunque espressione
valida non negativa che indica la posizione di partenza della ricerca
all'interno di string1. I valori non interi sono arrotondati. Questo
argomento è richiesto se è specificato l'argomento
compare.
string1 è la stringa nella quale vogliamo
cercare.
string2 è la sub stringa che vogliamo
trovare.
compare (opzionale) indica il metodo di comparazione da
utilizzare, può essere 0 (zero ovvero vbBinaryCompare) per una ricerca
case sensitive o 1 (uno ovvero vbTextCompare) per una ricerca non-case
sensitive. Il valore di default è zero.
Note
Se start
contiene Null si genera un errore di runtime. Se start è più grande della
lunghezza di string2, viene restituito 0 (zero).
Esempio:
<%
Dim strText,
lngStartPos, lngFoundPos, strSearchFor
strText = "Testo di
prova per un test sulle stringhe"
Response.Write
strText & "<br>"
lngStartPos =
1
strSearchFor =
"t"
lngFoundPos =
InStr(lngStartPos,strText,strSearchFor)
Do While
lngFoundPos > 0
Response.Write "Lettera t trovata in posizione " & lngFoundPos &
"<br>"
lngStartPos = lngFoundPos + 1
lngFoundPos = InStr(lngStartPos,strText,strSearchFor)
Loop
%>
Il risultato finale è il seguente:
Testo di prova per
un test sulle stringhe
Lettera t trovata in posizione 4
Lettera t
trovata in posizione 23
Lettera t trovata in posizione 26
Lettera t
trovata in posizione 35
Da notare che la prima T della frase non
viene trovata perché non è stato specificato l'argomento di comparazione e
quindi viene utilizzato quello di default, cioè zero, che effettua una
ricerca case sensitive e quindi "T" è diverso da
"t".
LCase(string) e UCase(string)
Queste due
funzioni si utilizzano per convertire in lettere minuscole o maiuscole una
stringa specificata.
Esempio:
<%
strText = "Lo
chiamavano Trinità"
Response.Write
LCase(strText) & "<br>"
Response.Write
UCase(strText)
%>
Il risultato finale è il seguente:
lo chiamavano
trinità
LO CHIAMAVANO TRINITà
Len(string)
La funzione
Len restituisce il numero di caratteri di cui è composta una stringa
compresi gli spazi; Len("Bella giornata") restituirà il valore
14.
Left(string, length) e Right(string,
length)
Queste due funzioni restituiscono la parte sinistra o
destra della stringa della lunghezza specificata dal valore
length.
Esempio:
<%
strText = "Bella
giornata"
Response.Write
Left(strText,5) & "<br>"
Response.Write
Right(strText,5)
%>
Il risultato finale
è:
Bella
rnata
Mid(string, start[, length])
La
funzione Mid restituisce una parte di string partendo dal carattere start
e lunga il valore di length (opzionale).
Esempio:
<%
strText = "Bella
giornata"
Response.Write
Mid(strText,4) & "<br>"
Response.Write
Mid(strText,4,6)
%>
Il risultato finale è:
la giornata
la
gio
LTrim(string), RTrim(string) e
Trim(string)
Queste funzioni servono nell'ordine a eliminare gli
spazi bianchi a sinistra di una stringa, a destra di una stringa e da
tutte e due le parti di una stringa.
Replace(expression, find,
replacewith[, start[, count[, compare]]])
Questa funzione
sostituisce una parte di una stringa con un'altra stringa un numero
definito di volte.
expression è la stringa intera nella
quale cercare la parte da sostituire.
find è la parte di stringa
che si vuole sostituire.
replacewith è la stringa che si vuole
utilizzare per la sostituzione.
start (opzionale) è il carattere
espresso in numeri dal quale cominciare a cercare, il valore di default è
1 cioè inizio stringa.
count (opzionale) è il numero delle
sostituzioni da effettuare, il valore di default è -1 che significa che
verranno effettuate tutte le ricorrenze trovate.
compare
(opzionale) indica il metodo di comparazione da utilizzare, può essere 0
(zero ovvero vbBinaryCompare) per una ricerca case sensitive o 1 (uno
ovvero vbTextCompare) per una ricerca non-case sensitive. Il valore di
default è zero.
Esempio:
<%
strText = "Bella
giornata"
Response.Write
Replace(strText,"Bella","Brutta")
%>
Il risultato è il seguente:
Brutta
giornata
Split(expression[, delimiter[, count[,
compare]]])
Questa funzione è molto comoda perché genera
automaticamente un array di stringhe.
expression è la
stringa da suddividere.
delimiter (opzionale) è il o i caratteri
da prendere in considerazione per la suddivisione, se non specificato
viene usato il carattere di spazio.
count (opzionale) è il
numero di substringhe da ritornare.
compare (opzionale) indica
il metodo di comparazione da utilizzare, può essere 0 (zero ovvero
vbBinaryCompare) per una ricerca case sensitive o 1 (uno ovvero
vbTextCompare) per una ricerca non-case sensitive. Il valore di default è
zero.
Esempio:
<%
strText =
"1;2;3;4;5;6;7;8;9;0"
arrMyArray =
Split(strText,";",5)
For Each Item In
arrMyArray
Response.Write Item & "<br>"
Next
%>
Il risultato è il
seguente:
1
2
3
4
5;6;7;8;9;0
Per finire questa
sezione vediamo ora alcune funzioni di formattazione che sono
funzioni che servono appunto per modificare l'aspetto di numeri, date,
valute ecc...
FormatDateTime(date[,
namedformat])
date è una qualunque data
valida.
namedformat (opzionale) è un valore numerico che indica
il formato di data/orario da utilizzare. Può avere i seguenti
valori:
vbGeneralDate 0 formato data (se presente) e ora
(se presente) che utilizza la data corta e l'orario esteso presi dalle
impostazioni locali del server
vbLongDate 1 formato data
estesa presa dalle impostazioni locali del server
vbShortDate 2
formato data corta presa dalle impostazioni locali del
server
vbLongTime 3 formato orario esteso preso dalle
impostazioni locali del server
vbShortTime 4 formato orario
corto preso dalle impostazioni locali del server
Esempio:
<%
Response.Write
FormatDateTime(Now,vbGeneralDate) & "<br>"
Response.Write
FormatDateTime(Now,vbLongDate) & "<br>"
Response.Write
FormatDateTime(Now,vbShortDate) & "<br>"
Response.Write
FormatDateTime(Now,vbLongTime) & "<br>"
Response.Write
FormatDateTime(Now,vbShortTime) & "<br>"
%>
Il risultato su un server con le impostazioni italiane di
default è il seguente:
02/01/2002 15.45.33
mercoledì 2 gennaio
2002
02/01/2002
15.45.33
15.45
FormatNumber(expression[,
numdigitsafterdecimal[, includeleadingdigit[,
useparensfornegativenumbers[, groupdigits]]]])
Questa funzione
serve a formattare un numero.
expression è la variabile che
vogliamo formattare
numdigitsafterdecimal (opzionale) è un
valore numerico che indica quanti numeri decimali dopo la virgola vogliamo
utilizzare, se non specificato è utilizzato il valore di default del
Pannello di Controllo.
includeleadingdigit (opzionale) indica se
si vuole utilizzare un zero all'inizio di valori
frazionari.
useparensfornegativenumbers (opzionale) indica se i
numeri negativi sono da scrivere fra parentesi.
groupdigits
(opzionale) indica se si vuole utilizzare il separatore delle migliaia
specificato nelle impostazioni internazionali del Pannello di
Controllo.
Gli ultimi tre argomenti possono assumere i seguenti
valori:
vbUseDefault 2 impostazioni di default prese dal
Pannello di Controllo
vbTrue -1
vbFalse 0
Come
detto in precedenza, conviene fare riferimento ad un manuale VBScript o a
documentazione ufficiale Microsoft per una lista completa delle funzioni
interne di VBScript.
