Existe-t-il un moyen de faire la structure Perl suivante dans Ruby?Ruby: gamme de correspondance ligne par ligne
while(my $line = $file->each_line()) {
if($line =~ /first_line/ .. /end_line_I_care_about/) {
do_something;
# this will do something on a line per line basis on the range of the match
}
}
En rubis qui se lirait comme suit:
file.each_line do |line|
if line.match(/first_line/) .. line.match(/end_line_I_care_about/)
do_something;
# this will only do it based on the first match not the range.
end
end
La lecture du fichier en mémoire n'est pas une option et je ne sais pas quelle est la partie de la plage.
EDIT:
Merci pour les réponses, les réponses que j'ai eu où fondamentalement les mêmes que le code que j'avais en premier lieu. Le problème que j'avais était "Il peut tester l'opérande droit et devenir faux sur la même évaluation, il est devenu vrai (comme dans awk), mais il revient toujours vrai une fois."
"Si vous ne voulez pas tester l'opérande droit jusqu'à la prochaine évaluation, comme dans sed, il suffit d'utiliser trois points (" ... ") au lieu de deux. "se comporte comme" .. "fait."
Je marque la bonne réponse comme celle qui m'a montré que '..' peut être désactivé dans le même appel que celui-ci.
Pour référence, le code que je utilise est:
file.each_line do |line|
if line.match(/first_line/) ... line.match(/end_line_I_care_about/)
do_something;
end
end
Pouvez-vous commenter le fait que l'opérateur de bascule soit déconseillé? Je trouve cela très concis et utile et je ne vois pas pourquoi vous ne l'utiliseriez pas à moins que votre argument soit que les nouveaux programmeurs ne le sachent pas, mais là encore les nouveaux programmeurs n'en savent pas beaucoup ... – DavidG