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