Normalisieren Zeilenende in Ruby
-
11-09-2019 - |
Frage
Ich habe eine Zeichenfolge in Ruby, s
(sagen wir), die eine der Standard-Zeilenenden haben könnte (\n
, \r\n
, \r
). Ich möchte all die \n
s konvertieren. Was ist der beste Weg?
Das scheint wie ein Super-weit verbreitetes Problem, aber es gibt nicht viel Dokumentation darüber. Offensichtlich gibt es einfach rohe Lösungen, aber gibt es etwas gebaut zu handhaben?
Elegant, idiomatische-Ruby-Lösungen sind am besten.
EDIT: klar, dass ^M
und \r
gleich sind. Aber es gibt noch drei Fälle. (Siehe wikipedia .)
Lösung
Best ist nur die beiden Fälle zu behandeln, die Sie speziell ändern möchten und nicht versuchen, zu klug zu bekommen:
s.gsub /\r\n?/, "\n"
Andere Tipps
Da Ruby 1.9 Sie verwenden können, String::encode
mit universal_newline: true
alle neuen Linien in \n
zu erhalten, während die Codierung unverändert zu halten:
s.encode(s.encoding, universal_newline: true)
Wenn in einem bekannten Newline Zustand können Sie sich frei zu CRLF konvertieren zurück :crlf_newline
verwenden. zB: eine Datei unbekannt (möglicherweise gemischt) enden zu CRLF
(zum Beispiel), lesen Sie es in Binär-Modus zu konvertieren, dann:
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
Ich denke, die sauberste Lösung, die einen regulären Ausdruck zu verwenden sei:
s.gsub! /\r\n?/, "\n"
Versuchen Sie, auf NetBeans IDE zu öffnen - Its fragte mich vor, an einem der Projekte, die ich aus anderen Ländern geöffnet haben, wenn ich die Zeilenenden beheben wollte. Ich denke, es könnte eine Menüoption sein, es auch zu tun, aber das wäre das erste, was ich versuchen würde.