在打印文件中的行时,Ruby控制台会覆盖行

时间:2011-04-12 23:48:30

标签: ruby console loops overwrite

我已经开始学习Ruby了,我遇到了一个恼人的问题。我已将一个文本文件导入到我的程序中,我想迭代它中的行并将它们打印到屏幕上。

当我这样做时,控制台会覆盖最后打印出的行并将新的行写在最上面。为什么会发生这种情况,我该如何解决?

这是我的代码:

passwords = File.open('C:\Users\Ryan\Desktop\pw.txt', 'r')
lines = passwords.gets

for line in lines
    puts line
end

更新: 这个循环很奇怪。我把一个睡眠声明放进去,它所做的只是睡了一次,然后继续输出线条。我希望它在输出每一行之前就能睡觉。示例如下:

passwords.each do |line|
    sleep 1
    puts line.chomp
end

更新2: 我刚刚创建了一个新的文本文件并输入了一些随机的东西进行测试,它工作正常。看起来原始文件有一些不好的字符/编码,这会打印到控制台。

3 个答案:

答案 0 :(得分:1)

你有EOL(AKA行尾)问题吗?试试这个:

passwords = File.open('C:\Users\Ryan\Desktop\pw.txt', 'r')
lines = passwords.gets
lines.each { |line| puts line.chomp }
passwords.close

chomp来电将删除所有\n\r\r\n行结尾,然后puts会附加原生EOL。

答案 1 :(得分:0)

File.open('C:\Users\Ryan\Desktop\pw.txt') do |line|
  while not line.eof?
    puts line.readline.chomp
  end
end

File.read("file").each { |line| puts line.chomp }

答案 2 :(得分:0)

最后我发现文本文件是导致我出问题的原因。我创建了一个具有相同内容的新内容,它开始按照我的意图工作。