Подтвердить что ты не робот

Нормализация строк в Ruby

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

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

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

EDIT: понял, что ^M и \r совпадают. Но есть еще три случая. (См. wikipedia.)

4b9b3361

Ответ 1

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

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

Ответ 2

С 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)

Ответ 3

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

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

Ответ 4

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