Вопрос

У меня есть строка в Ruby, s (скажем), которые могут иметь любое из стандартных окончаний строк (\n, \r\n, \r).Я хочу преобразовать все это в \nс.Какой лучший способ?

Это кажется очень распространенной проблемой, но документации по ней не так уж и много.Очевидно, что существуют простые и грубые решения, но есть ли что-нибудь встроенное, чтобы справиться с этим?

Элегантные, идиоматические решения на Ruby — лучшие.

РЕДАКТИРОВАТЬ:понял, что ^M и \r одинаковы.Но есть еще три случая.(Видеть Википедия.)

Это было полезно?

Решение

Лучше всего просто обработать два случая, которые вы хотите изменить конкретно, и не пытаться хитрить:

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

Другие советы

Начиная с Ruby 1.9 вы можете использовать String::encode с universal_newline: true чтобы поместить все ваши новые строки в \n сохраняя при этом вашу кодировку без изменений:

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

Попав в известное состояние новой строки, вы можете свободно конвертировать обратно в CRLF, используя :crlf_newline.например:конвертировать файл неизвестного (возможно смешанного) окончания в CRLF (например), прочитайте его в двоичном режиме, затем:

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

Я думаю, что самым чистым решением было бы использовать регулярное выражение:

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

Попробуйте открыть их в среде IDE NetBeans. Раньше в одном из проектов, которые я открывал из другого места, меня спрашивали, хочу ли я исправить окончания строк.Я думаю, что в меню тоже может быть такая опция, но это было бы первое, что я бы попробовал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top