2009-03-02 10 views

Répondre

84

String#each_line

str.each_line do |line| 
    #do something with line 
end 
+3

de monstre! J'adore ça –

19

Qu'ont dit Iraimbilanja.

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

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

Garde-toi each_line garde les caractères de saut de ligne, tandis que split les mange.

Notez que la regex 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 lui-même est par défaut "\n" simplement. Enfin, si vous souhaitez effectuer un analyse de chaîne plus complexe, consultez la classe StringScanner intégrée.

3

Vous pouvez également faire avec avec tout motif:

str.scan(/\w+/) do |w| 
    #do something 
end 
-2
str.each_line.chomp do |line| 
    # do something with a clean line without line feed characters 
end 

Je pense que cela devrait prendre soin des nouvelles lignes.

+1

Ça ne marchera pas. String # each_line sans un bloc renvoie un énumérateur, qui ne répond pas à chomp. Au delà de chomp ne prend pas un bloc. – Chuck

+1

Quelque chose comme 'str.each_line.map (&: chomp) .each do | line | ...' le ferait, mais vous feriez mieux de le faire dans l'itération 'each_line' en un seul passage. – jwadsack

Questions connexes