Autore Topic: [RISOLTO] Errore con VAL(stringa) e CInt(stringa)  (Letto 1426 volte)

Offline aulin

  • Gambero
  • **
  • Post: 83
    • Mostra profilo
[RISOLTO] Errore con VAL(stringa) e CInt(stringa)
« il: 28 Agosto 2010, 20:34:33 »
Spesso e volentieri mi ritornavano degli errori utilizzando le funzioni VAL(stringa) e CINT(stringa). Ovviamente i valori di stringa sono numerici tipo "123". Ho cercato di scoprire la causa e ho visto che gambas va in errore quando nella stringa ci sono caratteri particolari. Ho allora fatto questa funzioncina che sostituisce il valore "0" al posto dei caratteri strani. E' corretto così o c'è qualcosa che mi sfugge ? Utilizzo Gambas 3 e Ubuntu 10.4
Codice: [Seleziona]
Public Sub ControlloSTR()
Dim i As Integer
For i = 0 To Len(sStringa)
  If Asc(sStringa, i) > 57 Or Asc(sStringa, i) < 48 Then
     Mid$(sStringa, i, 1) = 0
  Endif
Next  
End
« Ultima modifica: 29 Agosto 2010, 12:49:20 da aulin »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Errore con VAL(stringa) e CInt(stringa)
« Risposta #1 il: 29 Agosto 2010, 01:04:07 »
Spesso e volentieri mi ritornavano degli errori utilizzando le funzioni VAL(stringa) e CINT(stringa). Ovviamente i valori di stringa sono numerici tipo "123". Ho cercato di scoprire la causa e ho visto che gambas va in errore quando nella stringa ci sono caratteri particolari. Ho allora fatto questa funzioncina che sostituisce il valore "0" al posto dei caratteri strani. E' corretto così o c'è qualcosa che mi sfugge ? Utilizzo Gambas 3 e Ubuntu 10.4
Codice: [Seleziona]
Public Sub ControlloSTR()
Dim i As Integer
For i = 0 To Len(sStringa)
  If Asc(sStringa, i) > 57 Or Asc(sStringa, i) < 48 Then
     Mid$(sStringa, i, 1) = 0
  Endif
Next 
End

Non puoi semplicemente eliminare il carattere indesiderato? inserire 0 significa falsare il numero....se io scrivo "456a" la tua funzione fa diventare il mio numero "4560" quando invece dovrebbe essere, a rigor di logica, "456"

Codice: gambas [Seleziona]
PUBLIC FUNCTION ControlloSTR(Stringa AS String) AS String

  DIM i AS Integer
  DIM chart AS String

  chart = ""

  FOR i TO Len(Stringa)
    IF IsDigit(Mid$(sStringa, i, 1)) THEN chart &= Mid$(sStringa, i, 1)
  NEXT

  RETURN chart

END

Offline aulin

  • Gambero
  • **
  • Post: 83
    • Mostra profilo
Re: Errore con VAL(stringa) e CInt(stringa)
« Risposta #2 il: 29 Agosto 2010, 12:48:18 »
Indubbiamente la tua soluzione è molto + elegante, e credo proprio che la adotterò. Comunque il problema a cui tu facevi riferimento non mi si è mai posto perchè stranamente i caratteri strani stavano sempre davanti. E ciò si verificava porincipalmente nel caso di importazione dati.
E grazie del suggerimento.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Errore con VAL(stringa) e CInt(stringa)
« Risposta #3 il: 29 Agosto 2010, 22:40:00 »
Indubbiamente la tua soluzione è molto + elegante, e credo proprio che la adotterò. Comunque il problema a cui tu facevi riferimento non mi si è mai posto perchè stranamente i caratteri strani stavano sempre davanti. E ciò si verificava porincipalmente nel caso di importazione dati.
E grazie del suggerimento.


Tieni presente che io baso le risposte su quello che leggo poichè sono dall'altra parte di una serie di cavi... ;)..non posso sapere dove e come appariranno i caratteri speciali e perciò baso la mia analisi su deduzioni che farei se il software lo stessi sviluppando io.

Se la mia funzione ti piace possiamo modificare una sola riga in modo da ottenere direttamente un integer dalla funzione. Chiedi pure nel caso.  :)