Como automatizar seleção de letras com e sem acento?
Eu criei um dicionário, mas devido ao fato de estar sempre colocando novas palavras, de vez em quando preciso reimprimir, mas para a cada vez eu tenho que reimprimir tudo, inclusive as letras que não foram modificadas, portanto resolvi imprimir letra por letra e aí surgiu um problema para o qual busco uma solução prática. Existem diversas palavras que começam com letras acentuadas, vamos a um exemplo: A, À e Á, só que se mando imprimir a letra A, as letras À e Á não são impressas pois os seus valores são diferentes do A = 65, Á = 181, e À = 183.
Pergunto se alguém sabe algum método para automatizar este processo, facilitando a minha vida, para que eu não tenha que colocar um monte de comparações dentro de IF´s para cada uma das letras que podem possuir acento.
Pergunto se alguém sabe algum método para automatizar este processo, facilitando a minha vida, para que eu não tenha que colocar um monte de comparações dentro de IF´s para cada uma das letras que podem possuir acento.
Edilcimar
Curtidas 0
Respostas
Weber
12/06/2008
Usando banco de dados FB 2 basta definir o collate como PT_BR.
GOSTEI 0
Edilcimar
12/06/2008
Isto que você falou eu já faço, porém não funciona, se eu mandar imprimir de A até Z ele não imprime os caracteres com valores superiores a 128, para poder imprimir de A até Z tenha que mandar imprimir de A até Ü, aí sim todas as letras são impressas em ordem alfabética, de forma correta. Se eu mandar imprimir apenas a letra A, as letras Á e À não são impressas, apesar de que as mesmas aparecem na tela.
GOSTEI 0
Carlosrm
12/06/2008
Edilcimar,
Dá para aproveitar essa função?
espero que ajude. carlosrm
Dá para aproveitar essa função?
function RemoveAcento(Str:String): String; Const ComAcento = ´àâêôûãõáéíóúçüÀÂÊÔÛÃÕÁÉÍÓÚÇÜ´; SemAcento = ´aaeouaoaeioucuAAEOUAOAEIOUCU´; Var x : Integer; Begin For x := 1 to Length(Str) do if Pos(Str[x],ComAcento)<>0 Then Str[x] := SemAcento[Pos(Str[x],ComAcento)]; Result := Str; end;
espero que ajude. carlosrm
GOSTEI 0
Edilcimar
12/06/2008
Carlosrm, eu não usei a função inteira, mas ela me forneceu uma idéia para fazer algo simples, grato.
Ficou assim:
Isto abaixo é feito de um loop
Ficou assim:
Isto abaixo é feito de um loop
With table1 do Begin First; While not eof do Begin Letra1 := Copy(FieldByName(´xyz´).AsString,1,1); Next; Letra2 := Copy(FieldByName(´xyz´).AsString,1,1); If ((Letra1 <> Letra2) and ((Pos(Letra1,SemAcento) <> 0) and (Pos(Letra2,ComAcento) <> 0))) OR ((Letra1 <> Letra2) and (Pos(Letra1,ComAcento) <> 0) and (Pos(Letra2,SemAcento) <> 0))) then Ejetar := False Else If (Letra1 <> Letra2) then Ejetar := True End; End;
GOSTEI 0
Carlosrm
12/06/2008
Edilcimar.
legal que tenha sido útil de alguma forma. Confesso que peguei essa função na internet e tenho usado para imprimir em matriciais.
Já aproveitei posts seus e de outros colegas do fórum para tirar duvidas e aprender. E a cada dia aproveito mais.
Como se dizia antigamente: ´Uma mão lava a outra e as duas lavam o rosto.´
legal que tenha sido útil de alguma forma. Confesso que peguei essa função na internet e tenho usado para imprimir em matriciais.
Já aproveitei posts seus e de outros colegas do fórum para tirar duvidas e aprender. E a cada dia aproveito mais.
Como se dizia antigamente: ´Uma mão lava a outra e as duas lavam o rosto.´
GOSTEI 0
Weber
12/06/2008
No select é para funcionar corretamente, pois usando o collate pt_br o where funciona correto e como você mesmo já diz o order by também funciona.
Where xyz like (´A¬´)
O resultado do select será tudo que inicia com A a Á á Ã ã...
Where xyz like (´A¬´)
O resultado do select será tudo que inicia com A a Á á Ã ã...
GOSTEI 0
Edilcimar
12/06/2008
Weber, o programa é um dicionário para uso próprio, tem poucas palavras, vou acrescentando mais a medida que vou aprendendo, é para uso em um único computador, portanto uso uma table. O programa me permite através de 2 edits dizer qual a letra inicial e qual a letra final a ser impressa, portanto uso um filtro, o qual apesar de ser um processo lento, aqui é impercepitível, pois só é utilizado durante a impressão, na tela ele mostra todos os caracteres em ordem alfabética, o problema era só durante a impressão, portanto creio que seja um problema com o filtro, mas do jeito que fiz o problema foi solucionado.
GOSTEI 0