今日はMac

フリーな休日です。満喫しています。先日、Windows 7マシンでHello Worldしましたが、今日はMacBook AirでRubyしようと思います。まあ、マルチプラットフォームな言語と言うだけあって、特に意識することなくプログラミングを楽しめることでしょう。


エディタを選ぶ

MacBook Airで、ガッツリとプログラミングした経験が無いことに気付きました。Xcodeで少しObjective-Cを学んでみたり、CotEditorでちょっとソースをいじってみたり、Coda 2でHTML, CSSを少しいじってみたり、そんな程度です。


CotEditorでプログラミングしていこうと思っていたのですが、ちょっと冒険して、最近巷で噂の"Sublime Text2"というエディタを使ってみようと思います。
Sublime Text: The text editor you'll fall in love with


パッケージが云々で、一気に強力にできるようですが、今回は何もカスタマイズせず、そのまま使用していきたいと思います。とりあえず、お得意のC言語でHello Worldしてみることにします。
f:id:ryo021021:20131013115735p:plain


凄く快適でした。デフォルトでコード補完され、これがまた強力で、シンタックスハイライトも美しい。英語の読めない私が、適当にメニューバーを漁っていたら、なんとHello WorldをBuildしてRunできるという高機能さ。素晴らしいです。当分はこの子と付き合っていこうと思います。


今日のRuby

教本で勉強していますが、読むだけの作業は苦手なので、一気にサラッと読み進めてしまいました。私はガシガシとプログラミングをしたいのです。大枠だけ把握して、細かい部分は後から躓いた時や、暇のある時に学習し直します。


教本に従い、UNIXコマンドの簡易版grepを作ってみました。多分、Rubyのようなスクリプト言語が活躍する分野はテキスト処理だと思うのですよね。C系しか知らない私からすれば、これほど短いコードで、直感的にコーディングできるというのは、感動的な出来事でございます。さて、ソース。

main.rb

# コマンドライン引数で、パターンとファイルパスを取得する。
# パターン文字列は、Regexp.new()で正規表現オブジェクトに変換し、
# grep.rbのsimple_grepメソッドへ渡す。
# 
# 2013.10.14 Ryo
require "./grep"
simple_grep(Regexp.new(ARGV[0]), ARGV[1])

grep.rb

# UNIXコマンドのgrepをRubyで簡易的に作ってみる。
# 2013.10.14 Ryo
#
# 引数   pattern  検索するワードの正規表現オブジェクト
#       filepath ファイルパス
def simple_grep(pattern, filepath)
    file = File.open(filepath)

    file.each_line do |line|
        if pattern =~ line
            print line
        end
    end

    file.close
end


はてなブログのスーパーpre記号でRUBYのソースを貼付けると、タブの文字数が8文字になるのが気になります。普通に貼ると、インデントが崩れるので、半角スペース4文字で、場当たり対応しておきます。


実行結果はこんな感じ。grep.rbから、"line"という文字列を走査し、マッチした行を出力します。

$ ruby main.rb line grep.rb 
    file.each_line do |line|
        if pattern =~ line
            print line


そんな感じで、ちょっとしたファイル処理、正規表現を用いた文字列処理に、少しだけ触れることができました。Ruby、凄く楽しそうです。ではでは。