Página 1 de 1

caracteres acentuados

Enviado: 24 Nov 2014 06:32
por clodoaldomonteiro
Volto aqui novamente para pedir a seguinte ajuda:
É possivel fazer busca em um dbf com caracteres acentuados, em que o sistema entenda que a letra "É" igual a "E"?

caracteres acentuados

Enviado: 24 Nov 2014 09:41
por Jairo Maia
Olá Clodoaldo,

Usei estas dicas (não se preocupe com o nome dos tópicos, servem para todas situações): indice com harbour/minigui

Aqui a função RemoverAcentos: Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

caracteres acentuados

Enviado: 25 Nov 2014 10:10
por sambomb
Eu criei essa função para remover a acentuação, ela mantém o mesmo número de caracteres sendo válida na indexação, talvez te ajude ;)

Código: Selecionar todos

****************************************************************************
function RemAce(cAux, lOem, lUpper)
****************************************************************************
*
* Remove acentuação
* Parametros: cAux, lOem, lUpper
* Retorno: cResult
*
* Autor: Samir
* 30/7/2009 - 13:57:52
*
****************************************************************************

Local i := 0, cCharA := "", cCharS := "", nPos := 0

local cListaAAnsi := 'ãâáàéèêíìîóòõôúùûçÃÂÁÀÉÈÊÍÌÎÓÒÕÔÚÙÛÇ'
local cListaSAnsi := 'aaaaeeeiiioooouuucAAAAEEEIIIOOOOUUUC'
local cListaAOem  := 'ƃ …ˆ‚Š¡Œ“䢕£—–‡¶Çµ·ÒÔÖÞ×àãåâéëê€'
local cListaSOem  := 'aaaaeeeiiioooouuucAAAAEEEIIIOOOOUUUC'

   If ValType(lUpper) = "U"
      lUpper := .F.
   end

   If ValType(lOem) = "U"
      lOem := .F.
   end

   //-- Desabilitar Oem ou Ansi de acordo com o parâmetro
   If !lOem
      cListaAOem := ""
      cListaSOem := ""
   else
      cListaAAnsi := ""
      cListaSAnsi := ""
   end

   //-- Analisar todos caracteres

   for i := 1 to Len(cAux)

      //-- Verificar se é um caracter acentuado ANSI

      nPos := At( SubStr(cAux , i , 1) , cListaAAnsi )

      if nPos > 0

         //-- Pegar o caracter equivalente não acentuado

         cCharA := SubStr(cListaAAnsi , nPos , 1)
         cCharS := SubStr(cListaSAnsi , nPos , 1)

         cAux := StrTran(cAux, cCharA, cCharS)

      end

      //-- Verificar se é um caracter acentuado OEM

      nPos := At( SubStr(cAux , i , 1) , cListaAOem )

      if nPos > 0

         //-- Pegar o caracter equivalente não acentuado

         cCharA := SubStr(cListaAOem , nPos , 1)
         cCharS := SubStr(cListaSOem , nPos , 1)

         cAux := StrTran(cAux, cCharA, cCharS)

      end

   end

   //-- Aplicar Upper de acordo com o parâmetro
   If lUpper
      cAux := Upper(cAux)
   end

Return cAux

/*------------------------------------------------------------------------*/