Newsgroup: it.comp.lang.visual-basic
Titolo: problemi con le stringhe... ma é mai possibile? :-§

ho paura di essere un fenomeno, sono riuscito ad impappinarmi scasinando con
delle stringhe! in questo listato ho fatto una specie di riassunto :-)
in pratica, leggo un carattere (sottolineo singolo carattere, non ho
inserito i controlli per fare prima a postare il msg) e trovo il suo
corrispettivo decimale ascii;
2) genero un numero casuale e lo sommo al valore ascii di prima;
3) ora  eseguo l'operazione inversa, una sottrazione
4) converto da decimale ascii nel carattere corrispondente
5) converto in stringa
e ora magia... invece che tornarmi il carattere di prima, o mi da errore o
quando é più buono un carattere sbagliato
Private Sub Command1_Click()
   Dim a, op, temp As Integer
   Dim primo, s, ultimo As String
   primo = Text1.Text
   a = Asc(primo)
   Randomize
   op = Int(Rnd * 28)
   a = a + op
   ' fino a qua credo che sia tutto ok
   temp = a
   temp = temp - op
   ultimo = Chr(temp)
   ultimo = Val(ultimo)
   Label1.Caption = ultimo
End Sub
in pratica, label1.caption dovrebbe essere uguale a text1.text, ma non c'é
verso...
qualcuno sa dirmi dove é che faccio l'errore?
un grazie anticipato a tutti, se fossi una ragazza vi darei anche un bacino,
ma ve lo risparmio
--
Fabio Ruini
(
fabi...@libero.it
)
"Non si può descrivere la passione, la si
può soltanto vivere" (Enzo Ferrari)

qualcuno sa dirmi dove é che faccio l'errore?
Eheh, hai letto bene il tuo listato?
Rivediamolo assieme:
Private Sub Command1_Click()
    ' innanzi tutto mettiamo un po' d'ordine qui.
    ' eliminiamo i variant dichiarandogli un tipo
   Dim a As Integer, op As Integer , temp As Integer
   Dim primo As String, s As String, ultimo As String
    'mettiamo che Text1.Text = "ciao"
   primo = Text1.Text ' primo = "c" (chr$(99))
   a = Asc(primo)     ' a = 99
   Randomize
   op = Int(Rnd * 28) ' mettiamo op = 10
   a = a + op         ' a = 109 (asc("m"))
   ' fino a qua credo che sia tutto ok
   temp = a           ' temp = 109
   temp = temp - op   ' temp = 99
   ultimo = Chr(temp) ' ultimo = "c"
   ultimo = Val(ultimo) ' ultimo = "0" <<<--- nota che ultimo viene
convertito in numero!!!
                        ' questa riga non ci vuole! (e impara a usare le
funzioni
                        ' stringa con $ in fondo: es. Chr$()
   Label1.Caption = ultimo
End Sub
Ciao

                         ' stringa con $ in fondo: es. Chr$()
Ritengo che l'uso più corretto della funzione sia Chr() per almeno tre
motivi:
1 Non è necessario per il compilatore VB5 e VB6
2 Microsoft consiglia di utilizzare la Chr() (non ho verificato come viene
convertito da 
VB.NET
 ma viene sempre indicata la funzione senza $)
3 La sintassi è simile ad altri linguggi.
Fausto

 3 La sintassi è simile ad altri linguggi.
Si', ma non e' detto che gli altri linguaggi si comportino allo stesso modo.
A questo punto vorrei fare una precisazione, che (ad essere onesto) non so
se valga anche per Chr().
In basic le funzioni stringa con il $ non sono uguali a quelle senza.
Quelle con il $ ricevono (ecco perche' escluderei Chr) stringhe e
restituiscono stringhe.
Quelle senza ricevono e restituiscono variant contenenti stringhe.
Va da se' che se, per esempio, la velocita' di un ciclo fosse importante
quel $ farebbe la differenza.
Ciao
Aldo

3 La sintassi è simile ad altri linguggi.
Ma il funzionamento è molto più simile con quello delle funzioni "$"
Neanche a me piacciono i caratteri di definizione di tipo, ma qui è
obbligatorio, a rischio di un codice più "brutto" da vedere.
Ciao

2 Microsoft consiglia di utilizzare la Chr() (non ho verificato come viene
 Mah, io non trovato nessun consiglio da parte
   della MS, per la quale in MSDN sono considerate
   perfettamente identiche.
 Il motivo della doppiezza (se vogliamo chiamarla così), sta,
   secondo me, nella compatibilità, verso il basso, col
   precedente VB e col Basic 80
ciao
Noseda


   precedente VB e col Basic 80
No, c'è una bella differenza tra i due sistemi.
Ciao