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

时间:2015-05-10 08:11:19

标签: ruby learn-ruby-the-hard-way

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

3 个答案:

答案 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&&假}

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

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