如何在Ruby中读取已写入的文件

14 浏览
0 Comments

如何在Ruby中读取已写入的文件

当我运行以下代码,该代码取自Learn Ruby the Hard Way 课程练习16时,

filename = ARGV.first
target = open(filename, 'w+')
puts "Now I'm going to ask you for three lines."
print "line 1: "
line1 = $stdin.gets.chomp
print "line 2: "
line2 = $stdin.gets.chomp
print "line 3: "
line3 = $stdin.gets.chomp
puts "I'm going to write these to the file."
target.write(line1 + "\n" + line2 + "\n" + line3)
puts "And now I'm going to print the file to prove I have altered it."
puts target.read
puts "And finally, we close it."
target.close

即使文本文件发生了更改,puts target.read这一行并不打印出三个输入行。

我尝试改变open方法使用的模式,并在调用read方法之前添加一个新的open方法。创建一个独立的程序,使用相同的脚本来读取和打印文本文件时,正常工作。

我如何读取刚刚写入的文件?为什么在同一个程序中写入和读取时不起作用?

0
0 Comments

为什么在同一个程序中写入和读取文件时会出现问题?

答案是,当你向文件写入内容时,IO流会被设置到你写入的结尾位置。当你进行读取操作时,它会从这个位置继续。在这种情况下,写入后,你已经到达文件的结尾,没有其他内容可以“读取”。你可以使用IO#rewind将流重新回滚到开头,并通过IO流输出刚刚写入的内容。

filename = 'Test.txt'
target = open(filename, 'w+')
text = '12345'
target.write(text) # target指向EOF
puts "现在我要将文件倒回到开头"
puts target.rewind # 回到文件开头
# => 0
puts "现在我要输出文件来证明我已经将其倒回到开头"
puts target.read # 读取文件,target现在指向EOF
# => '12345'
target.close

在上述代码中,我们首先打开一个文件,并将内容写入文件中。然后,我们使用`target.rewind`将IO流重置到文件的开头,并使用`target.read`读取文件的内容。最后,我们关闭文件。这样,我们就可以在同一个程序中正确地写入和读取文件了。

0
0 Comments

问题的原因是如何在文件被写入后读取它。解决方法是使用Ruby的File类和相应的方法来打开和读取文件。下面是一种解决方法:

File.open("my/file/path", "r") do |f|
  f.each_line do |line|
    puts line
  end
end

上述代码中,我们使用`File.open`方法打开文件并传入文件路径和打开模式("r"表示只读)。然后,我们使用`each_line`方法遍历文件的每一行,并使用`puts`语句打印每一行的内容。

另一种解决方法是在代码块结束后显式关闭文件。代码如下:

f = File.open("my/file/path", "r")
f.each_line do |line|
  puts line
end
f.close

上述代码中,我们首先使用`File.open`方法打开文件并将其赋值给变量`f`,然后进行读取操作。最后,我们使用`close`方法显式关闭文件。

,我们可以使用Ruby的File类和相关方法来读取在文件被写入后的内容。我们可以使用`File.open`方法打开文件并传入文件路径和打开模式,然后使用相应的方法来读取文件的内容。如果需要的话,我们可以在代码块结束后显式关闭文件。

原文链接:https://stackoverflow.com/a/5545284/8328756

0