我想在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在评论中指出的那样,使用File.readlines
将是一个更好的方法:
array = File.readlines('infile.txt')
array = File.readlines('infile.txt').map(&:chomp)
#...
你也可以这样做:
array = []
IO.foreach("path/to/file.txt") { |line|
array.push(line.chomp)
}
然后,如果要从空行清除数组,只需使用delete:
array.delete("")