J'ai un fichier journal avec beaucoup d'espaces arbitraires:
Number of active files:
20
Missing files:
10
J'essaie de déterminer si une certaine chaîne comme celle-ci:
Expected_string = "Number of active files: 20"
est contenu dans le fichier journal. Existe-t-il un moyen facile de comparer les chaînes sans tenir compte de la variation dans les espaces?
J'utilise une méthode qui ressemble à ceci:
def isStringInLog?(string)
if open(@log_full_path).grep(/#{string}/).size > 0
return true
end
return false
end
Cependant, cela ne fonctionne que si les chaînes correspondent exactement.
Réponses:
1 pour la réponse № 1Vous pouvez utiliser Ruby "s gsub pour transformer toutes les instances d'un ou plusieurs caractères d'espacement (y compris les sauts de ligne) en un seul espace:
def string_in_log?(str)
File.read(@log_full_path).gsub(/s+/, " ").include?(str)
end
gsub
utilise l'expression régulière /s+/
pour remplacer tous les groupes d'espaces par un seul espace.
De plus, les variables ruby (sauf les constantes) et les noms de méthode doivent commencer par une lettre minuscule et utiliser snake_case, pas camelCase.
0 pour la réponse № 2
Peut-être casser et rejoindre le journal?
log = <<-EOF
Number of active files:
20
Missing files:
10
EOF
pattern = "Number of active files: 20"
puts log.split.join(" ").include?(pattern) # true