strings mayusculas interpolar imprimir funcion contar concatener comillas caracteres cadenas ruby string variables string-length

mayusculas - ruby cadenas



Cómo forzar una cadena de Ruby a n caracteres (5)

Cómo forzar la salida de variable de cadena de Ruby usando puts a n caracteres de modo que si la variable es más larga, se truncará, si es más corta, se expandirá por espacios iniciales o finales?

¿Hay algún método estándar para hacer esto?


Para hacer una cadena de una longitud fija más corta :

str_var.slice(1..10)

Para hacer que una cadena tenga una longitud fija más larga :

str_var.ljust(10, '' '')

Se podrían combinar en algo así como:

(str_var.length > 10) ? str_var.slice(1..10) : str_var.ljust(10, '' '')

Donde str_var es, por supuesto, su cadena


Para un revestimiento de Ruby one puro, puedes hacer esto:

(str + '' '' * length)[0,length]

Que cederá:

str = "Hello" length = 10 => "Hello "

o:

str = "Hello" length = 2 => "He"


Ruby admite el uso de cadenas de formato, como muchos otros idiomas:

[11] (pry) main: 0> ''%3.3s'' % ''f'' => " f" [12] (pry) main: 0> ''%3.3s'' % ''foo'' => "foo" [13] (pry) main: 0> ''%3.3s'' % ''foobar'' => "foo"

Si desea hacer un pad a la derecha, use a - en la cadena de formato:

[14] (pry) main: 0> ''%-3.3s'' % ''f'' => "f " [15] (pry) main: 0> ''%-3.3s'' % ''foo'' => "foo" [16] (pry) main: 0> ''%-3.3s'' % ''foobar'' => "foo"

También podría usar printf o sprintf , pero prefiero el % más genérico, que es como sprintf .

De los documentos de sprintf :

s | Argument is a string to be substituted. If the format | sequence contains a precision, at most that many characters | will be copied.

y:

- | all | Left-justify the result of this conversion.

¿Qué pasa si quiero rellenar no con espacios sino con algún otro personaje?

El código de Ruby subyacente está escrito en C, y está codificado para usar '' '' como el carácter de almohadilla, por lo que no es posible directamente, a menos que desee modificar la fuente, recompilar su Ruby y vivir con una versión única de el idioma. En cambio, puedes hacer algo como:

[17] (pry) main: 0> (''%-3.3s'' % ''f'').gsub('' '', ''.'') => "f.."

gsub embargo, esto se vuelve mucho más complicado que un simple gsub . A menudo es mejor ajustar la cadena sin usar cadenas de formato si necesita suministrar caracteres especiales. Las cadenas de formato son muy potentes, pero no son totalmente flexibles.

De lo contrario, iría con algo como la solución de @ steenslag, que es la base para hacer tu propia. Pierdes la habilidad de usar cadenas de formato y tienes que confiar en concatenar tus cadenas o algo similar para obtener resultados en columnas, pero también funcionará.


Si estás hablando de un método para truncar cadenas verificaría ActionView::Helpers::TextHelper#truncate

De los ejemplos:

truncate("Once upon a time in a world far far away") # => Once upon a time in a world...


class String def fix(size, padstr='' '') self[0...size].rjust(size, padstr) #or ljust end end p ''lettersletters''.fix(9) #=> "lettersle" p ''letters''.fix(10, ''.'') #=> "...letters"

Combina el método de slice (el []) con rjust .