我正在从Ruby脚本输出一组编号的文件。这些数字来自于递增计数器,但是为了使它们在目录中很好地排序,我想在文件名中使用前导零。换句话说
file_001……
而不是
file_1
在将数字转换为字符串时,是否有一种简单的方法可以添加前导零?(我知道我能做到”如果少于10....如果小于100”)。
我正在从Ruby脚本输出一组编号的文件。这些数字来自于递增计数器,但是为了使它们在目录中很好地排序,我想在文件名中使用前导零。换句话说
file_001……
而不是
file_1
在将数字转换为字符串时,是否有一种简单的方法可以添加前导零?(我知道我能做到”如果少于10....如果小于100”)。
当前回答
难道不能在连接文件名之前使用值的字符串格式吗?
"%03d" % number
其他回答
文件名= '000'.upto('100')。映射{|索引| "file_#{index}"}
输出
[file_000, file_001, file_002, file_003,…, file_098, file_099, file_100]
接下来使用String#作为计数器。
>> n = "000"
>> 3.times { puts "file_#{n.next!}" }
file_001
file_002
file_003
下一个相对“聪明”,意思是你甚至可以去
>> n = "file_000"
>> 3.times { puts n.next! }
file_001
file_002
file_003
如果已知计数器中的最大数字数(例如,对于计数器1..876,n = 3),则可以执行
str = "file_" + i.to_s.rjust(n, "0")
正如其他答案所述,“%03d”% number工作得很好,但它违背了rubocop ruby风格指南:
建议使用sprintf及其别名格式 密码字符串#%方法
我们可以使用以下更易读的方式获得相同的结果:
format('%03d', number)
难道不能在连接文件名之前使用值的字符串格式吗?
"%03d" % number