Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 7 su 7

Rimozione caratteri da una stringa

  1. #1
    Jocman non è in linea Scolaretto
    Ciao a tutti.
    Sicuramente mi sto incasinando per nulla, ma.....

    A volte mi passano delle stringhe che contengono dei caratteri speciali, che ovviamente vanno a rompere le scatole in tutti i modi possibili e immaginabili.

    Per eliminarli, basterebbe un semplice Replace.
    Questo mi funziona se usano un solo tipo di carattere speciale (anche ripetuto).
    Ma per sicurezza, ho voluto provare ad eliminare diversi tipi di carattere che ho visto inseriti nelle stringhe, pensando che, nella peggiore delle ipotesi, il fantasioso di turno possa inserire un mix di esse.

    Quindi ho fatto una prova in questo modo:

    Nota: uso String in quanto il numero può essere anche alfanumerico

    Dim Numero As String
    
    Numero = Me.txtNumero
    
    Debug.Print Numero
    
    If InStr(Numero, "/") > 0 Then
        Numero = Replace(Me.txtNumero, "/", "")
    End If
    
    Debug.Print Numero
    
    If InStr(Numero, "\") > 0 Then
        Numero = Replace(Me.txtNumero, "\", "")
    End If
    
    Debug.Print Numero
    
    If InStr(Numero, "-") > 0 Then
        Numero = Replace(Me.txtNumero, "-", "")
    End If
    
    Debug.Print Numero
    
    If InStr(Numero, "_") > 0 Then
        Numero = Replace(Me.txtNumero, "_", "")
    End If
    
    Debug.Print Numero
    
    e come numero ho inserito 123/456_789\123-456

    eseguendo riga per riga, la via crucis si ferma a tutte le stazioni (e me lo aspetto perchè ci ho messo tutti i caratteri)

    Ma a ogni debug Numero, mi ripropone il numero iniziale (con tutti i caratteri) meno quello tolto nella riga specifica.

    Eppure volta per volta Numero non dovrebbe essere quello aggiornato???
    ℹ️ Leggi di più su Jocman ...

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Ovvio... non lo aggiorni mai.

    Il Codice più adatto è questo:
    Numero = Me.txtNumero
    Debug.Print Numero
    
    Numero = Replace(Numero , "/", "")
    Debug.Print Numero
    
    Numero = Replace(Numero , "\", "")
    Debug.Print Numero
     
    Numero = Replace(Numero , "-", "") 
    Debug.Print Numero
    
    Numero = Replace(Numero , "_", "") 
    Debug.Print Numero
    
    Se poi vuoi scrivi una Stringa con i caratteri speciali e la cicli..
    Const cSpecial  As String="/\|-_"
    
    Function ReplaceALL(sIn As string) As String
        Dim i As Integer
        For i=1 to Len(cSpecial)
             Replace(Numero, Mid$(cSpecial,i,1),vbNullstring)
        Next
    End Function
    
    ℹ️ Leggi di più su @Alex ...

  3. #3
    Jocman non è in linea Scolaretto
    @Alex

    Ovvio... non lo aggiorni mai.
    Ma nel momento in cui la condizione if è vera, in quel momento non viene aggiornato?
    ℹ️ Leggi di più su Jocman ...

  4. #4
    Jocman non è in linea Scolaretto
    Mi rispondo da solo.....
    Perchè ogni volta non leggo il valore rimpiazzato ma Me.txtNumero, che quindi è sempre quello di partenza.....

    E di conseguenza Andrea è un pir....
    ℹ️ Leggi di più su Jocman ...

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Esattamente...
    (non la questione del pir... ma la spiegazione)
    ℹ️ Leggi di più su @Alex ...

  6. #6
    Jocman non è in linea Scolaretto
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Esattamente...
    (non la questione del pir... ma la spiegazione)
    anche quella, anche quella, fidati...
    ℹ️ Leggi di più su Jocman ...

  7. #7
    Sgrubak non è in linea Scribacchino
    Oppure, giusto per proporre un approccio diverso non vincolato ad una costante:
    Function ReplaceALL(sIn As String) As String
    Dim i As Integer
    Dim res As String
    Dim asciiChar As Integer
    
    For i = 1 To Len(sIn)
        asciiChar = Asc(Mid(sIn, i, 1))
        Select Case asciiChar
            Case 48 To 57
                res = res & Chr(asciiChar)
            Case 65 To 90
                res = res & Chr(asciiChar)
            Case 97 To 122
                res = res & Chr(asciiChar)
        End Select
    Next i
    
    ReplaceALL = res
    
    End Function
    
    Ovviamente funziona solo se si cerca di ottenere un numero intero come risultato, altrimenti è sufficiente aggiungere i Case 44 e 46. Nel caso il numero sia esadecimale e non in Base36 basta ridurre negli ultimi due Case i limite superiore a 70 e 102.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Caratteri Speciali in una stringa
    Da ZioRock nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 24-05-2013, 15:10
  2. sostituire caratteri in una stringa
    Da gianluca76 nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 21-01-2009, 17:42
  3. Scorrere i caratteri di una stringa
    Da Geaalfa nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 03-06-2005, 15:09
  4. Rimpiazzare caratteri in una stringa
    Da mtaII nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 06-05-2005, 11:11
  5. caratteri in una stringa
    Da simonemtb nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 14-12-2004, 17:30