Normalizzare fine riga in Ruby
-
11-09-2019 - |
Domanda
Ho una stringa in Ruby, s
(diciamo) che potrebbe avere una delle terminazioni di linea standard (\n
, \r\n
, \r
). Voglio convertire tutti coloro a \n
s. Qual è il modo migliore?
Questo mi sembra un super-problema comune, ma non c'è molta documentazione su di esso. Ovviamente ci sono soluzioni facili greggio, ma c'è qualcosa costruito per gestire questa situazione?
, soluzioni-Rubino idiomatiche eleganti sono i migliori.
EDIT: si rese conto che ^M
e \r
sono gli stessi. Ma ci sono ancora tre casi. (Vedere wikipedia .)
Soluzione
Best è solo per gestire i due casi che si desidera modificare in modo specifico e non cercare di ottenere troppo intelligente:
s.gsub /\r\n?/, "\n"
Altri suggerimenti
Da Ruby 1.9 è possibile utilizzare String::encode
con universal_newline: true
per ottenere tutte le nuove linee in \n
mantenendo invariata la codifica:
s.encode(s.encoding, universal_newline: true)
Una volta in uno stato a capo noto si può liberamente riconvertire CRLF utilizzando :crlf_newline
. ad esempio: per convertire un file di ignota (possibilmente misto) finendo per CRLF
(per esempio), leggerlo in modo binario, quindi:
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
Credo che la soluzione più pulita sarebbe quella di utilizzare un'espressione regolare:
s.gsub! /\r\n?/, "\n"
Prova aprirli su NetBeans IDE - La sua mi ha chiesto prima, su uno dei progetti che ho aperto da altrove, se volevo risolvere i fine linea. Penso che ci potrebbe essere un opzione di menu per farlo troppo, ma che sarebbe la prima cosa che vorrei provare.