Как я удаляю возвраты каретки с Ruby?

В Java, если вы определяете int с ведущим «0», означает, что вы определяете число в Octal.

int a = 08 выдает ошибку вне диапазона, потому что нет никакого число '8' в октябре. Octal предоставляет только 0-7 номеров.

Если вы определяете a = 07, то это не дает ошибку вне диапазона, потому что цифры «0» и «7» находятся в пределах Octal.

70
задан mat 12 December 2008 в 22:53
поделиться

4 ответа

Что Вы получаете, когда Вы делаете puts lines? Это даст Вам ключ к разгадке.

значением по умолчанию File.open открывает файл в текстовом режиме, таким образом, Ваш \r\n символы будут автоматически преобразованы в \n. Возможно, это - причина lines, всегда равны lines2. Чтобы препятствовать тому, чтобы Ruby анализировал концы строки, используют rb режим:

C:\> copy con lala.txt
a
file
with
many
lines
^Z

C:\> irb
irb(main):001:0> text = File.open('lala.txt').read
=> "a\nfile\nwith\nmany\nlines\n"
irb(main):002:0> bin = File.open('lala.txt', 'rb').read
=> "a\r\nfile\r\nwith\r\nmany\r\nlines\r\n"
irb(main):003:0>

, Но от Вашего вопроса и кода я вижу, что просто необходимо открыть файл с модификатором по умолчанию. Вы не нуждаетесь ни в каком преобразовании и можете использовать короче File.read.

23
ответ дан Rômulo Ceccon 7 November 2019 в 09:05
поделиться

Обычно, когда я имею дело с разделением \r или \n, я буду искать обоих путем выполнения чего-то как

lines.gsub(/\r\n?/, "\n");

, я нашел, что в зависимости от того, как данные были сохранены (используемая ОС, редактор использовал, отношение Юпитера к Io в то время) там может или может не быть новая строка после возврата каретки. Действительно кажется странным, что Вы видите оба символа в шестнадцатеричном режиме. Надежда это помогает.

35
ответ дан localshred 7 November 2019 в 09:05
поделиться
lines2 = lines.split.join("\n")
15
ответ дан Cameron Price 7 November 2019 в 09:05
поделиться

Как насчет следующего?

irb(main):003:0> my_string = "Some text with a carriage return \r"
=> "Some text with a carriage return \r"
irb(main):004:0> my_string.gsub(/\r/,"")
=> "Some text with a carriage return "
irb(main):005:0>

Или...

irb(main):007:0> my_string = "Some text with a carriage return \r\n"
=> "Some text with a carriage return \r\n"
irb(main):008:0> my_string.gsub(/\r\n/,"\n")
=> "Some text with a carriage return \n"
irb(main):009:0>
6
ответ дан mwilliams 7 November 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: