ARGF.each_with_index do |line, idx|
print( "[#{idx}] #{line} x: " );
indent = Indent
# do stuff
indent = ""
end #ARGF e
STDIN的每一行显示为,
x: [1] W:\sandbox\tmp\for_each\for_each.rake
如果你问我,那不好 / 奇数 。
另一个无法解释的结果,就是......
print( "ab: [#{idx}] #{line} x: " );
显示器:
x: ab: [1] W:\sandbox\tmp\for_each\for_each.rake
我在这里得到奇怪的感觉。三个问题,是这个问题:
需要帮助。我一直在看着这个,想知道我做了什么真的很蠢?非常感谢提前。
aloha,Will
答案 0 :(得分:3)
each_line
不会删除行尾的换行符,因此each_line
生成的字符串将包含换行符。另一方面,print
不会在字符串末尾添加换行符(如果需要,请使用puts
)。因此print "hello\nworld:
后跟print "lala"
,将打印
hello
world:lala
解释了为什么你的输出看起来像它的方式。
要获得所需的输出,请使用line.chomp
代替line
,这将删除line
末尾的换行符,从而防止字符串在x:
之前包含换行符{1}}。
答案 1 :(得分:1)
这里有点遗憾。我 fergot 关于Windows的行尾和CR / LF问题。解决方案似乎是:
line.chomp!
print( "ab: [#{idx}] #{line}:x\n" );
打印行:
ab: [1] W:\sandbox\tmp\for_each\for_each.rake x:
年轻球员的剩余陷阱是在chomp!()方法之后放置自己的换行符(\ n)。我对此犯的一个错误是'trim()'不'chomp()' - 我有多疯狂。
干杯,
威尔