Si me pasan una frase muy larga, quiero recortarla hasta 120 caracteres,
pero me gustarÃa que no se corten palabras. ¿Sabéis si hay alguna
función que lo haga, o tengo que montarme un bucle para que añada
palabra por palabra hasta que llegue al lÃmite?
s2 y gracias
On 21/01/2008, Fernando C. [email protected]
wrote:
Si me pasan una frase muy larga, quiero recortarla hasta 120 caracteres,
pero me gustaría que no se corten palabras. ¿Sabéis si hay alguna
función que lo haga, o tengo que montarme un bucle para que añada
palabra por palabra hasta que llegue al límite?
Buscando un poco he encontrado esto
def awesome_truncate(text, length = 30, truncate_string = “…”)
return if text.nil?
l = length - truncate_string.chars.length
text.chars.length > length ? text[/\A.{#{l}}\w*;?/m][/.*[\w;]/m] +
truncate_string : text
end
La búsqueda en Google que he hecho, una vez comprobado que el helper
truncate no te servía, ha sido esta:
http://www.google.com/search?q=rails%20truncate%20full%20words&sourceid=mozilla2&ie=utf-8&oe=utf-8
Parece que aparecen unas cuantas soluciones.
–
Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.
On Jan 21, 2008, at 1:29 PM, Fernando C. wrote:
Si me pasan una frase muy larga, quiero recortarla hasta 120
caracteres,
pero me gustaría que no se corten palabras. ¿Sabéis si hay alguna
función que lo haga, o tengo que montarme un bucle para que añada
palabra por palabra hasta que llegue al límite?
ActionView::Helpers::TextHelper#truncate corta palabras.
Se podria hacer de golpe con una regexp, algo asi:
irb(main):023:0> "foo,\n\n bar baz?".match(/\A.{0,9}\b/m)[0]
=> "foo,\n\n "
irb(main):024:0> "foo,\n\n bar baz?".match(/\A.{0,10}\b/m)[0]
=> "foo,\n\n bar"
donde pone 9 y 10 iria 120.
– fxn
Cre que algo así te serviria, aunque tendrás que depurar la expresión
regular para que tenga en cuenta los puntos, las comas etc.
def text_wrap(s,width=120)
wrapped_text = “”
s.split(/\s+/).each do |word|
if wrapped_text.size + word.size >= width
return wrapped_text
elsif wrapped_text.empty?
wrapped_text = word
else
wrapped_text << " " << word
end
end
end
El 21/01/2008, a las 13:29, Fernando C.
escribió:
Si me pasan una frase muy larga, quiero recortarla hasta 120
Hola,
“slice” quizás te sirva.
frase.slice(0,120)
2008/1/21 Emili Parreño [email protected]:
Xavier N. wrote:
On Jan 21, 2008, at 1:29 PM, Fernando C. wrote:
Si me pasan una frase muy larga, quiero recortarla hasta 120
caracteres,
pero me gustar�a que no se corten palabras. �Sab�is si hay alguna
funci�n que lo haga, o tengo que montarme un bucle para que a�ada
palabra por palabra hasta que llegue al l�mite?
ActionView::Helpers::TextHelper#truncate corta palabras.
Se podria hacer de golpe con una regexp, algo asi:
irb(main):023:0> "foo,\n\n bar baz?".match(/\A.{0,9}\b/m)[0]
=> "foo,\n\n "
irb(main):024:0> "foo,\n\n bar baz?".match(/\A.{0,10}\b/m)[0]
=> "foo,\n\n bar"
donde pone 9 y 10 iria 120.
– fxn
Efectivamente, truncate no sirve, y tampoco sirve slice por el mismo
motivo: cortan las palabras.
Las funciones de Manuel y Emili sà que funcionan, pero me voy a quedar
con la regexp de Xavier, que me ha parecido la solución más elegante.
Gracias a todos!!