I am loading text from a file that contains a sequence like:
abc\ndef\tghi
I want to 'unescape' all special characters, e.g. to treat the \n as a newline and \t as a tab etc. instead of automatically ending up with e.g. \\n or \\t in the string.
Is there an easy way to do this?
The text will be loaded exactly as it is in the file.  If the file has the literal text \ and n instead of a newline, that is what will be loaded.  If there is a known set of escapes you want to change, you could simply gsub them 
line='abc\ndef\tghi'
line.gsub!('\n', "\n")
line.gsub!('\t', "\t")
                        I feel like there should be some more elegant way to do this, but you could write general-purpose method to do the swapping:
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
                        how about YAML.unescape ?
require 'syck/encoding'
require 'yaml'
YAML.unescape("\\n")
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With