2009-03-02 12 views

Antwort

84

String#each_line

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

Sie Monster! liebe es –

19

Was Iraimbilanja sagte.

Oder man könnte die Saite an neuen Linien aufgeteilt:

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

Beachten Sie, dass each_line hält die Zeilenvorschub Zeichen, während split sie isst.

Beachten Sie, dass die Regex, die ich hier verwendet, für alle drei Zeilenendeformate sorgen wird. String#each_line trennt Zeilen durch das optionale Argument sep_string, das standardmäßig auf $/ gesetzt wird, das selbst standardmäßig "\n" ist.

Schließlich, wenn Sie komplexere String-Parsing durchführen möchten, überprüfen Sie die integrierte StringScanner-Klasse.

3

Sie können auch mit mit einem beliebigen Muster tun:

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 

Ich denke, diese Pflege der Zeilenumbrüche nehmen sollte.

+1

Das wird nicht funktionieren. String # each_line ohne einen Block gibt einen Enumerator zurück, der nicht auf chomp reagiert. Jenseits chomp nimmt keinen Block. – Chuck

+1

Etwas wie 'str.each_line.map (&: chomp) .each do | line | ...' würde das tun, aber Sie können es genauso gut in der 'each_line'-Iteration als einen einzigen Durchlauf tun. – jwadsack

Verwandte Themen