从 Ruby Rake 中文件的每一行创建一个数组

Create an array from each line of a file in Ruby Rake

我想在 Ruby rake 中创建一个名为 ARRAY 的数组,其中 infile ("infile.txt") 的每一行都是数组的一个元素。 到目前为止我是这样尝试的:

desc "Create new array"
task :new_array do
ARRAY=Array.new
end

desc "Add elements to array"
task :add_elements => [:new_array] do
File.open("infile.txt").each do |line|
ARRAY.push(#{line})
end
end

但是,我收到以下错误:

syntax error, unexpected keyword_end, expecting ')'

为“ARRAY.push(#{line})”之后的结尾

有人可以向我解释问题出在哪里,或者让我知道另一种方法吗?

非常感谢!

您的问题是您试图在字符串外部使用字符串插值 (#{...}):

ARRAY.push(#{line})
# ---------^^^^^^^

您可以通过添加一些双引号来使用字符串插值:

ARRAY.push("#{line}")

但不需要将字符串 (line) 转换为相同的字符串 ("#{line}"),因此您可以直接推入数组:

ARRAY.push(line)

或者您可以跳过所有显式迭代并使用 #to_a:

array = File.open("infile.txt").to_a

如果您想去掉换行符:

array = File.open('infile.txt').map(&:chomp)

因为 engineersmnky points out in the comments, using File.readlines 是更好的方法:

array = File.readlines('infile.txt')
array = File.readlines('infile.txt').map(&:chomp)
#...

在处理文件时不要忘记检查 IO as well as File 方法。

您也可以这样做:

array = []

IO.foreach("path/to/file.txt") { |line|

  array.push(line.chomp)

} 

然后如果你想从空行中清除数组,只需使用删除:

array.delete("")