1

解决了这个问题,我已经完全像问题状态一样输入了代码 - 甚至尝试复制和粘贴以查看它是否是我做错的事情,但事实并非如此。

我拥有的代码在这篇文章的底部。我正在发送参数“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)
4

1 回答 1

0

编辑: 看起来您正在使用的测试文件仅包含\r指示换行符的字符,而不是 windows\r\n或 linux \n。您的文本编辑器可能会解释\r为换行符,但 ruby​​ 不会。

原答案:

至于你的第一个问题print_all,我无法重现它。你如何运行脚本?

在第二个问题中,您使用的是方法file.readlines()(注意最后的 s)而不是file.readline().

file.readlines()读取整个文件并在数组中返回其内容,每一行作为数组的一个元素。这就是为什么您在第一次通话中获得整个文件的原因。后续调用返回空数组,因为您是文件的结尾(您需要像以前一样“倒带”以继续从文件中读取)。

file.readline()读取文件的一行并将其内容作为字符串返回,这可能是您想要的。

我链接到 ruby​​ 文档以进一步阅读(没有双关语)关于这个问题。请注意,IO该类的文档中详细介绍了相关方法,因为File继承自此类,而 readlines/readline 方法继承自IO.

于 2014-06-18T08:28:35.560 回答