Ordem de nomes acentuados

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

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Ordem de nomes acentuados

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem 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
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem 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 $ "
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Srs. não fiz o teste postado, mas acho que com "HB_AnsiToOem()" resolveria o problema...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Mensagem por Hasse »

Taí Manos, a solução "canônica" como diria o Maligno.

Funcionou perfeito.

Valeu.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder