Ruby Tips!

RubyのTipsを紹介します

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

文字列の一部を削除する

正規表現による削除 String#sub!またはString#gsub!で空文字列に置換することで、既存も文字列から正規表現にマッチした部分を削除できる。 p "foo fooo foooo".sub!(/o+/, '') #=> "f fooo foooo" p "foo fooo foooo".gsub!(/o+/, '') #=> "f f f" 特定の文…

ファイルのリンクを作成する

シンボリックリンク シンボリックリンクを作成するには、File.symlinkかFileUtils.ln_sを使って以下のようにする。 File.symlink('file', 'link_to_file') require 'fileutils' FileUtils.ln_s('file', 'link_to_file') 作成したリンクから、実体のファイル…

文字列のハッシュを計算する

Rubyではdigestライブラリを使ってMD5やSHA-1のハッシュを求めることができる。以下はMD5のハッシュを求める例である。 require 'digest/md5' p Digest::MD5.digest("hoge") #=> "\xEAp>z\xA1\xEF\xDA\x00d\xEA\xA5\a\xD9\xE8\xAB~" ハッシュを16進数の文字…

文字列が正規表現として妥当かを確認する

文字列が正規表現として妥当なのかはRegExp.compileによる正規表現のコンパイルで確認することができる。RegexpErrorが発生したら、その正規表現は何か間違っているということだ。 Regexp.compile('*') #=> RegexpError

splitメソッドで文字列を分割する

String#splitは文字列を複数に分割するメソッドだ。以下はString#splitに文字列を指定し、,で文字列を分割する例である。 p "100,200,300".split(',') #=> ["100", "200", "300"] String#splitは文字列だけでなく正規表現も取ることができる。以下は空白文字…

配列の要素を削除する3つの方法

要素を削除する 添字を指定して要素を1つ削除するにはArray#delete_atを使う。 a = [1, 2, 3] a.delete_at(1) p a #=> [1, 3] 複数の要素を削除する 添字を指定して複数の要素を一度に削除するにはArray#slice!を使う。 a = [1, 2, 3, 4, 5] a.slice!(1, 3) …

分散オブジェクトシステムdrbを利用する

分散オブジェクトシステムdrbを利用すれば、別プロセスのRubyのオブジェクトを、あたかも同じプロセスにあるかのように扱うことができる。以下は自身のSTDOUTを公開するサーバと、サーバのSTDOUTを取得して、サーバにメッセージを出力させるクライアントの例…

ディレクトリ内を再帰的に検索する

Rubyでディレクトリ内を再帰的に検索するには、findライブラリのFind.findメソッドが使用できる。このメソッドはブロックを取り、ブロックにはディレクトリ内のファイルやディレクトリが順に渡される。以下はユーザのホームディレクトリ以下のファイルとディ…

2つのハッシュをマージする

2つのハッシュをマージするには、Hash#updateかHash#mergeを使う。 h1 = {a:1, b:2} h2 = {b:3, c:4} p h1.update(h2) #=> {:a=>1, :b=>3, :c=>4} Hash#updateは同一のキーが存在する場合、引数で与えたハッシュの値を優先する。 Hash#mergeはブロック付きで…

配列の先頭の要素を取得する

配列の先頭の要素を取得するには、Array#takeとArray#Take_whileを使う。Array#takeは配列の先頭から任意の個数を、Array#take_whileは先頭からブロックの評価結果が偽になる要素までを返す。 p [1, 2, 3, 4, 5].take(3) #=> [1, 2, 3] p [1, 2, 3, 4, 5].ta…

文字列の末尾に文字列を連結する

Rubyで文字列の末尾に別の文字列を連結するにはString#concatかString#を使う。 p "abc".concat("123") #=> "abc123" p "abc" << "123" #=> "abc123" String#concatとString#では、以下のように連続して文字列を連結してゆくこともできる。 p "abc".concat("…

文字列の一部を切り出す

Rubyで文字列の一部を切り出すには、String#[]を使うと良い。以下は2文字目から3文字分を切り出す例である。 str = "abcdefg" p str[2, 3] #=> "cde" ただし、この切り出しはRuby 1.9では文字単位だが、Ruby 1.8ではバイト単位であることに注意。このため日…

子プロセスを生成して外部コマンドを実行する

子プロセスを生成して外部コマンドを実行するにはforkとexecを使用する。forkはシステムコールを使ってプロセスの複製を作り、ブロックを指定して呼び出した場合は生成した子プロセスでブロックを評価する。execは現在のプロセスを与えられた外部コマンドで…

forwardableとdelegateによるメソッドの移譲

forwardable forwardableはクラスにメソッドの移譲を簡単に定義するためのライブラリだ。以下は配列へのメソッドの移譲により、独自のキューを実装する例である。def_delegatorメソッドにより、メソッドの移譲を定義する。 require 'forwardable' class MyQu…

文字列を日時に変換する

timeライブラリを読み込むとTimeが拡張されいくつかの機能が使えるようになる。文字列を日時に変換するTime.parseもその1つだ。 require 'time' p Time.parse('2014-03-20 12:34') #=> 2014-03-20 12:34:00 +0900 Time.parseは様々な日時の形式に対応してお…

ローマ字とひらがなを変換する

romkanはローマ字とひらがなを相互変換するRuby用のライブラリである。gemでインストールできる。 gem install romkanromkanをrequireするとStringが拡張されて、いくつかのメソッドが使えるようになる。ローマ字をひらがなに変換するメソッドがto_kanaだ。…

nkfライブラリによるひらがなとカタカナの変換

nkfライブラリを使用すればひらがなやカタカナの変換が簡単に行える。ひらがなをカタカナに変換するには--katakanaオプションを使う。-wはUTF-8で出力するエンコーディングの指定である。 require 'nkf' p NKF.nkf("--katakana -w", "あいうえお") #=> "アイ…

配列をソートする

配列をソートするにはArray#sortを使う。ソートは要素を演算子で比較することで行われる。ソート順は昇順である。また破壊的メソッドArray#sort!もある。 p [5, 2, 1, 4, 3].sort #=> [1, 2, 3, 4, 5] a = [5, 2, 1, 4, 3] a.sort! p a #=> [1, 2, 3, 4, 5] …

Rubyスクリプトが直接実行されたか判定する

グローバル変数$0には実行されたRubyスクリプトのファイル名が格納されている。さらに擬似変数__FILE__には現在のソースファイル名が格納されている。これら2つを比較することで、あるスクリプトがコマンドとして直接実行されたのか、別のファイルからライブ…

ディレクトリを削除する

ディレクトリの削除には、Dir.rmdirを使う。ただし、コマンドのrmdirと同様、このメソッドは空のディレクトリしか削除できない。 Dir.rmdir("dir") このため中身があるディレクトリは、中身を再帰的に削除しないと削除することができない。これを代わりにや…