Консоль Ruby перезаписывает строки при печати строк в файле - PullRequest
0 голосов
/ 13 апреля 2011

Я начал изучать 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 ]

1 голос
/ 13 апреля 2011

Есть ли у вас проблемы с EOL (AKA end-of-line)? Попробуйте это:

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.

0 голосов
/ 14 апреля 2011

В итоге я узнал, что текстовый файл стал причиной моей проблемы.Я создал новый с тем же содержанием, и он начал работать так, как я планировал.

0 голосов
/ 13 апреля 2011
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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...