テキストファイルの内容をソートするプログラム その3 「コマンドライン引数と式展開」

■変更点

  1. 検索用正規表現文字列を外部から受け取る
  2. 可読性と保守性を高めるため、ファイルを扱う部分の記述を変更
    • open(組み込み関数)⇒File.open(クラスメソッド)
    • File.openメソッドの呼び出しにブロック引数を使用(Fileオブジェクトの有効範囲がブロック内に限られるため、リソース管理が楽)

file_path = ARGV[0]
search_str = ARGV[1]

temp_lines = []
File.open(file_path) { |f|
f.each do |line|
temp_lines << line
end
}

temp_lines.sort!

File.open("result_" + file_path, "w") { |f|
temp_lines.each do |line|
if line.match(/#{search_str}/)
f.puts line
end
end
}

■解説
  • 「ARGV」は、コマンドライン引数が格納された配列です。
    このプログラムを「text_sort.rb」というファイル名で保存した場合、
    ruby text_sort.rb moe.txt (neko|usa)mimi
    のように設定します。


  • 「#{}」は式展開の文法です。「#{」と「}」で囲まれた文字列を、
    二重引用符や正規表現に記述すると、
    その部分はRubyのコードとして扱われます。