caracteres acentuados

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

caracteres acentuados

Mensagem 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"?
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

caracteres acentuados

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

caracteres acentuados

Mensagem 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

/*------------------------------------------------------------------------*/
Imagem

Rca Sistemas - Itaocara - RJ
Responder