タブを空白に,空白をタブに変える

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のメソッドや正規表現で知らないのがありそう.

文字列中の空白/タブもタブ/空白に変換される.インデントだけを扱うなら,文頭のタブ/空白のみを変換対象にすればいいのかも?