Ruby obsługuje używając ciągi formatu, podobnie jak wielu innych językach:
[11] (pry) main: 0> '%3.3s' % 'f'
=> " f"
[12] (pry) main: 0> '%3.3s' % 'foo'
=> "foo"
[13] (pry) main: 0> '%3.3s' % 'foobar'
=> "foo"
Jeśli chcesz pad w prawo, wykorzystują -
w ciągu formatu:
[14] (pry) main: 0> '%-3.3s' % 'f'
=> "f "
[15] (pry) main: 0> '%-3.3s' % 'foo'
=> "foo"
[16] (pry) main: 0> '%-3.3s' % 'foobar'
=> "foo"
Można również użyć printf
lub sprintf
, ale wolę bardziej ogólny %
, który jest podobny do sprintf
.
Z sprintf
docs:
s | Argument is a string to be substituted. If the format
| sequence contains a precision, at most that many characters
| will be copied.
oraz:
- | all | Left-justify the result of this conversion.
Co jeśli chcę pad nie spacjami, ale z jakiegoś innego znaku?
Podstawowa kod Ruby jest napisany w C, i to jest zakodowane w użyciu ' '
jako znak pad, więc nie jest to możliwe bezpośrednio, chyba że chcesz zmodyfikować źródła, przekompilować Ruby i żyć z jednorazowa wersja tego języka. Zamiast tego można zrobić coś takiego:
[17] (pry) main: 0> ('%-3.3s' % 'f').gsub(' ', '.')
=> "f.."
dostaje to o wiele bardziej skomplikowane niż proste gsub
chociaż. Często lepiej jest dopasować ciąg bez użycia ciągów formatujących, jeśli potrzebujesz znaków specjalnych. Ciągi formatujące są bardzo potężne, ale nie są całkowicie elastyczne.
W przeciwnym razie skorzystałbym z czegoś w rodzaju rozwiązania @ steenslag, które jest podstawą do rozwijania własnych. Tracisz możliwość korzystania z ciągów formatów i musisz polegać na łączeniu łańcuchów lub czegoś podobnego, aby uzyskać kolumny wyjściowe, ale będzie również działać.
klasyczną odpowiedź :) – fl00r
dziękuję. Podejrzewałem, że powinien istnieć jakiś elegancki sposób. Co zrobić, jeśli nie chcę wstawiać spacji, ale z inną postacią? – Paul
Same, 'sprintf' AKA' format' AKA '%' nie obsługuje używania alternatywnych znaków padowych, ale istnieją sposoby obejścia tego. Możesz użyć 'tr' lub' gsub' do zastąpienia znaków pad, w zależności od tego, czy wyprowadzasz dopełnienie wiodące/końcowe, czy też masz osadzone spacje. –