2014-11-18 3 views
4

제로 패드 숫자에 대한 지침은 format입니다.왼쪽 맞춤 제로 패딩

cl-user> (format nil "~12,'0d" 27) 
"000000000027" 

cl-user> (format nil "[email protected]<~d~>" 27) 
"27   " 

모두 할 수있는 방법이 있나요 그들에게 패딩 동안 문자열을 왼쪽 정렬 비슷한 틱 지침이있다? 즉 :

cl-user> (format nil "~12,something,d" 27) 
"270000000000" 

순진한 "~12,'[email protected]<~d~>"은 내가 원하는 것을하지 않는 것 같습니다.

cl-user> (format nil "~12,'[email protected]<~d~>" 27) 
"27   " 
+1

오른쪽에 0 패딩이 표시되어 유용하지 않습니다. – sds

+0

마지막 예제와 비슷하지만 쉼표가 더 필요합니다. 패드 숯은 마지막 네 개의 인수이고 두 번째 인수는 0입니다. –

+1

@sds 값이 숫자 문자가되는 정수 또는 문자열인지 여부에 따라 달라질 수 있습니다. 업그레이드가 필드 너비를 변경하고 이전 레코드를 마이그레이션하는 절차가 0으로 오른쪽 패드에 유지 관리 시스템을 보았습니다. 오른쪽 패딩은 값을 변경했기 때문에 정확했습니다. 000027 (6 문자)은 27 문자로 쓸 수 있습니다.이 문자는 6 문자가 아니며 000027은 실수로 8 진수로 (프로그래머가 조심하지 않을 때 기계로) 읽을 수 있습니다. 반면에 270000은 0부터 시작하지 않으므로 *는 6 자리 숫자를 가지며 8 진수가 아닙니다. –

답변

6

당신은 마지막 예제와 가까운,하지만 tilde less-than 네 개의 인수를하고, 패드 문자는 네 번째 인자이기 때문에 당신이 좀 더 쉼표가 필요하지만, 그것을 두 번째로 전달합니다. 그냥 네 번째로 전달 : AS를

CL-USER> (format nil "~12,,,'[email protected]<~d~>" 27) 
"270000000000" 

를 제외하고, 그것은 바로 패딩 즉 유용한 작업처럼 보이지 않는 값을 변경하는 pointed out in the comments했다. 나는 그것이 유용한 작업이 될 수 있다고 말하고 싶지만. 값이 숫자 문자가되는 정수 또는 문자열인지에 따라 달라질 수 있습니다. 업그레이드가 필드 너비를 변경하고 이전 레코드를 마이그레이션하는 절차가 0으로 오른쪽 패드에 유지 관리 시스템을 보았습니다. 오른쪽 패딩은 값을 변경했기 때문에 정확했습니다. 000027 (6 문자)은 27 문자로 쓸 수 있습니다.이 문자는 6 문자가 아니며 000027은 실수로 8 진수로 (프로그래머가 조심하지 않을 때 기계로) 읽을 수 있습니다. 반면에 270000은 6 자리 숫자 여야하며 8 진수가되지 않습니다. 0으로 시작하지 않으므로

5

사용 ~A :

(format nil "~33,,,'0A" 27) 
==> "270000000000000000000000000000000" 
+0

이것은 ~ a로 할 수 있지만 틸데 -보다 작음 (OP가 이미 사용하고 있습니다.) 작동합니다. 하지만 중요한 부분 (쉼표 더 많이)은 동일합니다. –

관련 문제