Как вывести ведущие нули в Ruby? - PullRequest
213 голосов
/ 09 октября 2009

Я вывожу набор пронумерованных файлов из сценария Ruby. Числа получены при увеличении счетчика, но чтобы они хорошо сортировались в каталоге, я хотел бы использовать начальные нули в именах файлов. Другими словами

file_001 ...

вместо

file_1

Есть ли простой способ добавления начальных нулей при преобразовании числа в строку? (Я знаю, что могу сделать «если меньше 10 .... если меньше 100»).

Ответы [ 5 ]

324 голосов
/ 09 октября 2009

Используйте оператор % со строкой:

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

Левая сторона - это строка формата printf, а правая часть может быть списком значений, поэтому вы можете сделать что-то вроде:

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

Вот шпаргалка формата printf , которая может оказаться полезной при формировании строки формата. Формат printf изначально взят из функции C printf, но аналогичные функции форматирования доступны в perl, ruby, python, java, php и т. Д.

258 голосов
/ 09 октября 2009

Если известно максимальное количество цифр в счетчике (например, n = 3 для счетчиков 1..876), вы можете сделать

str = "file_" + i.to_s.rjust(n, "0")
47 голосов
/ 09 октября 2009

Разве вы не можете просто использовать форматирование строки значения перед тем, как указать имя файла?

"%03d" % number
27 голосов
/ 09 октября 2009

Используйте String#next в качестве счетчика.

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

next относительно «умный», то есть вы можете даже пойти на

>> n = "file_000"
>> 3.times { puts n.next! }
file_001
file_002
file_003
5 голосов
/ 21 июня 2018

Как указано в других ответах, "%03d" % number работает довольно хорошо, но это противоречит рубикопу Руководство по стилю ruby ​​:

Поддержите использование sprintf и его псевдонима над довольно Загадочная строка #% method

Мы можем получить тот же результат более читабельным способом, используя следующее:

format('%03d', number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...