Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    165

    [vb6]sostituire caratteri ascii

    Buongiorno a tutti,

    Innanzi tutto grazie per l attenzione che mi darete,

    Avrei questo problema.

    Devo sostituire tutte le lettere ACCENTATE(minuscole e maiuscole) all'interno di una stringa.
    Per questo ho pensato di fare un REPLACE, cercando all'interno della stringa i vari codici ASCII.

    Il PROBLEMA E' CHE NON MI TROVA UN TUBO E NON SO COME FARE A SOSTITUIRE QUESTI CARATTERI ASCII.

    Il codice che uso è questo:


    codice:
    Sub char_spec()
        Dim pos_spec As Integer
        pos_spec = 0
        
        
        pos_spec = InStr(1, Desc, Chr$(138))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(138), "e")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(144))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(144), "E")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(149))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(149), "o")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(151))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(151), "u")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(160))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(160), "a")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(162))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(162), "o")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(163))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(163), "u")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(181))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(181), "A")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(183))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(183), "A")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(212))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(212), "E")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(214))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(214), "I")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(222))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(222), "I")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(224))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(224), "O")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(227))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(227), "O")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(235))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(235), "U")
                pos_spec = 0
            End If
        pos_spec = InStr(1, Desc, Chr$(233))
            If pos_spec <> 0 Then
                Desc = Replace(Desc, Chr(233), "U")
                pos_spec = 0
            End If
    End Sub

    Mettiamo che la variabile DESC CONTENGA:

    "AMAZONE GUARANÀ pacc. da 10 "

    vorrei sostituire la A(accentata) con A


    che cosa ho sbagliato????

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Non mi risulta che il codice ASCII della E maiuscola accentata sia 212, né che 181 o 183 corrispondano alla A maiuscola accentata. Dove hai trovato queste corrispondenze?

    A parte questo, per sostituire un carattere in una stringa non c'è bisogno di verificare prima se il carattere da sostituire c'è. Cioè non hai bisogno della funzione Instr né della variabile pos_spec.

  3. #3
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    Tutta quella serie di If non serve praticamente a nulla, perché se non è presente almeno un'occorrenza del carattere che intendi sostituire, la Replace non cambia assolutamente niente.
    Riguardo i codici ASCII che hai utilizzato, ha ragione Grumpy, non sono quelli che ti aspetti.
    Questo perchè VB usa una tabella dei codici ASCII estesa diversa da quella del tuo sistema, quindi le lettere accentate possono essere ottenute solo con la combinazione da tastiera ALT + Numero.

    Per quello che devi fare, comunque, prova così:

    codice:
    Sub char_spec()
        Desc = Replace(Desc, "è", "e")
        Desc = Replace(Desc, "É", "E")
        Desc = Replace(Desc, "ò", "o")
        Desc = Replace(Desc, "ù", "u")
        Desc = Replace(Desc, "á", "a")
        Desc = Replace(Desc, "ó", "o")
        Desc = Replace(Desc, "ú", "u")
        Desc = Replace(Desc, "Á", "A")
        Desc = Replace(Desc, "À", "A")
        Desc = Replace(Desc, "È", "E")
        Desc = Replace(Desc, "Í", "I")
        Desc = Replace(Desc, "Ì", "I")
        Desc = Replace(Desc, "Ó", "O")
        Desc = Replace(Desc, "Ò", "O")
        Desc = Replace(Desc, "Ù", "U")
        Desc = Replace(Desc, "Ú", "U")
    End Sub
    Boolean

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    165
    grazie

    è vero avete ragione..quelle if non servono a niente

    ho risolto cambiando tabella caratteri ascii...
    ora mi sono fatto un programmino che mi restituisce i valori ascii di ogni lettera


  5. #5
    Se vuoi ottimizzare ancora di più potresti (ma è solo una proposta di esercizio) creare una matrice bidimensionale di caratteri e sostituire le occorrenze nella stringa originale con gli elementi della matrice.

    Voglio sottolineare tuttavia la correttezza e la semplicità del codice suggerito da Boolean.


    Ciao

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.