Dúvida - Usando função para abreviar nome completo!

1,329 views
Skip to first unread message

Julia

unread,
Feb 27, 2012, 8:28:13 AM2/27/12
to ColdFusion Brasil
Olá pessoal, estou com uma dúvida primária, acredito eu .. mas não
estou conseguindo resolver o meu problema!

Preciso de uma função para cortar um texto (nome completo) assim que
atingir um tamanho pré definido, mas ele não pode simplesmente cortar
em qualquer local, tem que abreviar o nome!
Achei um na internet, mas não consigo fazê-lo funcionar, não sei aonde
está o erro!
Vou colocar o código aqui embaixo para avaliarem e logo depois dele, o
erro que está aparecendo!

Agradeço desde já!

<cfscript>
function abbreviate(string,len)
{
var newString = REReplace(string, "<[^>]*>", " ", "ALL");
var lastSpace = 0;
newString = REReplace(newString, " \s*", " ", "ALL");
if (len(newString) gt len) {
newString = left(newString, len-2);
lastSpace = find(" ", reverse(newString));
lastSpace = len(newString) - lastSpace;
newString = left(newString, lastSpace) & " &##8230;";
}
return newString;
}
</cfscript>

<cfoutput>
#abbreviate("<p>This bit of HTML copy is going to get <em>real</em>
chopped up!</p>", 40)#
</cfoutput>



ERRO:

Error Diagnostic Information
Just in time compilation error

Invalid parser construct found on line 55 at position 10. ColdFusion
was looking at the following text:

abbreviate
Invalid expression format. The usual cause is an error in the
expression structure.
The last successfully parsed CFML construct was a CFSCRIPT tag
occupying document position (53:1) to (53:10).



Vini Costa

unread,
Feb 27, 2012, 8:44:21 AM2/27/12
to cfbr...@googlegroups.com
Usando umas das características que mais gosto no CF, as listas, criei a função abaixo, que abrevia os nomes do meio:

function abreviarNome(nome){
abreviado = ListFirst(nome,' ');
for(i = 2; i < ListLen(nome,' '); i++)
abreviado = abreviado & ' ' & Left(ListGetAt(nome,i,' '),1) & '.';
abreviado = abreviado & ' ' & ListLast(nome,' ');
return abreviado;
}

No caso do meu nome, por exemplo, o retorno seria "Vinícius A. Costa". Para abreviar usando somente o nome e último nome, ficaria mais simples ainda:

function abreviarNome(nome){
return ListFirst(nome,' ') & ' ' & ListLast(nome,' ');
}

No mesmo exemplo, retornaria "Vinícius Costa".

Vinícius Aragão Costa
 [Vini]

Taguatinga - DF
twitter.com/viniaragaocosta
www.linkedin.com/in/viniciuscosta
www.saladejustica.com.br

Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria
------------------------
"E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura. Quem crer e for batizado será salvo; quem, porém, não crer será condenado. Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos, eles ficarão curados." Marcos 16:15-18






--
Você recebeu este e-mail pois está cadastrado na lista ColdFusion Brasil
Para CANCELAR sua assinatura escreva para cfbrasil+u...@googlegroups.com
Para ASSINAR a lista escreva para cfbrasil+...@googlegroups.com
O endereço para ENVIO DE MENSAGENS da lista é cfbr...@googlegroups.com
REGRAS em http://groups.google.com/group/cfbrasil/web/regras-de-boa-convivncia-na-lista
Outras opções disponíveis em http://groups.google.com/group/cfbrasil

Julia

unread,
Feb 27, 2012, 10:06:08 AM2/27/12
to ColdFusion Brasil
Entendi, Vinícius, mas uma coisa que não estou entendendo, eu coloco a
função dentro de <cfscript> ?
Pois até com a sua aqui está dando um erro no nome da função, devo
estar colocando de forma errada no código!

