比较匹配字符串的数组



我有一个脚本,该脚本将其伸入一个框中,运行命令并保存输出。在此之后,我运行另一个脚本,该脚本通过输出文件解析,将其与位于另一个文件中的关键单词进行比较。如果匹配行,则应将整个行(从原始的telnet-utput)保存到新文件。

这是处理解析文本的脚本的一部分:

def parse_file
    filter = []
    temp_file = File.open('C:Ruby193scriptsPARSED_TRIAL.txt', 'a+')
    t = File.open('C:Ruby193scriptsTRIAL_output_log.txt')
    filter = File.open('C:Ruby193scriptsFiltered_text.txt').readlines
    t.each do |line|
        filter.each do |segment|
            if (line =~ /#{segment}/)
                temp_file.puts line
            end
        end
    end
    t.close()
    temp_file.close()
end

当前,它仅保存位于数组filter中的最后一个运行字符串并将其保存到temp_file中。看起来循环不会在数组中运行所有字符串,也不能保存所有字符串。我在文本文件Filtered_text.txt中放置了五个字符串。它仅将我的最后一个匹配的线打印到temp_file

此(未经测试的代码)将重复原始代码,仅更简洁,惯用:

filter = Regexp.union(File.open('C:Ruby193scriptsFiltered_text.txt').readlines.map(&:chomp))
File.open('C:Ruby193scriptsPARSED_TRIAL.txt', 'a+') do |temp_file|
  File.foreach('C:Ruby193scriptsTRIAL_output_log.txt') do |l|
    temp_file.puts l if (l[filter])
  end
end

让您了解发生了什么:

Regexp.union(%w[a b c])
=> /a|b|c/

这为您提供了一个正则表达式,该表达式将遍历弦,以寻找任何子字符串匹配。这是对案例敏感的搜索。

如果要关闭这些孔,请使用以下内容:

Regexp.new(
  'b' + Regexp.union(
    File.open('C:Ruby193scriptsFiltered_text.txt').readlines.map(&:chomp)
  ).source + 'b',
  Regexp::IGNORECASE
)

使用与上述相同的样品输入阵列的哪个将导致:

/ba|b|cb/i

相关内容

  • 没有找到相关文章

最新更新