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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top