in

Cómo forzar la cadena Ruby a n caracteres

apple touch icon@2

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 rellenar a la derecha, utilice un - 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ías usar printf o sprintf, pero prefiero el más genérico %, que es como sprintf.

Desde el sprintf docs:

  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 no quiero rellenar con espacios sino con algún otro carácter?

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

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

Esto se vuelve mucho más complicado que un simple gsub aunque. A menudo, es mejor ajustar la cadena sin utilizar cadenas de formato si necesita proporcionar caracteres especiales. Las cadenas de formato son muy poderosas pero no son totalmente flexibles.

De lo contrario, optaría por algo como la solución de @ steenslag, que es la base para desarrollar la suya. Pierde la capacidad de usar cadenas de formato y tiene que confiar en concatenar sus cadenas o algo similar para obtener una salida en columnas, pero también funcionará.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

formal groups

Comportamiento grupal

aFicCrzUnNAK4r3yyce5Tc 1200 80

Los mejores juegos de N64 de todos los tiempos