テキストファイルの内容をソートするプログラム その4 「パターンマッチと負の添字」
■変更点
■解説
file_path = ARGV[0]
search_str = ARGV[1]
if /^(txt|csv)$/i !~ file_path.split(".").[](-1)
puts "扱えないファイルです。"
exit
endtemp_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 /#{search_str}/ =~ line
f.puts line
end
end
}
- 「=~」はパターンマッチに使われる演算子で、
マッチした場合は位置(先頭)を、マッチしなかった場合は「nil」を返します。
Rubyの条件式で「0」は「真」なので、マッチすれば「真」となります。
また、その3まで使っていたmatchメソッドは、マッチした部分文字列を返します。
- 「!~」は「=~」の否定演算子で、マッチした場合は「false」、
マッチしなかった場合は「true」を返します。
- 「/^(txt|csv)$/i」の「i」は正規表現のオプションで、
英字の大文字と小文字を区別しない設定です。(ただし半角に限る)
- 「.[](-1)」は、「[-1]」と同義です。
Rubyでは、配列の添え字に負の数を指定すると、
後ろから○番目の値を取得できます。