tag section script schools samp 3school ruby

section - ¿Cómo puedo mostrar los ceros iniciales en Ruby?



w3 schools section (5)

¿No puedes usar el ruby-doc.org/core/classes/String.html#M000770 de ruby-doc.org/core/classes/String.html#M000770 del valor antes de concat el nombre de archivo?

"%03d" % number

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

archivo_001 ...

en lugar de

archivo_1

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


Como lo indican las otras respuestas, "%03d" % number funciona bastante bien, pero va en contra de la guía de estilo rubocop ruby :

Favorece el uso de sprintf y su formato de alias sobre el método String #% bastante críptico

Podemos obtener el mismo resultado de una manera más legible utilizando lo siguiente:

format(''%03d'', number)


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

str = "file_" + i.to_s.rjust(n, "0")


Usa el operador % con una cadena:

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

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

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

Aquí hay una hoja de trucos en formato printf que puede ser útil para formar su cadena de formato. El formato de printf es originalmente de la función printf C , pero las funciones de formateo similares están disponibles en perl, ruby, python, java, php, etc.


Usa la String#next como el contador.

>> n = "000" >> 3.times { puts "file_#{n.next!}" } file_001 file_002 file_003

next es relativamente ''inteligente'', lo que significa que incluso puedes ir por

>> n = "file_000" >> 3.times { puts n.next! } file_001 file_002 file_003