如何在Ruby中输出前导零?

我正在从一个Ruby脚本输出一组编号的文件。 数字来自增加一个计数器,但为了使他们在目录中很好地sorting,我想在文件名中使用前导零。 换一种说法

file_001 …

代替

file_1

将数字转换为string时,是否有简单的方法来添加前导零? (我知道我可以做“如果less于10 ….如果less于100”)。

如果计数器的最大位数是已知的(例如,对于计数器1..876,n = 3),则可以

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

对string使用%运算符:

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

左边是一个printf格式的string,右边可以是一个值列表,所以你可以这样做:

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

这里有一个printf格式的备忘单,你可能会发现在形成你的格式string中很有用。 printf格式最初来自C函数printf ,但是在perl,ruby,python,java,php等中可以使用类似的格式化函数。

你不能在连接文件名之前使用string格式的值吗?

 "%03d" % number 

使用String#next作为计数器。

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