Pregunta

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

Este parece ser un problema muy común, pero no hay mucha documentación al respecto. Es obvio que hay soluciones fáciles de crudo, pero ¿hay algo construido en manejar esto?

Soluciones elegantes, idiomáticas-Rubí son los mejores.

EDIT: se dio cuenta de que ^M y \r son los mismos. Pero todavía hay tres casos. (Ver Wikipedia .)

¿Fue útil?

Solución

Mejor es sólo para manejar los dos casos que desea cambiar específica y no tratar de conseguir demasiado inteligente:

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

Otros consejos

Desde Ruby 1.9 se puede utilizar String::encode con universal_newline: true para conseguir todas sus nuevas líneas en \n, manteniendo la codificación sin cambios:

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

Una vez en un estado conocido de nueva línea se puede convertir libremente de un lado a CRLF usando :crlf_newline. por ejemplo: para convertir un archivo de desconocido (posiblemente mezclada) que termina a CRLF (por ejemplo), leerlo en modo binario, entonces:

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

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

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

Trate de abrirlos en NetBeans IDE - Su me preguntó antes, en uno de los proyectos que he abierto desde otro lugar, si quería fijar los finales de línea. Creo que podría ser una opción de menú para hacerlo también, pero eso sería lo primero que me gustaría probar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top