[#39863] forループの速度 — Masahiro Sato <msato@...>

15 messages 2004/07/20

[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>

大谷と申します。

31 messages 2004/07/20
[#39886] Re: イテレータとfor文 — Tietew <tietew-ml-ruby-list@...> 2004/07/21

[ruby-list:39867] Stringでのバックスラッシュ記法の有効化について

From: Nowake <nowake@...>
Date: 2004-07-20 16:08:09 UTC
List: ruby-list #39867
こんばんは。野分と申します。

Stringでのバックスラッシュ記法の有効化についてお聞きしたいことがあります。
ご存じでしたら、ぜひご教授下さい。


通常、String#inspectで文字列を処理した場合、\nや\tなどの制御コードはバッ
クスラッシュ記法に合わせて文字化されて出力されますが、この文字化されたバッ
クスラッシュ記法を再び制御コードに戻す方法はありませんでしょうか?

具体的には

s = "\t test  \n  test \n"
t = s.inspect  # => tの中身は '\\t test  \\n  test \\n'

u = eval( t )  # => tをリテラルとして処理。

s == u

という処理を行いたいのですが、evalを使用した方法だと、汚染された文字列に
対しては危険なので、もっと安全に行えるような方法は無いか探しています。


現在は

def self.translate_backslash( string )
  s = string
  s.gsub!( /\\t/, "\t" )
  s.gsub!( /\\n/, "\n" )
  s.gsub!( /\\r/, "\r" )
  s.gsub!( /\\f/, "\f" )
  s.gsub!( /\\b/, "\b" )
  s.gsub!( /\\a/, "\a" )
  s.gsub!( /\\e/, "\e" )
  s.gsub!( /\\s/, "\s" )
  s.gsub!( /\\(.)/, '\1' )
  s
end

s = "\t test  \n  test \n"
t = s.inspect
u = translate_backslash( t )
s == u

としているのですがあまりスマートではないので……


In This Thread

Prev Next