On 27 fev, 10:44, Vini Costa <vinico...@gmail.com> wrote:
> Usando umas das características que mais gosto no CF, as listas, criei a
> função abaixo, que abrevia os nomes do meio:
>
> function abreviarNome(nome){
> abreviado = ListFirst(nome,' ');
>  for(i = 2; i < ListLen(nome,' '); i++)
> abreviado = abreviado & ' ' & Left(ListGetAt(nome,i,' '),1) & '.';
>  abreviado = abreviado & ' ' & ListLast(nome,' ');
> return abreviado;
>  }
>
> No caso do meu nome, por exemplo, o retorno seria "Vinícius A. Costa". Para
> abreviar usando somente o nome e último nome, ficaria mais simples ainda:
>
> function abreviarNome(nome){
> return ListFirst(nome,' ') & ' ' & ListLast(nome,' ');
>  }
> *
>
> No mesmo exemplo, retornaria "Vinícius Costa".
>
> Vinícius Aragão Costa [Vini]*
> Taguatinga - DF
> twitter.com/viniaragaocostawww.linkedin.com/in/viniciuscostawww.saladejustica.com.br
>
> *Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria*
> ------------------------
> "E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura.
> Quem crer e for batizado será salvo; quem, porém, não crer será condenado.
> Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão
> demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa
> mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos,
> eles ficarão curados." Marcos 16:15-18
>
> >http://groups.google.com/group/cfbrasil/web/regras-de-boa-convivncia-...
> > Outras opções disponíveis emhttp://groups.google.com/group/cfbrasil

Vini Costa

unread,
Feb 27, 2012, 10:24:31 AM2/27/12
to cfbr...@googlegroups.com
Isso mesmo Julia. No meu exemplo fiz assim:

<cfscript>
function abreviarNome(nome){
abreviado = ListFirst(nome,' ');
for(i = 2; i < ListLen(nome,' '); i++)
abreviado = abreviado & ' ' & Left(ListGetAt(nome,i,' '),1) & '.';
abreviado = abreviado & ' ' & ListLast(nome,' ');
return abreviado;
}
</cfscript>
<cfdump var="#abreviarNome('Vinicius Aragao Costa')#">

Vinícius Aragão Costa
 [Vini]

Taguatinga - DF
Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria
------------------------
"E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura. Quem crer e for batizado será salvo; quem, porém, não crer será condenado. Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos, eles ficarão curados." Marcos 16:15-18

Julia

unread,
Feb 27, 2012, 10:36:29 AM2/27/12
to ColdFusion Brasil
Que estranho, copiei e colei o seu código no arquivo .cfm e deu esse
erro:

Error Diagnostic Information
Just in time compilation error

Invalid parser construct found on line 2 at position 10. ColdFusion
was looking at the following text:

abreviarNome
Invalid expression format. The usual cause is an error in the
expression structure.



On 27 fev, 12:24, Vini Costa <vinico...@gmail.com> wrote:
> Isso mesmo Julia. No meu exemplo fiz assim:
>
> <cfscript>
> function abreviarNome(nome){
> abreviado = ListFirst(nome,' ');
>  for(i = 2; i < ListLen(nome,' '); i++)
> abreviado = abreviado & ' ' & Left(ListGetAt(nome,i,' '),1) & '.';
>  abreviado = abreviado & ' ' & ListLast(nome,' ');
> return abreviado;
>  }
> </cfscript>
> <cfdump var="#abreviarNome('Vinicius Aragao Costa')#">
> *
>
> Vinícius Aragão Costa [Vini]*
> Taguatinga - DF
> twitter.com/viniaragaocostawww.linkedin.com/in/viniciuscostawww.saladejustica.com.br
>
> *Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria*
> ------------------------
> "E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura.
> Quem crer e for batizado será salvo; quem, porém, não crer será condenado.
> Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão
> demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa
> mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos,
> eles ficarão curados." Marcos 16:15-18
>
Message has been deleted

Mohamad El-Husseini

unread,
Feb 27, 2012, 1:01:25 PM2/27/12
to cfbr...@googlegroups.com
Can you paste your file's content? It sounds like a syntax error.

