asp - asp.net - aspcode.it

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

  > > Articoli

I segreti delle funzioni stringa (2/2)

Data di pubblicazione: 18/12/2001        Voto della community: 3,83 (Votanti: 8)


Proseguiamo in questo secondo articolo nell'analisi delle funzioni che il VBScript ci mette a disposizione per la manipolazione delle stringhe.
Naturalmente, con questi due articoli, non pretendo certo di aver esaurito l'argomento, tuttavia sono sicuro che, dopo la lettura degli stessi, saranno molti tra voi ad avere le idee più chiare sulle stringhe (e relative funzioni).

La funzione StrReverse(string)

Incominciamo con una funzione – una curiosità, più che altro - che ai più risulterà praticamente sconosciuta: essa accetta come parametro una stringa e ritorna la stessa stringa ma con l'ordine dei caratteri invertito.

<%
stringa = "AMLETO"
Response.Write StrReverse(stringa) ' Mostra "OTELMA"...sì...proprio il mago...
%>

La domanda che molti di Voi – giustamente - si staranno ponendo in questo momento è: "Interessante, ma a che serve?"
Risposta: "Non lo so..." :-)

La funzione Mid(stringa, start [, length])

Il classico utilizzo di questa funzione è quello di estrarre una sottostringa da una stringa di partenza a partire da un determinato carattere (e, opzionalmente, per una determinata lunghezza):

<%
Stringa = "riportare"
Response.Write Mid(Stringa, 3, 5) ' mostra "porta"
%>

Se omettiamo il terzo parametro, la funzione restituisce tutti i caratteri a partire da <start>:

<%
Stringa = "riportare"
Response.Write Mid(Stringa, 3) ' mostra "portare"
%>

Non molti sanno, tuttavia, che in origine (mi riferisco al glorioso GWBASIC per DOS) la Mid() era anche un'istruzione (cioè poteva trovarsi a sinistra dell'operatore di uguaglianza). Insomma, nel vecchio Basic, un'istruzione del genere era perfettamente lecita:

Stringa = "antonella"
Mid(Stringa, 1) = "A" ' --> "Antonella"

Pensate in quante occasioni sarebbe preziosa un'istruzione del genere!

Naturalmente quelli della Microsoft hanno pensato bene di toglierci questa cuccagna (eseguita come istruzione in una pagina ASP la Mid() restituisce infatti errore).

Adesso dovremmo fare qualcosa del genere:

<%
Stringa = "antonella"
Stringa = UCase(Left(Stringa, 1)) & Mid(Stringa, 2) ' --> "Antonella"
%>

Oppure, con l'ausilio della funzione Replace():

<%
Stringa = "antonella"
Response.Write Replace(Stringa, Left(Stringa, 1), UCase(Left(Stringa, 1)), 1, 1) ' Antonella
%>

Le cose si complicano un po' quando il carattere (o i caratteri) da sostituire si trovano all'interno della stringa. Con la Mid(), usata come istruzione, non avremmo alcun problema:

Stringa = "ridere"
Mid(Stringa, 3) = "ma" ' rimare

Purtroppo però dobbiamo farne a meno e quindi:

<%
Stringa = "ridere"
Stringa = Left(Stringa, 2) & "ma" & Mid(Stringa, 5)
%>

La funzione StrComp(stringa1, stringa2 [, tipodiconfronto])

Questa funzione – che credo non usi praticamente nessuno (ed è un peccato, devo dire) – permette di confrontare due stringhe (tipicamente per stabilire se sono uguali oppure no).
Ecco un confronto "classico":

<%
Stringa1 = "PIPPO"
Stringa2 = "pippo"
If Stringa1 = Stringa2 Then ' qui non arriva, dobbiamo forzare un confronto case-unsensitive
If Ucase(Stringa1) = Ucase(Stringa2) Then ' ok, sono uguali
%>

Con la StrComp il tutto si riduce a questa riga di codice:

<%
If StrComp(Stringa1, Stringa2, 1) = 0 Then ' ok, sono uguali
%>

Spiegazione: impostando il terzo parametro della funzione a 1 (vbTextCompare) la funzione esegue il confronto case-unsensitive per noi, senza costringerci ad usare la UCase() (o la LCase(), dipende dai gusti).
Impostando il terzo parametro a zero (o omettendolo), si chiede alla funzione di effettuare un confronto di tipo binario (quindi case-sensitive):

<%
If StrComp(Stringa1, Stringa2, 0) = 0 Then
' falso: restituisce -1 perché la somma dei codici ASCII dei caratteri di Stringa1 ("PIPPO") è inferiore alla somma di quelli di Stringa2 ("pippo"). (Ricordo come i valori dei codici ASCII delle lettere minuscole siano superiori a quelli delle lettere maiuscole)
%>

Invertendo le stringhe come argomenti della funzione:

<%
If StrComp(Stringa2, Stringa1, 0) = 0 Then ' falso: restituisce 1 perché Stringa2 > Stringa1
%>

Come al solito un esempio vale più di mille parole:

carattere ASCII Code carattere ASCII Code
'P' 80 'p' 112
'I' 73 'i' 105
'P' 80 'p' 112
'P' 80 'p' 112
'O' 79 '0' 111
Tot: 392 Tot: 552


Restituendo un trittico di valori (1, 0 oppure -1) la StrComp si rivela molto utile nelle routine di ordinamento di vettori di stringhe.
Ma io comunque la consiglio caldamente anche come sostituta del classico "If stringa1 = stringa2". (perché più performante e perché così ci si abitua ad una sintassi "C-like").

Chiudo l'articolo (e il tema) avvisando i lettori che, a seguire, su ASPCode pubblicherò una funzione stringa – mia creazione originale – assai duttile, che permette di modificare una stringa di caratteri cancellando, inserendo e sostituendo il contenuto con stringhe alternative.
E pensate che la funzione in oggetto è lunga...appena una linea di codice! :-)
Restate sintonizzati.
Alla prossima.




Utenti connessi: 13396