从stdin读取并在Ruby中打印到stdout

时间:2011-06-14 10:59:16

标签: ruby arrays string newline

这个问题有点简单(不要对我如此苛刻),但我无法获得代码美观的解决方案。我有以下代码:

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

似乎引入了换行符。我正在跳过什么东西?

2 个答案:

答案 0 :(得分:4)

每个line以换行符结尾,因此在示例中使用逗号分割意味着最后一个标记为3\n。打印此内容会打印3,然后打印换行符。

尝试使用

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

在拆分前删除尾随换行符。

答案 1 :(得分:1)

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