Отмена последовательности специальных символов в строках Ruby - PullRequest
4 голосов
/ 13 марта 2012

Я загружаю текст из файла, который содержит последовательность вроде:

abc\ndef\tghi

Я хочу «удалить» все специальные символы, например, обрабатывать \n как символ новой строки и \t как вкладку и т. д. вместо автоматического завершения, например, например, \\n или \\t в строке.

Есть ли простой способ сделать это?

Ответы [ 3 ]

6 голосов
/ 13 марта 2012

Текст будет загружен точно так же, как и в файле.Если файл имеет буквальный текст \ и n вместо новой строки, это то, что будет загружено.Если существует известный набор escape-кодов, которые вы хотите изменить, вы можете просто gsub их

line='abc\ndef\tghi'
line.gsub!('\n', "\n")
line.gsub!('\t', "\t")
1 голос
/ 30 ноября 2012

как насчет YAML.unescape?

require 'syck/encoding'
require 'yaml'

YAML.unescape("\\n")
1 голос
/ 13 марта 2012

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

def unescape(string)
  dup = string.dup
  escaped_chars = ['n', 't', 'r', 'f', 'v', '0', 'a']
  escaped_subs = {
    "n" => "\n",
    "t" => "\t",
    "r" => "\r",
    "f" => "\f",
    "v" => "\v",
    "0" => "\0",
    "a" => "\a"
  }

  pos = 0
  while pos < dup.length
    if dup[pos] == '\\' and escaped_chars.include? dup[pos + 1]
      dup[pos..(pos + 1)] = escaped_subs[dup[pos + 1]]
    end
    pos += 1
  end

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