web-dev-qa-db-fra.com

Comment boucle-t-on une chaîne multiligne dans Ruby?

Question assez simple d'un premier Ruby programmeur.

Comment faites-vous une boucle à travers une dalle de texte en Ruby? Chaque fois qu'une nouvelle ligne est rencontrée, je veux redémarrer la boucle interne.

def parse(input)
    ...
end
48
alamodey

String # each_line

str.each_line do |line|
    #do something with line
end
105
Iraimbilanja

Ce que Iraimbilanja a dit.

Ou vous pouvez diviser la chaîne à de nouvelles lignes:

str.split(/\r?\n|\r/).each { |line| … }

Méfiez-vous que each_line conserve les caractères de saut de ligne, tandis que split les mange.

Notez que l'expression régulière que j'ai utilisée ici prendra en charge les trois formats de fin de ligne. String#each_line sépare les lignes par l'argument facultatif sep_string, qui est par défaut $/, qui par défaut est "\n" simplement.

Enfin, si vous souhaitez effectuer une analyse de chaîne plus complexe, consultez la classe StringScanner intégrée.

19
kch

Vous pouvez également faire avec n'importe quel modèle:

str.scan(/\w+/) do |w|
  #do something
end
3
Lolindrath