好吧,我有这个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/ –