Тексты в файле не печатаются должным образом
Работая над этой проблемой, я набрал код ТОЧНО, как в состоянии проблемы - даже пытался скопировать и вставить, чтобы увидеть, было ли это что-то, что я делал неправильно, но это не так.
Код, который у меня есть, находится внизу этого поста. Я отправляю аргумент 'test.txt', который содержит:
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here
тем не менее, когда я запускаю код, во время print_all (current_file) он ТОЛЬКО печатает "очень и очень весело, чтобы иметь здесь". - которая является последней строкой файла.
И там, где предполагается распечатывать каждую отдельную строку, она печатает:
1 ["This is stuff I typed into a file. \rIt is really cool stuff. \rLots and lots of fun to have in here.\r\r"]
2 []
3 []'
по сути, захватывает все строки как 1 строку и ничего не печатает там, где предполагается печатать строки 2 и 3.
Есть идеи?
input_file = ARGV[0]
def print_all(f)
puts f.read()
end
def rewind(f)
f.seek(0, IO::SEEK_SET)
end
def print_a_line(line_count, f)
puts "#{line_count} #{f.readlines()}"
end
current_file = File.open(input_file)
puts "First let's print the whole file:"
puts # a blank line
print_all(current_file)
puts "Now let's rewind, kind of like a tape."
rewind(current_file)
puts "Let's print three lines:"
current_line = 1
print_a_line(current_line, current_file)
current_line += 1
print_a_line(current_line, current_file)
current_line += 1
print_a_line(current_line, current_file)
1 ответ
РЕДАКТИРОВАТЬ: похоже, что тестовый файл, который вы используете, содержит только символ \r
указывать новую строку вместо окон \r\n
или Linux \n
, Ваш текстовый редактор может интерпретировать \r
как новая строка, но рубин нет.
Оригинальный ответ:
Что касается первой проблемы с print_all
Я не мог воспроизвести это. Как вы запускаете скрипт?
Во второй задаче вы используете метод file.readlines()
(обратите внимание на последние с) вместо file.readline()
,
file.readlines()
читает весь файл и возвращает его содержимое в массиве, где каждая строка является элементом массива. Вот почему вы получаете весь файл при первом вызове. Последующие вызовы возвращают пустой массив, потому что вы - конец файла (вам нужно "перемотать", как вы делали это ранее, чтобы продолжить чтение из файла).
file.readline()
читает одну строку файла и возвращает его содержимое в виде строки, что, вероятно, то, что вы хотите.
Я связался с рубиновой документацией для дальнейшего чтения (без каламбура) по этому вопросу. Обратите внимание, что соответствующие методы подробно описаны в документации для IO
класс, так как File
наследуется от этого класса, а методы readlines/readline наследуются от IO
,