我是编程的新手,我正在努力学习Ruby The Hard Way。在练习15中,他展示了如何打开和阅读文本文件,以及如何将其打印到屏幕上。在接下来的练习中,他在开头简要提到了“。”和“#”。 command"读取文件的内容。您可以将结果分配给变量。"
我想知道的是如何将读取结果分配给新变量。在练习16中,他没有使用它,只是继续写作。我写了一个简短的脚本来阅读包含数字的文本文件,然后是' .to_i'那个数字并返回一个布尔值。我知道我错过了一些东西,但它并没有让我感到满意。
基本上我需要知道的是如何将txt.read输出分配给一个新变量(简称为' variable'),然后使用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 }
答案 0 :(得分:1)
打开文件时,会在我们读取的文件中创建一个光标。在没有任何额外参数的情况下调用read
将读取整个文件并将该光标指向文件的末尾,因此任何后续read
调用都将返回空字符串(""
)。在您的情况下,您需要先分配,然后再做其他事情:
txt = open(filename)
content = txt.read
print content
variable = content.to_i
您可以将此与调用read
进行多次比较,并使用一个表示要读取的字节数的参数。每次都会获得指定长度的另一个文件块。
此外,你的最后一个电话可能有问题 - 打印不会阻止,这就是你传递的内容。您只需要print(variable > 4)
或类似的东西。
答案 1 :(得分:0)
print "Enter the filename: "
filename = gets.chomp
file = open(filename)
variable = file.read
file.close
number = variable.to_i
答案 2 :(得分: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相关的对象。
我想知道的是如何分配读取的结果 一个新的变量。
与往常一样,只需使用=字符进行分配。
您也可以分配方法的返回值 在上面的例子中,将是一个数组或一个字符串。
使用数组,您可以更轻松地操作事物, 但是从String转换为Array并返回很简单 无论如何。请记住,大文件可能会导致 轻微的速度惩罚,因为您将阅读完整的文件 在执行File.readlines()
时进入内存在练习16中,他没有使用它,只是继续写作。
没有人说这是一个很好的教程。 :)
我更喜欢旧的Chris Pine,但是应该更新 适合2015年。
我写了一个简短的脚本来读取包含数字的文本文件, 然后'.to_i'那个数字并返回一个布尔值。我知道我 遗失了一些东西,并没有加起来。
使用.to_i获取整数。
像:
"5".to_i # 5
你会回来5而不是“5”。
您的“返回布尔值”的陈述似乎并非如此 很有道理,因为只有两个“布尔” 红宝石中的值,这是真的和假的。你可以使用其他 对于if / else检查也是如此,例如nil,即 有点类似于假(但不完全相同):
unless nil
puts 'Hello World!'
end
基本上我需要知道的是如何分配txt.read输出 到一个新变量(简称为'变量'),然后使用 gets.chomp.to_i将其转换为整数,所以布尔值 比较工作。感谢任何帮助,谢谢!
是的,只需分配即可。
filename = gets.chomp
^^^这里你将在变量中输入一个名为 文件名。
txt = open(filename)
^^^这不好。为什么不使用File.open()?
print txt.read
我不喜欢这个。您应该在方法上使用.read() 以上就像:
txt = File.read(filename)
不需要.open()。
variable = txt.read.to_i ##尝试将txt.read分配给变量?
这没有任何意义。为什么使用.to_i?
你不需要Integer / Fixnum。你需要一个字符串。
print {variable> 4&&假}
这条线对我来说也没有意义。
您似乎想根据那里的数字进行一些检查?