1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[VB6] dúvida de como remover acentos

Discussão em 'Programação' iniciada por lightMC, 24 de Junho de 2007. (Respostas: 10; Visualizações: 3746)

  1. lightMC

    lightMC Power Member

    bem tenho aqui um problema.
    O programa vai ler uma string que, por exemplo contém a palavra "português" mas antes de a ler tenho de a converter de modo que remova os acentos ou seja, quero que a string fique "portugues".
    Isto é possível, sem recorrer a métodos complicados?
     
  2. boas!!
    eu costumo utilizar um ciclo "for" q testa todos os carateres de uma string.
    Dps a maneira mais rápida seria, a meu ver, excluir os numeros e letras tipo,

    test=mid(i,1)
    if Asc(test)>35 and Asc(test)<122 then
    String=String & test
    else
    'dps identificava o carater (não numero e não letra sem acento) e aí recorreria a um case tipo
    Select Case asc(test)
    225 test="a" 'Asc (teste)= 225 é o carater "á"
    String=String & test
    ...
    end if

    Espero ter ajudado
     
  3. lightMC

    lightMC Power Member

    bem, percebi a tua ideia mas já não foste a tempo. eu usei o mesmo método mas sem interferir com a tabela Ascii. obrigado na mesma ! (ate pk não conhecia o prefixo Asc ) ;)
    ja agora deixo aqui para verem como ficou:
    Código:
    Public Sub retiraCaracteresEspeciais(objecto As Object)
    finalWord = ""
    maCat = Len(objecto.Caption)
    
    For aa = 1 To maCat
    cat = Mid(objecto.Caption, aa, 1)
    
    Select Case cat
    Case "á"
    letra = "a"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "à"
    letra = "a"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "Á"
    letra = "A"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "À"
    letra = "A"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ã"
    letra = "a"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "â"
    letra = "a"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ç"
    letra = "c"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "é"
    letra = "e"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "è"
    letra = "e"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ê"
    letra = "e"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "É"
    letra = "E"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "È"
    letra = "E"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "Ê"
    letra = "E"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "í"
    letra = "i"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ì"
    letra = "i"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "Í"
    letra = "I"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "Ì"
    letra = "I"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ó"
    letra = "o"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ò"
    letra = "o"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "Ó"
    letra = "O"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "Ò"
    letra = "O"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "õ"
    letra = "o"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ô"
    letra = "o"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ú"
    letra = "u"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "ù"
    letra = "u"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "Ú"
    letra = "U"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case "Ù"
    letra = "U"
    finalWord = Mid(objecto.Caption, 1, aa - 1) & letra & Mid(objecto.Caption, aa + 1, maCat)
    Case Else
    If finalWord = "" And aa = maCat Then
    finalWord = objecto.Caption
    Exit Sub
    End If
    End Select
    
    Next aa
    End Sub
    é só redundancia de código xD
     
    Última edição: 25 de Junho de 2007
  4. Boas!!
    É isso, mas devias evitar entrar no case caso sejam letras normais, o que a meu ver, a maior parte das vezes. Digo isto pela rapidez de execução.

    Abraço
     
    Última edição: 26 de Junho de 2007
  5. CheckerPT

    CheckerPT Power Member

    e tambem podias usar o operador OR para economizar linhas dado que o resultado é comum em muitos dos casos por exemplo: "â", "ä", "à", "å" e "á" é sempre "a"
    O Codigo fica mais simples, mais pequeno e mais rapido!
     
  6. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Esse código é tão repetitivo que me custa a crer que não haja uma forma melhor de fazer as coisas.
    Vou ver se hoje pego nisso e tento optimizar. Abomino código assim :x

    (não é por mal, é só a minha opinião pessoal. À primeira vista, até acho que esse é o melhor método, mas não consigo deixar de pensar que há-de haver uma forma ainda melhor)

    btw, algum indenting não fazia mal :x
     
    Última edição: 4 de Outubro de 2007
  7. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Só agora notei que o tópico é de Junho. Que mania de desenterrarem tópicos >_<
    De qualquer forma, como tive o trabalho de refazer, mostro na mesma, tal como fiz, e comentado:

    Código:
    Option Explicit
    
    Public Function retiraCaracteresEspeciais(strAFiltrar As String)
    
        Dim posASubstituir  As Integer
        Dim curPos          As Integer
        Dim curChar         As String
        Dim substituirDe    As String
        Dim substituirPara  As String
        Dim strFiltrada     As String
        
          substituirDe = "äáàãâÄÁÀéèêëËÉÈÊíìïÍÌÎÏóòôõöÓÒÔÕÖúùûüÚÙÛÜçÇ"
        substituirPara = "aaaaaAAAeeeeEEEEiiiIIIIoooooOOOOOuuuuUUUUcC"
        
        For curPos = 1 To Len(strAFiltrar) 'ciclo na string a filtrar...
            curChar = Mid(strAFiltrar, curPos, 1) 'pega em cada caracter da string
            posASubstituir = InStr(substituirDe, curChar) 'verifica se está na string de caracteres a substituir
            If posASubstituir Then  ' se estiver,
                strFiltrada = strFiltrada & Mid(substituirPara, posASubstituir, 1) 'entra na string filtrada o equivalente não-acentuado
            Else 'se não estiver
                strFiltrada = strFiltrada & curChar 'entra na string filtrada tal como está
            End If
        Next curPos
        
        retiraCaracteresEspeciais = strFiltrada
    End Function
    
    Private Sub Form_Load()
        MsgBox retiraCaracteresEspeciais("pórtÙguÊs")
    End Sub
    
    Apesar de provavelmente já não ajudar o lightMC, espero que mais tarde ajude outra pessoa =\
    Já agora, acrescentei outros caracteres, especialmente os que usam o trema/"umlaut" (ï,Ö...).
     
    Última edição: 4 de Outubro de 2007
  8. lightMC

    lightMC Power Member

    Bem, fui ver os tópicos que criei e deparei-me com este por mero acaso.

    AngelofWisdom obrigadão! Vou dar uso ao código :D
    Desconhecia totalmente o intStr(). vá lá, ja aprendi mais qualquer coisa :)

    (agora mereces estar nos agradecimentos do MRP :p)
     
  9. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    De nada :) ainda bem que te ajudou, tanto tempo depois!

    Agradecimentos do MRP? Mini Radio Player? Só dei ajuda numa porção do código... acho que não é caso para tanto!
     
  10. lightMC

    lightMC Power Member

    Não importa... ja estás lá. Se não quiseres eu retiro :P
     
  11. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Continuo a achar que não é caso para tanto. Para eu merecer créditos, quaisquer que sejam, não será mesmo por algo tão pequeno :P

    Anyway, tens PM ;)
     

Partilhar esta Página