好吧,我有這個ruby腳本,它打開一個文件,並將每行傳遞給line_parser方法。該方法只是簡單地改變幾個空格的選項卡。這是它:如何重構這個簡單的Ruby算法
$lines = []
def line_parser(line)
line.gsub! /\t/, ' '
$lines[$lines.length] = line
end
f = File.open(ARGV[0], 'r').each { |line| line_parser(line) }
f.close
f = File.open(ARGV[0], 'w')
$lines.each { |line| f.puts line}
f.close
正如你可以看到它有兩個循環; 一個循環迭代文件內的文本行,將它們放入數組中。而另一個循環再次將文件從最近創建的陣列中用新的線寫入。
我的問題很簡單,我認爲: 我如何重構這段代碼,這樣我就只有一個循環內上述所有步驟?
我知道它可以做到,我只是無法用我目前的紅寶石知識做到這一點。
在此先感謝!
這個問題給出了一個替代:http://stackoverflow.com/questions/5452781/edit-each-line-in-a-file-in-ruby,這是寫一個臨時文件然後覆蓋輸入文件,而不是循環遍歷行。雖然如果你只是尋找一個簡單的方法來做到這一點(而不僅僅是一個更好的ruby方法),我相信'sed -i's/\ t// g'yourfile'會做到這一點。 – numbers1311407
這種問題會更好,在http://codereview.stackexchange.com/ –