Autore Topic: Stringhe e numeri  (Letto 2800 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Stringhe e numeri
« il: 11 Settembre 2009, 17:57:40 »
è possibile trasformare una stringa in un numero e trattarla come tale?
se ad esempio ho una stringa composta da numeri ma che tratto come stringa e poi vorrei ritrattarla come numero è possibile?
Non so se mi sono spiegato bene.....
Ciao!

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Stringhe e numeri
« Risposta #1 il: 11 Settembre 2009, 18:01:02 »
Puoi usare Val() e Str()

La prima accetta una stringa e la trasforma in un numero...
Ad esempio

Codice: [Seleziona]
Val("589")


restiuirà 589 come numero

mentre Str accetta un variant e restituisce una stringa. Ad esempio

Codice: [Seleziona]
Str(1236)


restiuisce una stringa del tipo "1236"

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #2 il: 11 Settembre 2009, 20:07:11 »
oltre a val(stringa) puoi usare anche  cint(stringa) per convertire una stringa in numero,

il passo inverso invece lo puoi quasi sempre omettere infatti se in una variabile inserisci un numero questo verrà trattato come una stringa in automatico.


inoltre sulla 2.15.2 se in una variabile integer memorizzi una stringa contenente numeri questa viene convertita automaticamente, cosa non valida sulle versioni precedenti, quindi per sicurezza conviene sempre effettuare una conversione nel formato corretto

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #3 il: 11 Settembre 2009, 22:04:43 »
Grazie mille! Questa operazione di conversione si chiama casting, vero?
Comunque ho un problemino, nel senso che utilizzavo una stringa numero già prima (in un'altra parte del mio programmino a cui sto lavorando) e quando la trattavo come numero (senza utilizzare la conversione) tutto filava liscio e riuscivo a fare anche operazioni aritmetiche. Ora invece mi restituisce questo errore:
Codice: [Seleziona]
Type mismatch: wanted string, got float instead

vi informo che uso le gtk, anche se onestamente non credo che derivi da ciò questo messaggio.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #4 il: 11 Settembre 2009, 22:05:53 »
dovresti inserire uno stralcio di codice

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #5 il: 11 Settembre 2009, 22:11:53 »
Hai ragione, scusami, ecco:
Codice: [Seleziona]
 
PRIVATE hprocess AS Process
PRIVATE information AS String
PRIVATE durata AS String 'Stringa che indica la durata del file audio/video in secondi
PRIVATE tempo AS String 'Indica il tempo totale del video in minuti

PUBLIC SUB ToolButton8_Click()
'TASTO PLAY******************************************************
'Riproduce un file audio/video il cui indirizzo è nella ComboBox1
 DIM minuti AS String 'Visualizza i minuti totali e la scritta min.
 DIM secondi AS String 'Visualizza i secondi totali e la scritta min.
 DIM i AS Integer 'contatore
 DIM lettere AS String 'Variabile per l'estrazione delle prime 4 lettere
 lettere = (Left$(ComboBox1.Text, 4))
 SELECT CASE lettere
        CASE "/hom"
             SHELL "mplayer -nosound -vo null -ss 24:00:00 -really-quiet -identify " & ComboBox1.Text & " 2>&1 | grep ID_LENGTH | cut -f2 -d=" TO durata
             tempo = durata / 60
             i = InStr(tempo, ".")
             minuti = Left$(tempo, (i - 1))
             secondi = Left$(Left$(tempo, (i + 2))) - Left$(minuti * 60, 2)
             Label5.Text = minuti & "." & secondi & " " & "min."
             hprocess = EXEC ["mplayer", "-wid", Embedder1.Handle, ComboBox1.Text]
             'Timer per il trascorrere del tempo e dello slider
             Timer1.Enabled = TRUE
             Embedder1.Mouse = TRUE
        CASE "/dev"
             SHELL "mplayer -nosound -vo null -ss 24:00:00 -really-quiet -identify " & ComboBox1.Text & " 2>&1 | grep ID_LENGTH | cut -f2 -d=" TO durata
             tempo = durata / 60
             i = InStr(tempo, ".")
             minuti = Left$(tempo, (i + 2)) & " " & "min."        
             Label5.Text = minuti
             hprocess = EXEC ["mplayer dvd://1", " -dvd-device ", ComboBox1.Text, " -wid", Embedder1.Handle]
             'Timer per il trascorrere del tempo e dello slider
             Timer1.Enabled = TRUE
             Embedder1.Mouse = TRUE
            ' CATCH 'In caso di operazione lettura dvd fallita
            '      Message.Error("Nessun dvd inserito!")
        CASE ELSE
             Message.Error("This is impossible")
 END SELECT                      
END

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #6 il: 12 Settembre 2009, 12:40:49 »
non hai indicato dove ti da errore ma credo sia qui:

Codice: [Seleziona]

 tempo = durata / 60
i = InStr(tempo, ".")


prova cosi:


Codice: [Seleziona]

 tempo = (durata / 60 )
i = InStr(tempo, ".")


oppure

Codice: [Seleziona]

 tempo =cstring(durata / 60 )
i = InStr(tempo, ".")

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Stringhe e numeri
« Risposta #7 il: 12 Settembre 2009, 12:50:55 »
Scusa ma quando fai durata/60 non stai dividendo una stringa per un intero?

Forse dovrebbe essere

tempo = (val(durata)/60)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #8 il: 12 Settembre 2009, 12:55:35 »
è vero ho dimenticato di dire dove sta l'errore.
ecco:
Codice: [Seleziona]
secondi = Left$(Left$(tempo, (i + 2))) - Left$((minuti * 60), 2)

Ho anche aggiunto le parentesi ma niente.
Ho provato a mettere val ma mi da sempre lo stesso errore...

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Stringhe e numeri
« Risposta #9 il: 12 Settembre 2009, 12:58:59 »
Prova con


secondi = Left$(str(val(Left$(tempo, (i + 2)))) - val(Left$((minuti * 60), 2)))

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #10 il: 12 Settembre 2009, 13:01:35 »
Codice: [Seleziona]
secondi = Left$(str(val(Left$(tempo, (i + 2)))) - val(Left$((minuti * 60), 2)))

niente non va.....

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #11 il: 12 Settembre 2009, 13:13:51 »
forse ci sono, però ho bisogno ancora di un vostro aiutino, mi direste come faccio a troncare ed approssimare un numero per eccesso o per difetto?

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Stringhe e numeri
« Risposta #12 il: 12 Settembre 2009, 14:42:28 »
Intendi che vuoi solo la parte intera o che vuoi un numero decimale con x numeri dopo la virgola?

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 417
    • Mostra profilo
Re: Stringhe e numeri
« Risposta #13 il: 12 Settembre 2009, 18:39:43 »
Citazione
Intendi che vuoi solo la parte intera o che vuoi un numero decimale con x numeri dopo la virgola?

vorrei un numero decimale con x numeri dopo la virgola ;-)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Stringhe e numeri
« Risposta #14 il: 12 Settembre 2009, 19:08:50 »
Puoi trasformare il numero in stringa e usare format: http://gambasdoc.org/help/lang/format

E' la prima cosa che mi viene in mente.