如何在Cinch和Ruby中多次读取文件

时间:2016-07-09 01:26:44

标签: ruby file cinch

我有这段代码:

on :message, "something" do |m|
  m.reply file.read.lines[2]
end

......哪个有效,但只有一次。当我再次尝试或使用相同的代码但使用不同的文件时,它不起作用。有人可以帮我这么做吗?

1 个答案:

答案 0 :(得分:0)

您获得此行为的原因取决于您如何定义file

但是没有其他信息,仍然可以提供一个(希望)工作的例子:

on :message, "something" do |m|
  first_line_to_read = 0
  last_line_to_read = 2
  lines_of_text = file.read.split("\n")
  first_line_to_read.upto(last_line_to_read).each do |idx|
    m.reply lines_of_text[idx]
  end
end

希望这个例子很清楚。它为first_line_to_readlast_line_to_read索引范围内的每行文本发送单独的回复。

一些重要的概念是:

  • 将整个文件读入字符串并将其存储到变量中。如果由于某种原因你无法多次调用file.read,这将存储第一次调用它的结果。
  • 按换行符分割字符串
  • 使用迭代器逐个浏览所需的文本行
  • 在迭代器块内,使用父作用域中定义的m变量来发送消息。