ruby newline line-breaks

Normalizando los finales de línea en Ruby.



newline line-breaks (4)

Tengo una cadena en Ruby, s (por ejemplo) que podría tener cualquiera de los finales de línea estándar ( /n , /r/n , /r ). Quiero convertir todos esos a /n s. ¿Cuál es la mejor manera?

Esto parece un problema muy común, pero no hay mucha documentación al respecto. Obviamente, hay soluciones simples, pero ¿hay algo integrado para manejar esto?

Las soluciones elegantes, idiomáticas-rubí son las mejores.

EDIT: se dio cuenta de que ^M y /r son lo mismo. Pero todavía hay tres casos. (Ver wikipedia ).


Creo que la solución más limpia sería usar una expresión regular:

s.gsub! //r/n?/, "/n"


Desde ruby ​​1.9 puede usar String::encode con universal_newline: true para convertir todas sus nuevas líneas en /n mientras mantiene su codificación sin cambios:

s.encode(s.encoding, universal_newline: true)

Una vez en un estado de nueva línea conocido, puede volver a convertir libremente a CRLF usando :crlf_newline . por ejemplo: para convertir un archivo de final desconocido (posiblemente mixto) a CRLF (por ejemplo), léalo en modo binario, luego:

s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)


Intente abrirlos en el IDE de NetBeans. Me lo han pedido antes, en uno de los proyectos que he abierto desde otro lugar, si quisiera arreglar los finales de línea. Creo que podría haber una opción de menú para hacerlo también, pero eso sería lo primero que intentaría.


Lo mejor es manejar los dos casos que desea cambiar específicamente y no tratar de ser demasiado inteligente:

s.gsub //r/n?/, "/n"