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

问题描述 投票:1回答:2

我想在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})”之后结束

有人可以向我解释问题是什么或让我知道另一种方法吗?

非常感谢!

arrays ruby rake
2个回答
1
投票

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

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)
#...

并且不要忘记在处理文件时检查IO以及File的方法。


0
投票

你也可以这样做:

array = []

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

  array.push(line.chomp)

} 

然后,如果要从空行清除数组,只需使用delete:

array.delete("")
© www.soinside.com 2019 - 2024. All rights reserved.