asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 1186
ASPCode.it - Store

  > > Articoli

I segreti delle funzioni stringa (1/2)

Data di pubblicazione: 13/11/2001        Voto della community: 3,47 (Votanti: 5)


In questo articolo scenderemo in profondità nell’analisi delle funzioni che il VBScript ci mette a disposizione per la manipolazione delle stringhe.
Si dà per scontato che il lettore conosca già queste funzioni (sia pure in maniera approssimativa); d’altra parte una spiegazione del tipo “la funzione x accetta come parametro una stringa e restituisce etc.”, oltre a risultare noiosa, può facilmente ricavarsi da qualsiasi manuale su questo linguaggio (oltre che su Internet, certamente).

La funzione ASC()

Come è noto, questa funzione ritorna il codice ASCII (si pronuncia “ASKII”) del primo carattere di una stringa. Esempio:

<%
Response.Write Asc("A")    ' Ritorna 65.
Response.Write Asc("a")    ' Ritorna 97.
Response.Write Asc("Apple")    ' Ritorna 65.
%>

Questa funzione ritorna un errore di run-time (cioè un errore che interrompe l’esecuzione della nostra applicazione mostrandoci un messaggio a video) se l’argomento è una stringa nulla (cioè una stringa di lunghezza zero).
Di solito si inserisce un controllo del genere:

<%
If Len(stringa) > 0 Then asciiCode = ASC(stringa) Else asciiCode = 0
%>

Lo stesso risultato possiamo ottenerlo con questa forma più compatta:

<%
asciiCode = ASC(stringa + CHR(0))
%>

La funzione INSTR()

Nell’usare questa funzione dobbiamo tenere a mente che il confronto avviene in maniera case-sensitive (cioè considerando differenti le maiuscole e le minuscole). Per forzare un confronto case-unsensitive bisogna scrivere:

<%
intPosition = INSTR(intStart, UCASE(strFirst), UCASE(strSecond))
%>

Attenzione che la INSTR può spesso trarre in inganno: se infatti <strSecond> è una stringa nulla, INSTR() restituirà sempre il valore di <intStart> oppure, se <intStart> viene omessa (come di solito accade), sempre il valore 1.

La funzione INSTR può tornarci utile per la ricerca di una stringa in un vettore (array ad una dimensione).
Ecco un esempio di codice “standard”:

<%
strCompare = “abcd”
For i = LBOUND(arrStringhe) To UBOUND(arrStringhe)
  If arrStringhe(i) = strCompare Then Response.Write “Trovata!”
Next
%>

Ed ecco lo stesso esempio ma con l’ausilio della INSTR:

<%
strCompare = “abcd”
For i = LBOUND(arrStringhe) To UBOUND(arrStringhe)
 If INSTR(arrStringhe(i), strCompare) > 0 Then Response.Write “Trovata!”
Next
%>

La seconda forma è più veloce (soprattutto con vettori contenenti migliaia di elementi) perché evita il confronto di stringhe e riduce il problema al confronto di valori interi (cioè numeri).
Bisogna infatti capire che i computer vedono sempre e soltanto numeri:ecco perché il secondo esempio è più performante.

La funzione LEN()

Strettamente legato all’esempio precedente è il problema di verificare se una stringa sia di lunghezza zero ("null string") oppure no.
I seguenti esempi sono equivalenti:

<%
If stringa = “” Then Response.Write “Stringa nulla”
%>

<%
If Len(stringa) = 0 Then Response.Write “Stringa nulla”
%>

Ma il secondo (sempre per il discorso del confronto tra interi) è più veloce.

Il VBScript ci offre la possibilità di testare valori nulli con la funzione IsNull(variabile) e quindi si sarebbe portati a pensare di fare una cosa del genere:

<%
Stringa = “”
If IsNull(stringa) Then Response.Write “Stringa nulla”
%>

In realtà l’esempio precedente restituirà sempre false (e quindi non mostrerà mai a video la scritta “Stringa nulla”).
Così invece funziona stampando correttamente la scritta:

<%
Stringa = null
If IsNull(stringa) Then Response.Write “Stringa nulla”
%>

Dov’è l’inghippo?
Semplicemente null è un “valore” speciale; una variabile che contenga null in realtà contiene sempre un valore (anche se appunto di tipo null) e quindi l’assegnazione:

<%
Stringa = null    ' la funzione LEN restituirà null e non zero!
%>

non è la stessa cosa di:

<%
Stringa = “”    ' la funzione LEN restituirà correttamente zero.
%>

Nella speranza che abbiate apprezzato l’argomento trattato nel presente articolo, vi do appuntamento al prossimo, quando discuteremo dell’utilizzo di altre funzioni stringa (note e meno note).
Alla prossima!




Utenti connessi: 1186