Página 1 de 1

Ordem de nomes acentuados

Enviado: 17 Fev 2008 09:49
por Hasse
Bom dia meus colegas.

Estou com problemas na Ordenação/Indexação de nomes acentuados.
Mesmo usando:

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
HB_LANGSELECT( 'PT' )
HB_SETCODEPAGE( "PT850" )

Vejamos como fica a ordem:

Edgar
Edine
Edinho
Eduardo
Edward
Everaldo
Ezequias
Ezequiel
Édine -----<<<<<< fora de ordem.

Temos solução para isto ?

Estou usando a versão 1.1.0 do xHarbour, atualizada e recompilada ontem, dia 16-02-2008, via CVS.

Enviado: 17 Fev 2008 10:25
por Luciano Bonfim
sobre acentuaçäo eu até hoje näo consigo entender direito, nas telas do meu sistema gráfico (hwgui e gtwvw) aparecem normalmente.

quando copio e colo textos acentuados do windows para meu sistema em xharbour 1.0.0 (as tela de cadastro ainda säo modo console dentro de uma janela em GTWVW) os acentos aparecem errados.

uso assim:

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850


HB_LANGSELECT( 'PT' )
HB_SETCODEPAGE( "PT850" )



Realmente näo entendo se alguem puder me ajudar eu agradeceria

Muito Obrigado

Enviado: 17 Fev 2008 12:31
por asimoes
Você pode usar a função no campo que você deseja retirar os acentos:

Código: Selecionar todos



EX: INDEX ON RetiraAcentos(Campo) TAG TESTE TO INDICE

FUNCTION MAIN
CLS

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
HB_SETCODEPAGE( "PT850" )

? RetiraAcentos("áãàâäéèëíìïóõòöúùüçÇ")

RETURN NIL


FUNCTION RETIRAACENTOS (cPalavra)
LOCAL i:=0,;
      cAcento:= '',;
      cRetiraAcento:= ''
    FOR I = 1 To Len(cPalavra)
        cAcento:=SUBST(cPalavra, I, 1)
        DO CASE
        CASE cAcento $ "ÁÃÂÀÄ"
           cAcento = "A"
        CASE cAcento $ "

Enviado: 17 Fev 2008 19:03
por Hasse
Caro Asimoes. Obrigado pela dica.

Indexação:
Eu já havia pensado nesta solução, porém eu pensei que em uma solução mais "canônica", como diria o nosso mestre Maligno.

Localização:
No caso da localização de nomes (registros) não estou encontrando dificuldades.

Enviado: 17 Fev 2008 21:46
por Hasse
Eu tinha um preconceito de que este procedimento iria reduzir muito a velocidade de indexação.

Entretanto, fui agradavelmente surpreeendido, pois a olho nu nem se percebe qualquer diferença. Não cronometrei os resultados.

Asimoes, os meus agradecimentos.

Enviado: 18 Fev 2008 10:46
por asimoes
Hasse,

Antes de postar eu tinha testado a indexação em uma tabela de +- 300 mil registros e foi imperceptível o tempo.
Qualquer problema prende o grito, como diria o nosso amigo SYGECOM (Leonardo)

[]´s :)Pos

Enviado: 18 Fev 2008 12:00
por sygecom
Srs. não fiz o teste postado, mas acho que com "HB_AnsiToOem()" resolveria o problema...

Enviado: 19 Fev 2008 18:18
por Hasse
Taí Manos, a solução "canônica" como diria o Maligno.

Funcionou perfeito.

Valeu.

Enviado: 19 Fev 2008 19:14
por Maligno
Converter ANSI pra OEM apenas troca a acentuação de um código pra outro. Se isso já resolve o problema, tanto melhor. Mas remover os acentos é também uma técnica válida, que talvez seja até mais rápida.


Curiosidade: o termo "canônico" é amplamente utilizado na comunidade de programadores no mundo todo, e diz respeito a algo que é aceito pela maioria como o mais certo ou mais apropriado. :)