Ruby Tips!

RubyのTipsを紹介します

2014-03-23から1日間の記事一覧

特異クラスを開いてクラスメソッドを定義する

Rubyにおいて、クラスメソッドとはクラスオブジェクトの特異メソッドである。特異メソッドは特異クラスのインスタンスメソッドである。よって、クラスオブジェクトの特異クラスを開いてインスタンスメソッドを定義すれば、クラスメソッドを定義できることに…

一時ファイルを作成する

Rubyで一時ファイルを作成するにはtempfileライブラリが利用できる。Tempfile.newは一時ファイルを作成するメソッドで、一時ファイルのFileオブジェクトを返す。一時ファイルはFileオブジェクトがガーベジコレクションされたタイミングで自動的に削除される…

一時ディレクトリを作成する

Rubyで一時ディレクトリを作成するにはtmpdirライブラリが利用できる。timdirライブラリが提供するDir.mktmpdirは、一時ディレクトリを作成するメソッドだ。以下のようにして簡単に一時ディレクトリを作成できる。 require 'tmpdir' require 'fileutils' dir…

TCPサーバを実装する

RubyでTCPサーバを簡単に実装するにはsocketライブラリのTCPServerクラスを使うと良い。TCPServer.newには、接続を待ち受けるIPアドレスと、ポート番号を指定する。クライアントからの接続はTCPServer#acceptで待つ。TCPServer#acceptはクライアントとの接続…

ファイルの行数をカウントする

IO#getsやIO#each_lineで行単位の読み込みを行った場合、読み込んだ行数がIO#linenoに保存される。これを参照することで、ファイルの行数を簡単にカウントすることができる。 open('foo.txt'){|f| while f.gets; end p f.lineno } もしファイル全体をメモリ…

配列に要素を代入する

Rubyで配列に要素を代入するにはArray#[]=を使う。 a = [] a[0] = 'a' a[1] = 'b' p a #=> ["a", "b"] もし配列の長さを超えるインデックスを指定した場合、間の要素はnilで埋められる。 a = [] a[2] = 'c' p a #=> [nil, nil, "c"] インデックスに範囲を指…

文字列を任意のバイト数で改行する

NKFの-fオプションを使うと、文字列を任意のバイト数で改行することができる。 require 'nkf' str = "本日は晴天なり。本日は晴天なり。本日は晴天なり。本日は晴天なり。本日は晴天なり。本日は晴天なり。本日は晴天なり。本日は晴天なり。本日は晴天なり。…

文字列の長さを得る

バイト数を得る 文字列のバイト数はSrting#bytesizeメソッドで得られる。 p "abcあいう".bytesize #=> 12 文字数を得る Ruby 1.9ではString#sizeで文字数が得られる。(※Ruby 1.8ではバイト数となる) p "abcあいう".size #=> 6 Ruby 1.8で文字数を得るには、S…

HTMLのエスケープとアンエスケープ

HTMLで&"<>を表示するには、実体参照という形式でエスケープする必要がある。RubyでこのHTMLエスケープを行うには、CGI.escapeHTMLが利用できる。 require 'cgi' p CGI.escapeHTML('&"<>') #=> "&amp;&quot;&lt;&gt;" エスケープしたHTMLを元に戻す(アンエス…

文字列からURLを抽出する

文字列からURLを抽出するにはuriライブラリのURI.extractメソッドが利用できる。 require 'uri' str = " http://www.ruby-lang.org/ ftp://ftp.ruby-lang.org/pub/ " p URI.extract(str) #=> ["http://www.ruby-lang.org/", "ftp://ftp.ruby-lang.org/pub/"]…

RubyでHTMLを整形する

CGI.prettyメソッドを使えば、乱雑に書かれたHTMLを、良い具合に整形することができる。Rubyで作成したCGIでHTMLを出力する前に使えば、簡単に綺麗なHTMLを出力することが可能だ。 require 'cgi' html = <<HTML <html><head><title>Ruby Tips!</title></head><body><h1>Sample HTML</h1><p>Hello, World!</p><ul><li>foo</li><li>bar</li><li>buz</li></ul></body></html> HTML …

正規表現で繰り返しマッチさせる

正規表現でマッチしたより後ろの文字列は組み込み変数$'で参照することができる。正規表現によるマッチと$'の参照を繰り返し行うことで、徐々に正規表現のマッチを進めていくことが可能だ。 str = "abc def ghi" p str.slice(/abc/) #=> "abc" p $' #=> " de…

gzipで圧縮・展開を行う

gzipはUNIXで使われる標準的な圧縮形式だ。 Rubyではzlibライブラリを使って、gzip形式の圧縮と展開が行える。gzip形式のファイルを書き出すには、Zlib::GzipWriterを使う。 このクラスは出力をgzip圧縮しながら書き出すIOのラッパであり、IOと同様に扱うこ…

配列を条件に基づいて分割する

Array#partitionを使えば、配列をブロックを満たす要素と、そうでない要素に分割した新しい配列を作ることができる。 p [1, 2, 3, 4, 5, 6].partition{|i| i % 2 == 0 } #=> [[2, 4, 6], [1, 3, 5]] より高度な分割はArray#group_byで行える。このメソッドは…