Abreviação de nomes próprios
06/05/2016 11:43
0
Olá pessoal, me deparei com a necessidade de abreviar nomes próprios em uma aplicação, testei isoladamente o código abaixo para abreviação e
funcionou bem, daí surgiu a dúvida onde aplicá-lo? Atualmente informo um
valor numérico em um formulário que faz uma busca e retorna nos
resultados o nome completo da pessoa, porém preciso abreviá-lo na página
dos resultados, aplicar o código no domínio não é crime mas também não é
recomendável, alguma ideia? Vlw.

String ncompleto = 
"Marcelo Coelho Ribeiro Machado de Assis"
String[] nomes = ncompleto.split()
int
tamanho = nomes.length
String abv = nomes[
0
]
for
(
int
i =
1
; i< tamanho-
1
; i++){
if
(nomes[i].length()>
2
){
abv += 
" "
+nomes[i].charAt(
0
) + 
"."
}
else
{
abv += 
" "
+nomes[i]
}
}
abv+=
" "
+ nomes[tamanho-
1
] 
println
abv
Tags: Grails, abreviação, abbreviation


0
O código saiu zoado, segue:

String ncompleto = "Marcelo Coelho Ribeiro Machado de Assis"
String[] nomes = ncompleto.split()
int tamanho = nomes.length
String abv = nomes[0]
for(int i =1; i< tamanho-1; i++){
?if(nomes[i].length()>2){
? ?abv += " "+nomes[i].charAt(0) + "."
?}else{
? ?abv += " "+nomes[i]
?}
}
abv+=" " + nomes[tamanho-1]
println abv
06/05/2016 11:47


0
Recomendo um campo calculado no domínio mesmo.
06/05/2016 13:06


1
Eu colocaria um getNomeAbreviado() na própria classe de domínio. Mas se você não gostar da abordagem, pode formatar o(s) nome(s) no Controller na hora de retornar essa busca.


0
Victor,
Se ele utilizar o getNomeAbreviado() na domain ele vai conseguir usar as CRITERIAS para buscar por pessoas através desse atributo (se ele não for persistido)?
09/05/2016 16:23


0
Olá Francisco.
Eu separaria mais as coisas:
Primeiramente teria uma classe serviço (no diretório Services) com este método de abreviatura.
Agora precisamos entender qual a função da abreviação, que comportamento vc precisa no aplicativo.
Precisa persistir? Existe carga na tabela feita de forma batch? Se sim, será inevitável chamar o método dentro do Domínio. Caso contrário, poderá deixar o Controller tratar do assunto. Agora,  se você quiser mostrar a abreviatura ao alterar o conteúdo do campo nomeCompleto no formulário independente de te-lo submetido, você precisará de algumas outras combinações...
Abraço
10/05/2016 12:23


0
Rafael C, esse caso serve somente para exibir o valor de uma forma diferente na tela.

Se precisar utilizar o nome abreviado em consultas, acho que teria que listar todas as pessoas, abreviar o nome de cada uma para comparar com o valor consultado. Se o nome abreviado for exibido em uma coluna de dataTable na tela, você provavelmente terá que fazer algo parecido se quiser ordenar a coluna.

Se sua lista de pessoas for muito grande, você pode ficar preocupado com a performance disso e resolver salvar o nome abreviado no banco, mas aí terá outro problema: sempre que precisar alterar o nome, terá que atualizar também a abreviação. Já passei por esse dilema no caso de valores numéricos calculados (não armazenados).


0
Olá pessoal, desde já agradeço pela ajuda de todos, faltou informar que não vou persistir os dados, é apenas uma consulta que no final vai gerar uma etiqueta (ou várias), sendo assim tenho que controlar o tamanho dos nomes para não extrapolar o limite, consegui resolver direto no domínio com o 1° código abaixo, depois alterei no template da etiqueta com o 2º código abaixo e está indo bem, pode não ser a maneira mais elegante, mas resolveu, o código pode ser melhorado, claro, caso alguém precise segue os códigos:

1º código no domínio:

def abv(){
            String[] nomearray = Nome.split()
            int tamanho = nomearray.length
            nomeAbv= nomearray[0]
            for(int i =1; i< tamanho-1; i++){
                if(nomearray[i].length()>3){                  // Não abrevia "de","dos", "das", etc...                  
                    nomeAbv += " "+nomearray[i].charAt(0) + "."
                }else{
                    nomeAbv += " "+nomearray[i]
                }
            }
            return nomeAbv+=" " + nomearray[tamanho-1]
    }


2º código no template:

Obs: Normalmente nas views e templates os resultados são marcados com <td> no meu caso usei <li>:

<li>${impressaoInstance?.abv()}</li>



Vlw!
14/05/2016 12:49



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto