Ответ 1
Лучше всего справиться с двумя случаями, которые вы хотите изменить конкретно, и не пытаться стать слишком умными:
s.gsub /\r\n?/, "\n"
У меня есть строка в Ruby, s
(скажем), которая может иметь любое стандартное окончание строки (\n
, \r\n
, \r
). Я хочу преобразовать все из них в \n
s. Какой лучший способ?
Это похоже на суперсовременную проблему, но документации о ней нет. Очевидно, есть простые решения для сырой нефти, но есть ли что-нибудь, что можно было бы с этим справиться?
Элегантные, идиоматически-рубиновые решения лучше всего.
EDIT: понял, что ^M
и \r
совпадают. Но есть еще три случая. (См. wikipedia.)
Лучше всего справиться с двумя случаями, которые вы хотите изменить конкретно, и не пытаться стать слишком умными:
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 - она спросила меня раньше, в одном из проектов, которые я открыла из других источников, если бы я хотел исправить окончания строк. Я думаю, что может быть и опция меню, чтобы сделать это тоже, но это было бы первым, что я попробовал бы.