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 \ns 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 .)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top