ruby записывает символ новой строки в файл, но не интерпретирует его как истинный символ новой строки - PullRequest
1 голос
/ 10 июня 2010

Я пытаюсь записать строку ruby ​​в файл таким образом, чтобы все символы новой строки, встроенные в строку, оставались встроенными.Это записывается в файл, который затем обрабатывается другим инструментом.

Пример ниже.

I want this: 1 [label="this is a\ntest"] \n (second \n is a true newline)
I have tried this: string = '1 [label="this is a\ntest"]' + "\n"

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

Я понял это.Я использовал вспомогательную функцию rails word_wrap для переноса текста, и это было с использованием \ n, а не \ nЯ скопировал функцию и написал свою.

Хорошо идти.

1 голос
/ 10 июня 2010

В Ruby одинарные кавычки не интерпретируют escape-последовательности. Вы можете использовать оператор цитаты:

string = %Q/1 [label="this is a\\ntest"] \n/

Символ после% Q является разделителем начала и конца строки. ruby разумно использует парные символы, которые имеют открытые близкие эквиваленты. например,

string = %Q{1 [label="this is a\\ntest"] \n}
string = %Q(1 [label="this is a\\ntest"] \n)
string = %Q!1 [label="this is a\\ntest"] \n!

Это позволяет вам выбрать удобный разделитель, не требующий дополнительного экранирования для конкретного строкового литерала.

0 голосов
/ 10 июня 2010

первая новая строка в примере выше читается как реальная новая строка нижестоящим инструментом обработки.

Тогда это звучит как ваша проблема. Ваш инструмент обработки берет буквальный whack-n (aka \ x5c \ x6e) и переводит его в один \ x0a).

Другими словами, ваш процесс вывода в порядке - это ваш процесс ввода небезопасен. Вы можете проверить свою строку так:

string.split(//).map {|x| x[0].ord.to_s(16)}

Вы заметите, что в конце есть только одна буква "a".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...