回答:
カウンタの最大桁数がわかっている場合(たとえば、カウンタ1..876の場合はn = 3)、次のようにできます。
str = "file_" + i.to_s.rjust(n, "0")
%
動作しますが、より一般的な目的です。
%
文字列で演算子を使用します。
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などで利用できます。
Kernel#sprintf
ここに記載されています:ruby-doc.org/core-1.9.3/Kernel.html#method-i-sprintf
sprintf("%03d", 5)
ます。
ファイル名を連結する前に、値の文字列フォーマットを使用できませんか?
"%03d" % number
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
他の回答で述べたように、"%03d" % number
かなりうまくいきますが、それはrubocop rubyスタイルガイドに反します:
かなり不可解なString#%メソッドよりもsprintfおよびそのエイリアス形式の使用を優先します
以下を使用すると、より読みやすい方法で同じ結果を得ることができます。
format('%03d', number)
format
ます。コードをわかりやすくすることを目標とする場合sprintf
は、標準Cライブラリの一部なので、を使用する必要があります。この名前は、プログラミング言語全体で使用されます。sprintf
それformat
がそのエイリアスであることを知っている数と比較して、より多くの人々が何をするかを理解しています。何かがRuboCopの一部であるからといって、それが本質的に正しいか間違っているかはわかりません。プロジェクトに最も適したルールを選択してください。'%03d' % number
読みやすいです。
"%02d" % num
しsprintf(...)
、次にformat(...)
RuboCopの提案に従って変更しました。それから、それsprintf
がより慣習的format
であるStyle/FormatString: EnforcedStyle: sprintf
と判断したので、rubocop.ymlをで更新しました。