¿Cómo puedo generar ceros a la izquierda en Ruby?

Resuelto Nathan Long asked hace 15 años • 6 respuestas

Estoy generando un conjunto de archivos numerados desde un script Ruby. Los números provienen del incremento de un contador, pero para que se ordenen bien en el directorio, me gustaría usar ceros a la izquierda en los nombres de archivos. En otras palabras

archivo_001...

en lugar de

archivo_1

¿Existe una forma sencilla de agregar ceros a la izquierda al convertir un número en una cadena? (Sé que puedo hacer "si es menos de 10... si es menos de 100").

Nathan Long avatar Oct 09 '09 18:10 Nathan Long
Aceptado

Utilice el %operador con una cadena:

irb(main):001:0> "%03d" % 5
=> "005"

El lado izquierdo es una cadena en formato printf y el lado derecho puede ser una lista de valores, por lo que podrías hacer algo como:

irb(main):002:0> filename = "%s/%s.%04d.txt" % ["dirname", "filename", 23]
=> "dirname/filename.0023.txt"

Aquí hay una hoja de referencia en formato printf que puede resultarle útil para formar su cadena de formato. El formato printf es originalmente de la Cfunción printf, pero hay funciones de formato similares disponibles en perl, ruby, python, java, php, etc.

Daniel Martin avatar Oct 09 '2009 11:10 Daniel Martin

Si se conoce el número máximo de dígitos en el contador (por ejemplo, n = 3 para contadores 1..876), puede hacer

str = "file_" + i.to_s.rjust(n, "0")
alex.zherdev avatar Oct 09 '2009 11:10 alex.zherdev

¿No puedes simplemente usar el formato de cadena del valor antes de concatenar el nombre del archivo?

"%03d" % number
Ólafur Waage avatar Oct 09 '2009 11:10 Ólafur Waage