我正在努力学习 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 && 假 }
这条线对我来说也没有意义。
您似乎想根据那里的数字进行一些检查?