Also, there might be a simpler way to create an abbreviated name. Can you give an example of what you mean by abbreviation? An example with a sample name, and the expected output once the name is ran through the function.

Finally, whatever you do, use var scope, for god sake. I see such examples all the time and it's terrible form.

@Vinicius, it's not hard to do this:

public string function abreviarNome(required string nome) {
    var name = ListFirst(arguments.name, " ") & ' ' & ListLast(arguments.name, ' ');
    return name;
> > > > cfbrasil+unsubscribe@googlegroups.com
> > > > Para ASSINAR a lista escreva para cfbrasil+subscribe@googlegroups.com
> > > > O endereço para ENVIO DE MENSAGENS da lista é
> > cfbr...@googlegroups.com
> > > > REGRAS em
> > > >http://groups.google.com/group/cfbrasil/web/regras-de-boa-convivncia-.
> > ..
> > > > Outras opções disponíveis emhttp://groups.google.com/group/cfbrasil
>
> > --
> > Você recebeu este e-mail pois está cadastrado na lista ColdFusion Brasil
> > Para CANCELAR sua assinatura escreva para

Vini Costa

unread,
Feb 27, 2012, 1:01:55 PM2/27/12
to cfbr...@googlegroups.com
Nem imagino, mas qual a versão do CF que você está usando?


Vinícius Aragão Costa
 [Vini]

Taguatinga - DF
twitter.com/viniaragaocosta
www.linkedin.com/in/viniciuscosta
www.saladejustica.com.br

Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria
------------------------
"E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura. Quem crer e for batizado será salvo; quem, porém, não crer será condenado. Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos, eles ficarão curados." Marcos 16:15-18



Em 27 de fevereiro de 2012 12:44, Julia <jalber...@gmail.com> escreveu:
Copiei e colei esse código que você enviou em um arquivo .cfm e deu
esse erro:

Error Diagnostic Information
Just in time compilation error

Invalid parser construct found on line 2 at position 10. ColdFusion

was looking at the following text:

abreviarNome

Invalid expression format. The usual cause is an error in the
expression structure.

Não entendi o porque .. sabe me falar?


On 27 fev, 12:24, Vini Costa <vinico...@gmail.com> wrote:
> Isso mesmo Julia. No meu exemplo fiz assim:
>
> <cfscript>
> function abreviarNome(nome){
> abreviado = ListFirst(nome,' ');
>  for(i = 2; i < ListLen(nome,' '); i++)
> abreviado = abreviado & ' ' & Left(ListGetAt(nome,i,' '),1) & '.';
>  abreviado = abreviado & ' ' & ListLast(nome,' ');
> return abreviado;
>  }
> </cfscript>
> <cfdump var="#abreviarNome('Vinicius Aragao Costa')#">
> *

>
> Vinícius Aragão Costa [Vini]*
> Taguatinga - DF
> twitter.com/viniaragaocostawww.linkedin.com/in/viniciuscostawww.saladejustica.com.br
>
> *Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria*
> ------------------------
> "E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura.
> Quem crer e for batizado será salvo; quem, porém, não crer será condenado.
> Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão
> demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa
> mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos,
> eles ficarão curados." Marcos 16:15-18
>

Vini Costa

unread,
Feb 27, 2012, 1:06:48 PM2/27/12
to cfbr...@googlegroups.com
Mohamad, entendo sua intenção e concordo com você. Mas eu quis apenas ajudar com uma ideia de algoritmo, e não entregar a ela uma solução completa e perfeita. Acredito que, antes de tudo, o desenvolvedor deve aprender por conta própria. Em outras palavras, o cara tem que saber se virar!


Vinícius Aragão Costa
 [Vini]

Taguatinga - DF
twitter.com/viniaragaocosta
www.linkedin.com/in/viniciuscosta
www.saladejustica.com.br

Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria
------------------------
"E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura. Quem crer e for batizado será salvo; quem, porém, não crer será condenado. Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos, eles ficarão curados." Marcos 16:15-18



Julia

unread,
Feb 27, 2012, 1:23:48 PM2/27/12
to ColdFusion Brasil
É a versão 7!

Estou olhando aqui, devo estar colocando algo errado na sintaxe ..

Mas obrigada!

On 27 fev, 15:06, Vini Costa <vinico...@gmail.com> wrote:
> Mohamad, entendo sua intenção e concordo com você. Mas eu quis apenas
> ajudar com uma ideia de algoritmo, e não entregar a ela uma solução
> completa e perfeita. Acredito que, antes de tudo, o desenvolvedor deve
> aprender por conta própria. Em outras palavras, o cara tem que saber se
> virar!
> *
>
> Vinícius Aragão Costa [Vini]*
> Taguatinga - DF
> twitter.com/viniaragaocostawww.linkedin.com/in/viniciuscostawww.saladejustica.com.br
>
> *Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria*
> ------------------------
> "E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura.
> Quem crer e for batizado será salvo; quem, porém, não crer será condenado.
> Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão
> demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa
> mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos,
> eles ficarão curados." Marcos 16:15-18
>
> Em 27 de fevereiro de 2012 15:01, Vini Costa <vinico...@gmail.com> escreveu:
>
>
>
>
>
>
>
> > Nem imagino, mas qual a versão do CF que você está usando?
>
> > *
>
> > Vinícius Aragão Costa [Vini]*
> > Taguatinga - DF
> > twitter.com/viniaragaocosta
> >www.linkedin.com/in/viniciuscosta
> >www.saladejustica.com.br
>
> > *Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria*
> > ------------------------
> > "E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura.
> > Quem crer e for batizado será salvo; quem, porém, não crer será condenado.
> > Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão
> > demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa
> > mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos,
> > eles ficarão curados." Marcos 16:15-18
>

Vini Costa

unread,
Feb 27, 2012, 2:08:54 PM2/27/12
to cfbr...@googlegroups.com
Nessa caso, acho que sei o que é. Onde temos

i++

troque por

i = i + 1

Deve resolver. Essa sintaxe i++ só está disponível a partir do CF 9, se não me engano.
Sola Scriptura, Solus Christus, Sola Gratia, Sola Fide, Soli Deo Gloria
------------------------
"E disse-lhes: Ide por todo o mundo e pregai o evangelho a toda criatura. Quem crer e for batizado será salvo; quem, porém, não crer será condenado. Estes sinais hão de acompanhar aqueles que crêem: em meu nome, expelirão demônios; falarão novas línguas; pegarão em serpentes; e, se alguma coisa mortífera beberem, não lhes fará mal; se impuserem as mãos sobre enfermos, eles ficarão curados." Marcos 16:15-18

Mohamad El-Husseini

unread,
Feb 27, 2012, 2:28:21 PM2/27/12
to cfbr...@googlegroups.com
Julia, no seu caso, pode usar este condigo:

O premiero e segundo nome, e o maximum de 15 characters.

public string function abbreviate(required string nome) {
    // Remove middle names; get only first and last names
    var nome = "#ListFirst(arguments.name, " ")# #ListLast(arguments.nome, " ")#";

    // 15 characters
    var nome = Right(nome, 15);
    return nome
}

abbreviate("Mickey Very-Evil Mouse") = "Mickey Mouse"
abbreviate("Miiickeeeyy Very-Evil Mouse") = "Miiickeeeyy Mou"

Mohamad El-Husseini

unread,
Feb 27, 2012, 2:35:22 PM2/27/12
to cfbr...@googlegroups.com
Desculpa, eu fiz um error:

public string function abbreviate(required string nome) {
    // Remove middle names; get only first and last names
    var nome = "#ListFirst(arguments.name, ' ')# #ListLast(arguments.nome, ' ')#";

    // 15 characters
    var nome = Right(nome, 15);
    return nome
}


Melhor ver aqui: http://pastie.org/3474298
Reply all
Reply to author
Forward
0 new messages