1

我是编程的新手,我正在学习 Ruby The Hard Way。在练习 15 中,他展示了如何打开和读取文本文件,以及如何将其打印到屏幕上。在下一个练习中,他在开头简要提到了“.read”命令“读取文件的内容。您可以将结果分配给变量。”

我只想知道如何将读取结果分配给新变量。在练习 16 中,他没有使用它,而是继续写作。我写了一个简短的脚本来读取一个包含数字的文本文件,然后“.to_i”那个数字并返回一个布尔值。我知道我遗漏了一些东西,这对我来说并不重要。

基本上我只需要知道如何将 txt.read 输出分配给一个新变量(简称为“变量”),然后使用 gets.chomp.to_i 将其转换为整数,以便布尔比较起作用。任何帮助表示赞赏,谢谢!

print "Enter the filename: "
filename = gets.chomp

txt = open(filename)
print txt.read
variable = txt.read.to_i ##Trying to assign the txt.read to a variable?

print { variable > 4 && false }
4

3 回答 3

1

打开文件时,会在我们已读取的文件中创建一个光标。不带任何额外参数的调用read会读取整个文件并将光标指向文件末尾,因此任何后续read调用都将返回一个空字符串 ( "")。在您的情况下,您需要先分配,然后再执行其他任何操作:

txt = open(filename)
content = txt.read
print content
variable = content.to_i

您可以将此与read多次调用与表示要读取的字节数的参数进行比较。每次您将获得另一块指定长度的文件。

此外,您的最终电话可能有问题 - print 不会占用任何内容,这就是您要传递的内容。你只需要print(variable > 4)或类似的东西。

于 2015-05-10T08:28:34.927 回答
0
print "Enter the filename: "
filename = gets.chomp

file = open(filename)
variable = file.read
file.close
number = variable.to_i
于 2015-05-10T10:04:16.603 回答
0

我正在努力学习 Ruby The Hard Way。

小心这本书——它是由编写 Python 代码多于 Ruby 代码的人编写的。

这将不可避免地影响在 Ruby 中做某事的惯用方式。

练习 15 展示如何打开和读取文本文件

一般来说,这很容易:

data = File.readlines('foo.txt')
data = File.read('foo.txt')

执行以下操作也是一个好习惯:

if File.exist? 'foo.txt'

在此之前检查,否则上述可能会失败。

以及如何将其打印到屏幕上

也很简单。一旦你有了句柄,通过变量,你就可以输出它了。

如果你喜欢调试,我推荐使用 pp:

require 'pp'
pp data # From the above variable name.

在下一个练习中,他在开头简要提到了“.read”命令“读取文件的内容。您可以将结果分配给变量。”

对,那是正确的。.read() 是一种可用于文件以及与 IO 相关的对象的方法。

我只想知道如何将读取结果分配给新变量。

和往常一样,只需使用 = 字符进行赋值。

您也可以分配方法的返回值,在上述情况下,它将是一个数组或字符串。

使用 Array,您可能更容易操作事物,但是从 String 转换为 Array 并再次转换回来很简单。请记住,大文件可能会导致轻微的速度损失,因为您在执行 File.readlines() 时会将整个文件读入内存

在练习 16 中,他没有使用它,而是继续写作。

没有人说这是一个很好的教程。:)

我更喜欢旧的 Chris Pine,但应该更新以适应 2015 年。

我写了一个简短的脚本来读取一个包含数字的文本文件,然后“.to_i”那个数字并返回一个布尔值。我知道我遗漏了一些东西,这对我来说并不重要。

您使用 .to_i 获取整数。

喜欢:

"5".to_i # 5

你会得到 5 而不是“5”。

你所说的“返回一个布尔值”似乎没有多大意义,因为 ruby​​ 中只有两个“布尔”值,分别为真和假。您也可以使用其他变量来进行 if/else 检查,例如 nil,这有点类似于 false(但不相同):

unless nil
  puts 'Hello World!'
end

基本上我只需要知道如何将 txt.read 输出分配给一个新变量(简称为“变量”),然后使用 gets.chomp.to_i 将其转换为整数,以便布尔比较起作用。任何帮助表示赞赏,谢谢!

是的,只需分配它。

文件名=gets.chomp

^^^ 在这里,您将在名为 filename 的变量中输入。

txt = 打开(文件名)

^^^ 这不好。为什么不使用 File.open() 代替?

打印 txt.read

我不喜欢这个。您应该在上面的方法上使用 .read() ,例如:

txt = File.read(filename)

不需要 .open()。

variable = txt.read.to_i ##尝试将 txt.read 分配给变量?

这是没有意义的。为什么使用 .to_i?

您在那里不需要整数/固定数字。你需要一个字符串。

打印 { 变量 > 4 && 假 }

这条线对我来说也没有意义。

您似乎想根据那里的数字进行一些检查?

于 2015-05-10T10:44:12.260 回答