タブを空白に,空白をタブに変える
def tabify(str) s = untabify(str) # タブが含まれていると位置がズレる a = s.scan(/.{1,4}/) # タブ幅4 a = a.map {|x| x.sub(/ +\z/,"\t") } a.join('') end def untabify(str) tab_size = 4 # タブ幅4 a = str.split(/(\t)/) a.inject(s='') {|x,y| x << ((y=="\t")? " "*(tab_size-x.size%tab_size): y) } end str = "test test test" puts str puts tabify(str) puts untabify( tabify(str))
日本語が入っていると,多分おかしくなる.
perlだと両方ワンライナーで書けてるっぽいんだよね.rubyのメソッドや正規表現で知らないのがありそう.
文字列中の空白/タブもタブ/空白に変換される.インデントだけを扱うなら,文頭のタブ/空白のみを変換対象にすればいいのかも?