将 .read 结果分配给变量?(学习 Ruby The Hard Way Ex. 15/16)



我是编程新手,我正在研究学习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 }

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

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

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

此外,您的最终调用可能有问题 - 打印不需要块,这就是您要传递的内容。你只需要print(variable > 4)或类似的东西。

print "Enter the filename: "
filename = gets.chomp
file = open(filename)
variable = file.read
file.close
number = variable.to_i

我正在研究学习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 相关的对象。

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

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

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

使用数组,您可以更轻松地操作事物, 但是从字符串转换为数组并返回很简单 反正又是。请记住,大文件可能会导致 轻微的速度损失,因为您将阅读完整的文件 当你执行 File.readlines() 时放入内存

在练习16中,他不使用它,只是继续写作。

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

我更喜欢旧的克里斯派恩,但应该更新为 2015年补编。

我写了一个简短的脚本来读取一个包含数字的文本文件, 然后".to_i"该数字并返回布尔值。我知道我是 错过了一些东西,它对我来说并不重要。

使用 .to_i 获取整数。

喜欢:

"5".to_i # 5

你会得到 5 而不是"5"。

您的"返回布尔值"的陈述似乎没有 很有意义,因为只有两个"布尔值" 红宝石中的值,为真和假。您可以使用其他 变量也是如此,用于 if/else 检查,例如 nil,即 有点类似于 false(但不完全相同):

unless nil
puts 'Hello World!'
end

基本上我需要知道的是如何分配txt.read输出 到一个新变量(简称为"变量"),然后使用 gets.chomp.to_i将其转换为整数,以便布尔值 比较有效。任何帮助不胜感激,谢谢!

是的,只需分配它。

文件名 = gets.chomp

^^^ 在这里,您将在名为 文件名。

txt = 打开(文件名)

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

打印 txt.read

我不喜欢这样。你应该在方法上使用 .read() 以上喜欢:

txt = File.read(filename)

不需要 .open()。

变量 = txt.read.to_i ##Trying 将 txt.read 分配给变量?

这是没有道理的。你为什么使用.to_i?

您不需要那里的整数/修复数字。你需要一个字符串。

print { 变量> 4 && false }

这句话对我来说也毫无意义。

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

最新更新