タブ区切りのテキストから並び替えをして見やすくしたと備忘録
###まず、もととなるタブ区切りのテキスト
profile.txt #LR utf-8
john m 19
micheal m 28
abbie f 31
dabid m 17
claire f 26
左から”名前、性別、歳”がタブ区切りで載っています。
名前順にして並び替えたいと思います。
まず、テキスト自体どういう風に出力されるか確認します。
File.open("meibo.txt") do |text|
text.each_line do |line|
p line
end
end
でファイルを展開すると
$ ruby example.rb
"john\tm\t19\n"
"micheal\tm\t28\n"
"abbie\tf\t31\n"
"dabid\tm\t17\n"
"claire\tf\t26\n"
と表されるので、タブスペースと改行コードを除いた各行の配列を作り
ソートして、標準出力します。
##大まかな流れ
1.ファイルを開き、読み込みができるようにする
2.名前順にソートをかける
3.標準出力する
#1.ファイルを開き、読み込みする
各行を[名前,性別,年齢]
のようにして一旦、配列に入れます。
profile = []
File.open("profile.txt") do |text|
text.each_line do |line|
profile << line.chomp.split("\t")
end
end
各行の末文に\n
を取り除くために.chomp
しタブ区切りしているので.split("\t")
区切りることによって
$ ruby example.rb
[["john", "m", "19"],
["micheal", "m", "28"],
["abbie", "f", "31"],
["dabid", "m", "17"],
["claire", "f", "26"]]
という風に配列profile
が綺麗に[名前,性別,年齢]
と必要なデータだけ取れました。
#2.名前順にソートをかける
rubyにはsort_by
メソッドがあるのでこのメソッドを利用して名前順にします。
profile_sort = profile.sort_by{|man| man[0]}
pp profile_sort
出力結果は
$ ruby example.rb
[["abbie", "f", "31"],
["claire", "f", "26"],
["dabid", "m", "17"],
["john", "m", "19"],
["micheal", "m", "28"]]
となり、無事名前順に並び変わりました。
#3.標準出力する
ここまできたら、ソートした配列を出力しリダイレクトして並び替えをします。
profile_sort.each do |text|
puts text.join("\t")
end
配列の文字列を\t
で繋いで連結します。puts
で出力された時にタブく区切りされるようになります。
また、puts
は改行して出力してくれるのでわざわざputs text.join("\t")+"\n"
と
改行コードを書かなくても大丈夫です。
これを実行して出力結果が
$ ruby example.rb
abbie f 31
claire f 26
dabid m 17
john m 19
micheal m 28
はい、これでタブ区切りのファイルを並び替えが成功しました。