Как я могу напечатать строку, содержащуюся в объекте, как литерал с Ruby? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь написать программу, которая обнаружит, если файл имеет \n или \r\n окончания строк, а затем исправит их.Я надеюсь, что скрипт выведет некоторые сообщения на консоль, но у меня проблемы.Я не могу понять, как печатать окончания строк как литералы.

Вот мой метод, который проверяет тип окончания строки:

def determine_line_ending(filename)
  File.open(filename, 'r') do |file|
    return file.readline[/\r?\n$/]
  end
end
ending = determine_line_ending(ARGV.first)

Возможно, этот метод вернет либо \n или \r\n, если он совпадает с одним из этих шаблонов в первой строке файла.

Затем я хочу вывести на консоль, какой тип конца был обнаружен, но если я использую puts ending, тогда он простодобавляет конец строки в консоль.Я знаю, что если бы я использовал puts '\r\n', то он напечатал бы их буквально, или если я использовал двойные кавычки, мне просто нужно было избежать обратной косой черты.Но я довольно новичок в Ruby, и мне трудно найти способ напечатать мою переменную как литерал вместо строки.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я бы использовал метод String#inspect:

s = "abc\n\rdef"
puts s
puts s.inspect

Это очень удобный метод, который определен для всех объектов.Вы можете печатать хэши, массивы, что угодно.

0 голосов
/ 25 сентября 2018

Если я вас хорошо понимаю, вы хотите напечатать строку "\ r", если окончание строки равно \ r, и "\ r \ n", если \ r \ n.

В этом случаеВы можете использовать функцию dump , что вам нужно:

puts ending.dump // => "\r" or "\r\n"
...