У мене є файл журналу з великою кількістю довільних пробілів:
Number of active files:
20
Missing files:
10
Я намагаюся визначити, чи певний рядок подібний до цього:
Expected_string = "Number of active files: 20"
міститься у файлі журналу. Чи є простий спосіб порівняти рядки, не враховуючи зміни в пробілах?
Я використовую метод, який виглядає так:
def isStringInLog?(string)
if open(@log_full_path).grep(/#{string}/).size > 0
return true
end
return false
end
Однак це працює, лише якщо рядки точно збігаються.
Відповіді:
1 для відповіді № 1Ви можете використовувати Ruby "s gsub спосіб перетворити всі екземпляри одного або декількох пробілів (включаючи нові рядки) в єдиний пробіл:
def string_in_log?(str)
File.read(@log_full_path).gsub(/s+/, " ").include?(str)
end
gsub
використовує регулярний вираз /s+/
замінити всі групи пробілів одним пробілом.
Крім того, рубінові змінні (крім констант) та назви методів повинні починатися з малої літери та використовувати snake_case, не camelCase.
0 для відповіді № 2
Може зламати журнал і знову приєднатися до нього?
log = <<-EOF
Number of active files:
20
Missing files:
10
EOF
pattern = "Number of active files: 20"
puts log.split.join(" ").include?(pattern) # true