2009-03-02 12 views

risposta

84

String#each_line

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

Sei un mostro! lo amo –

19

Cosa iraimbilanja detto.

Oppure si potrebbe dividere la stringa in nuove linee:

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

Attenzione che each_line mantiene i caratteri di avanzamento riga, mentre split li mangia.

Nota la regex che ho usato qui si prenderà cura di tutti e tre i formati di fine riga. String#each_line separa le righe dall'argomento facoltativo sep_string, che per impostazione predefinita è $/, che per impostazione predefinita è "\n" predefinito.

Infine, se si desidera eseguire un parsing di stringhe più complesso, controllare la classe StringScanner incorporata.

3

Si può anche fare con con qualsiasi modello:

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 

credo che questo dovrebbe prendersi cura dei ritorni a capo.

+1

Questo non funzionerà. La stringa # each_line senza un blocco restituisce un enumeratore, che non risponde a chomp. Beyond chomp non prende un blocco. – Chuck

+1

Qualcosa come 'str.each_line.map (&: chomp) .each do | line | ...' lo farebbe, ma si potrebbe anche farlo nell'iterazione 'each_line' come un singolo passaggio. – jwadsack

Problemi correlati