Ruby文字列変数の出力をputs
n文字まで強制して、変数が長い場合は切り捨てられ、短い場合は末尾または先頭のスペースで展開されるようにするにはどうすればよいですか?
これを行うための標準的な方法はありますか?
Ruby文字列変数の出力をputs
n文字まで強制して、変数が長い場合は切り捨てられ、短い場合は末尾または先頭のスペースで展開されるようにするにはどうすればよいですか?
これを行うための標準的な方法はありますか?
Rubyは、他の多くの言語と同様に、フォーマット文字列の使用をサポートしています。
[11](こじ開け)メイン:0>'%3.3s'%'f' => "f" [12](pry)main:0>'%3.3s'%'foo' =>「foo」 [13](pry)main:0>'%3.3s'%'foobar' =>「foo」
右側をパディングする場合-
は、フォーマット文字列でaを使用します。
[14](こじ開け)メイン:0>'%-3.3s'%'f' => "f" [15](pry)main:0>'%-3.3s'%'foo' =>「foo」 [16](pry)main:0>'%-3.3s'%'foobar' =>「foo」
printf
またはを使用することもできますが、私はより一般的な、のようなものsprintf
を好みます。%
sprintf
sprintf
ドキュメントから:
s | 引数は置換される文字列です。フォーマットの場合 | シーケンスには精度が含まれ、多くてもその数の文字が含まれます | コピーされます。
と:
-| すべて| この変換の結果を左揃えにします。
スペースではなく他の文字で埋めたい場合はどうすればよいですか?
基盤となるRubyコードはCで記述されており、パッド文字として使用するようにハードコーディングされている' '
ため、ソースを変更してRubyを再コンパイルし、言語の1回限りのバージョンを使用する場合を除いて、直接実行することはできません。 。代わりに、次のようなことができます。
[17](pry)main:0>('%-3.3s'%'f')。gsub(''、'。') =>「f..」
ただし、これは単純なものよりもはるかに複雑になりgsub
ます。特殊文字を指定する必要がある場合は、フォーマット文字列を使用せずに文字列を調整することをお勧めします。フォーマット文字列は非常に強力ですが、完全に柔軟というわけではありません。
それ以外の場合は、@ steenslagのソリューションのようなものを使用します。これは、独自のソリューションを作成するための基礎です。フォーマット文字列を使用する機能が失われ、文字列の連結など、列出力を取得するために依存する必要がありますが、これも機能します。
文字列を固定長に短くするには:
str_var.slice(0..10) # starts at the first letter
文字列を固定長に長くするには:
str_var.ljust(10, ' ')
それらは次のように組み合わせることができます。
(str_var.length > 10) ? str_var.slice(1..10) : str_var.ljust(10, ' ')
str_var
もちろん、あなたの弦はどこにありますか
class String
def fix(size, padstr=' ')
self[0...size].rjust(size, padstr) #or ljust
end
end
p 'lettersletters'.fix(9) #=> "lettersle"
p 'letters'.fix(10, '.') #=> "...letters"
slice
メソッド([])を。と組み合わせrjust
ます。
純粋なRubyワンライナーの場合は、次のようにします。
(str + ' ' * length)[0,length]
どちらが得られます:
str = "Hello"
length = 10
=> "Hello "
また:
str = "Hello"
length = 2
=> "He"
文字列を切り捨てるメソッドについて話している場合は、ActionView :: Helpers :: TextHelper#truncateを確認します。
例から:
truncate("Once upon a time in a world far far away")
# => Once upon a time in a world...