Prev: ruby tutorial ,cloud computing
Next: Ruby and Japanese
From: Nathaniel Madura on 22 Apr 2010 11:46 I am getting a string that has escape sequences in it, and I would like to print it to the screen after reprocessing the escape sequences. Maybe I have missed something obvious but I haven't seen anything in the docs that suggest how to do this. To replicate the behaviour I create a string in irb like so: $ irb >> str = 'some \n\r string \t with \r escape \n sequences' => "some \\n\\r string \\t with \\r escape \\n sequences" >> eval "puts str" some \n\r string \t with \r escape \n sequences => nil >> puts "%s" % str some \n\r string \t with \r escape \n sequences => nil I recognize that I can simply do a gsub: >> puts str.gsub(/\\n/, "\n") some \r string \t with \r escape sequences => nil but that would mean I would have to pattern match all sequences, and it seems like there should be a better way Any suggestions? -- Posted via http://www.ruby-forum.com/.
From: Robert Klemme on 23 Apr 2010 06:56 2010/4/22 Nathaniel Madura <nmadura(a)umich.edu>: > I am getting a string that has escape sequences in it, and I would like > to print it to the screen after reprocessing the escape sequences. Maybe > I have missed something obvious but I haven't seen anything in the docs > that suggest how to do this. To replicate the behaviour I create a > string in irb like so: > > $ irb >>> str = 'some \n\r string \t with \r escape \n sequences' > => "some \\n\\r string \\t with \\r escape \\n sequences" >>> eval "puts str" > some \n\r string \t with \r escape \n sequences > => nil If you use eval you rather need to do something like this irb(main):004:0> str = 'some \n\r string \t with \r escape \n sequences' => "some \\n\\r string \\t with \\r escape \\n sequences" irb(main):005:0> puts eval('"'+str+'"') some escape with sequences => nil irb(main):006:0> >>> puts "%s" % str > some \n\r string \t with \r escape \n sequences > => nil > > I recognize that I can simply do a gsub: > >>> puts str.gsub(/\\n/, "\n") > some > \r string \t with \r escape > Â sequences > => nil > > but that would mean I would have to pattern match all sequences, and it > seems like there should be a better way Actually doing a replacement would probably be my preferred way because of the security implications of eval. You can do it in one go irb(main):008:0> PAT = {'n'=>"\n",'t'=>"\t",'r'=>"\r"} => {"n"=>"\n", "t"=>"\t", "r"=>"\r"} irb(main):009:0> str.gsub(/\\(.)/){|m| PAT[$1]} => "some \n\r string \t with \r escape \n sequences" Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/
|
Pages: 1 Prev: ruby tutorial ,cloud computing Next: Ruby and Japanese |