在阵列Ruby中查找文字



我有一个代码

require 'rubygems'
conf_array = []
File.open("C:/My Program Files/readme.txt", "r").each_line do |line|
conf_array << line.chop.split("t")
end
a = conf_array.index{|s| s.include?("server =")}
puts a

,它不显示项目的索引。为什么?

数组看起来像

conf_array = [
  ["# This file can be used to override the default puppet settings."],
  ["# See the following links for more details on what settings are available:"],
  ["# - docs.puppetlabs.com/puppet/latest/reference/config_important_settings.html"],
  ["# - docs.puppetlabs.com/puppet/latest/reference/config_about_settings.html"],
  ["# - docs.puppetlabs.com/puppet/latest/reference/config_file_main.html"],
  ["# - docs.puppetlabs.com/references/latest/configuration.html"], ["[main]"],
  ["server = server.net.pl"],
  ["splay = true"],
  ["splaylimit = 1h"],
  ["wiatforcert = 30m"],
  ["http_connect_timeout = 2m"],
  ["http_read_timeout = 30m"],
  ["runinterval = 6h"],
  ["waitforcert = 30m"]
]

和下一个如何显示该项目?我的意思是 a = conf_array[#{a}]说语法错误。

我也尝试了

new_array = []
new_array = conf_array.select! {|s| s.include?("server =")}

,它又不会显示找到的项目。有任何建议吗?

Enumerable#grep

的完美用例
File.open("C:/My Program Files/readme.txt", "r")
    .each_line
    # no need to .flat_map { |l| l.split(/t/) }
    .grep /server =/
#⇒  ["server = server.net.pl"]

问题是您不调用String#include?,而是Array#include?

["server = something.pl"].include?('server = ')
# false
"server = something.pl".include?('server = ')
# true

删除split("t")

要将文件读为数组,您可以使用:

conf_array = File.readlines("C:/My Program Files/readme.txt")

conf_array = File.readlines("C:/My Program Files/readme.txt").map(&:chomp)

最新更新