2011-06-14 138 views
1

这个问题有点简单(不要对我如此苛刻),但我不能得到一个代码漂亮的解决方案。我有以下代码:从标准输入读取和打印到红宝石标准输出

ARGF.each_line do |line| 
    arguments = line.split(',') 
    arguments.each do |task| 
    puts "#{task} result" 
    end 
end 

它只是从标准输入数字中读取。我使用这种方式:

echo "1,2,3" | ruby prog.rb 

所需的输出是

1 result 
2 result 
3 result 

但实际产量

1 result 
2 result 
3 
result 

好像有介绍一个换行符。我正在跳过什么?

+0

'puts task.inspect'会显示'task'中有一个换行符。 – 2011-06-14 13:08:44

回答

4

每个line都以换行符结尾,所以在您的示例中以逗号分隔意味着最后一个标记为3\n。打印后打印3,然后换行。

使用

arguments = line.chomp.split(',') 

要分裂之前删除尾随换行符尝试。

1

你的stdin输入包含一个尾随的换行符。尝试调用line.chomp!作为each_line块中的第一条指令。