Newsgroup: it.comp.www.asp
Titolo: [LUNGO E TEDIOSO] Variabile svariabile

Dovendo fare il replace di alcuni caratteri su una stringa mi faccio la mia
bella funzioncina:
function repl_car(stringa)
     stringa = replace (stringa , "\", "\\'")
    stringa = replace (stringa , "'", "\'")
    ' e cosi' via....
     repl_car = stringa
 end function
pero' mi accorgo che non funziona bene, che se la chiamo n volte mi fa il
replace del replace precedente e non della variabile.
Cioe' se ho:
pippo = " pippo\pluto' "
e chiamo response.write repl_car(pippo) 2 volte, la prima ho regolarmente
visualizzato " pippo\\pluto\' " mentre la seconda ottengo "
pippo\\\\\pluto\' "
Si badi bene che io non ho fatto pippo=repl_car(pippo) perche' alloroa
sarebbe normale, no io chiamo 2 volte la stessa funzione passandogli la
stesa variabile.
Ovviamente va tutto a posto modificando la funzione in questo modo:
function repl_car(stringa)
    dim newstring
    newstring = stringa
     newstring = replace (newstring , "\", "\\'")
    newstring = replace (newstring , "'", "\'")
    ' e cosi' via....
     repl_car = newstring
    set newstring  = nothing
end function
A me a rigor di logica sembra un comportamento sbagliato, la variabile pippo
dovrebbe rimanere immutata anche con la prima funzione, anche se so bene che
la seconda e' piu' "pulita".
Che ne pensate?
Saluti.
Luciano

 pippo\\\\\pluto\' "
E' chiaro che succede questo.
La seconda volta vede nella stringa 2 singole "\" (in pippo\\pluto)
quindi, come le dici di fare, la funzione le sostituisce, ognuna
con una doppia \
Non capisco di che ti meravigli!
Ciao
Nixs

 stesa variabile.
Io chiamo due volte la stessa funzione con la stessa variabile:
response.write repl_car(pippo)
response.write repl_car(pippo)
e non:
pippo=repl_car(pippo)
pippo=repl_car(pippo)
E' ovvio che in questo secondo caso non c'e' nulla di strano, nel primo IMHO
si.
Saluti.
Luciano

sì, ma la function che usi assegna al parametro passato il risultato:
function repl_car(stringa)
     stringa = replace (stringa , "\", "\\'")
    stringa = replace (stringa , "'", "\'")
    ' e cosi' via....
     repl_car = stringa
 end function
Se la cambi con
function repl_car(stringa)
    dim ris
    ris = replace (stringa , "\", "\\'")
    ris = replace (ris , "'", "\'")
    ' e cosi' via....
     repl_car = ris
 end function
in questo modo non modifichi il valore di stringa e il risultato non sarà
duplicato...

 sě, ma la function che usi assegna al parametro passato il risultato:
Ok, credo di aver capito..in sostanza alla funzione passo la variabile non
il suo valore.
Saluti.
Luciano

 il suo valore.
una sorta di *puntatore*
--
CIAO!
Gusher

  end function
In ASP (ma anche in Visual Basic, se e' per questo) il passaggio dei
parametri e' per riferimento, quindi la repl_car() modifica la
variabile. Per fare quello che cerchi devi usare una variabile locale:
function repl_car(stringa)
    Dim NuovaStringa
    NuovaStringa = replace (stringa , "\", "\\'")
    NuovaStringa = replace (NuovaStringa, "'", "\'")
    ' e cosi' via....
     repl_car = NuovaStringa
end function
In Visual Basic sarebbe stato possibile risolvere semplicemente con:
function repl_car(ByVal stringa)
Ciao!
--
   Alex Palmese
---
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE! 
http://www.sertel.net/terminator/