source

루비에서 선행 0을 출력하려면 어떻게 해야 합니까?

manycodes 2023. 6. 25. 20:16
반응형

루비에서 선행 0을 출력하려면 어떻게 해야 합니까?

루비 스크립트에서 일련의 번호가 매겨진 파일을 출력하고 있습니다.숫자는 카운터를 늘려서 나온 것이지만, 디렉터리에서 잘 정렬되도록 하려면 파일 이름에 선행 0을 사용합니다.다른말입니다.

file_001...

대신에

file_1

숫자를 문자열로 변환할 때 선행 0을 추가하는 간단한 방법이 있습니까?("10년 미만이면..." 할 수 있습니다.100" 미만인 경우).

사용%문자열이 있는 연산자:

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그러나 비슷한 포맷 기능은 펄, 루비, 파이썬, 자바, php 등에서 사용할 수 있습니다.

카운터의 최대 자릿수가 알려진 경우(예: 카운터 1의 경우 n = 3).876), 할 수 있습니다.

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

파일 이름을 동기화하기 전에 값의 문자열 형식을 사용할 수는 없습니까?

"%03d" % number

카운터로 사용합니다.

>> 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꽤 잘 작동하지만, 루보캅 루비 스타일 가이드와는 반대입니다.

상당히 암호화된 String#% 메서드보다 sprintf와 해당 별칭 형식의 사용을 선호합니다.

다음을 사용하여 보다 읽기 쉬운 방법으로 동일한 결과를 얻을 수 있습니다.

format('%03d', number)

filenames = '000'.upto('100').map { |index| "file_#{index}" }

출력

[file_000, file_001, file_002, file_003, ..., file_098, file_099, file_100]

언급URL : https://stackoverflow.com/questions/1543171/how-can-i-output-leading-zeros-in-ruby

반응형