从 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)
#...
您也可以这样做:
array = []
IO.foreach("path/to/file.txt") { |line|
array.push(line.chomp)
}
然后如果你想从空行中清除数组,只需使用删除:
array.delete("")
我想在 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)
#...
您也可以这样做:
array = []
IO.foreach("path/to/file.txt") { |line|
array.push(line.chomp)
}
然后如果你想从空行中清除数组,只需使用删除:
array.delete("")