Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    36

    [VB6] - Problema con il format di stringhe

    Salve ragazzi, ciao moderatori.

    Ho un problema su questo codice:


    codice:
       Cs(2) = "39972" : Cs(2) = Format(Cs(2), "00000")             'sempre a 5 cifre
       Ncif = String(Len(Cs(2)), "0")               'costruisce una stringa per il format successivo
       appert = LCase(Hex(InvString(Cs(2))))
       InvTempoHex = Format(appert, "00000") 'Hex dell'inverso della stringa

    la funzione InvertString e:

    codice:
    Public Function InvString(c As String) As String
      InvString = StrReverse(c)
    End Function


    il risultato di dovrebbe essere:
    InvTempoHex = "6d59"

    e invece è:
    InvTempoHex = "6000000000000000000000000000000000000000000000000 00000000000
    "


    se scrivo:
    codice:
       Cs(2) = "39972" : Cs(2) = Format(Cs(2), "00000")             'sempre a 5 cifre
       Ncif = String(Len(Cs(2)), "0")               'costruisce una stringa per il format successivo
       appert = LCase(Hex(InvString(Cs(2))))
       InvTempoHex = appert     'Hex dell'inverso della stringa
    tutto funziona correttamente


    mi date una mano a capire dove sbaglio

    grazieee

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    36
    nella prima routine indicata mancava Ncif nel format.
    E' questa la routine incrimata, ma non funziona lo stesso.

    codice:
      Ncif = String(Len(Cs(2)), "0") 'costruisce una stringa per il successivo 'Format'
      appert = LCase(Hex(InvString(Cs(2))))
      InvTempoHex = Format(appert, Ncif )

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il primo parametro della Format deve essere un valore espresso nel sistema decimale (non esadecimale).

    Se nella stringa c'e' 6d59 viene interpretato come 6 x 10 elevato a 59 (formato scientifico).

    Comunque, a parte il fatto che la Format non fa quello che credi, cosa vorresti fare? Perche', molto probabilmente, il metodo e' un altro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Se impari a fare il debug del tuo codice lo scopri da solo e prima.
    Non serve un forum per 'sti problemi...

    Tra l'altro non capisco perchè esegui la seconda istruzione:
    codice:
    Cs(2) = "39972" : Cs(2) = Format(Cs(2), "00000")
    che, almeno in questo caso, non serve assolutamente a nulla dato che il valore non cambia.

    Stessa cosa vale anche per questa istruzione (che è quella che ti complica la vita)
    codice:
    InvTempoHex = Format(appert, Ncif)
    dato che appert contiene già quello che ti serve.

    Ciao

    P.S. Imparare a fare il debug del codice è più importante ancora che imparare a programmare.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    36
    ragazzi avete tutte le ragioni di sto mondo...ma se ci si incarta...

    Rispondo:

    La variabile Cs(2) è di tipo string e viene impostata all'inizio della sub con:

    codice:
    Cs(2) = Format(Str(Int(Timer)), "00000")
    e il format lo uso per riportare a 5 le cifre visualizzate.

    Comunque il problema era che impostavo altri due format dopo l'assegnazione di Cs(2) iniziale, per cui è come se sostituisse due volte gli zeri quando non c'erano...o una cosa simile (!).
    Ho eliminato i due format successivi.
    Il problema però era capire perche impostando nella seconda assegnazione Cs(2) = "39972" si verificava la visualizzazione errata, mentre con Cs(2) = "39971" no.

    Cmq, grazie perche siete sempre qua.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da vtr2009
    Il problema però era capire perche impostando nella seconda assegnazione Cs(2) = "39972" si verificava la visualizzazione errata, mentre con Cs(2) = "39971" no.
    Non hai letto bene la mia spiegazione ...

    Con 39972, dopo tutte le trasformazioni, ottieni un valore esadecimale

    6D59

    mentre con 39971 ottieni

    4649

    Il primo (per la presenza della D) viene interpretato dalla Format come se fosse in "notazione scientifica" (6 D 59), il secondo no ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    36
    ...oregon...
    Ora ho capito!

    grazieee.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.