データを整形出力する
CSV形式で与えられたデータ(文字列)を整形して出力するプログラムです。データの1行目,2行目は固定とし、3行目以降のデータは行数も含めて常に変化すると想定しています。Stringクラスのeach_line,split,ljust,rjust,centerメソッド、さらにはmatchやstripまで駆使した本格的(?)な感じになっちゃいました。
format.rb
data = <<EOT
== Sales report ==
Name,Number,Amount
Nakanishi,100,10000
Yagi,200,20000
Hamada,300,30000
Itou,400,40000
EOT
COL_WIDTH = 18
iter = data.each_line
puts iter.next.strip.center(COL_WIDTH * 3 + 4)
h_border = ""
iter.next.split(",").count.times do
h_border += "+"+("-" * COL_WIDTH)
end
h_border += "+"
puts h_border
iter.each_with_index do |line,i|
next if i == 0
puts h_border if i == 2
line.split(",").each do |v|
print "|"
if v.match(/^[0-9]+$/)
print v.strip.rjust(COL_WIDTH)
else
print v.strip.ljust(COL_WIDTH)
end
end
puts "|"
end
puts h_border
以下は実行例です。
$ ruby format.rb
== Sales report ==
+------------------+------------------+------------------+
|Name |Number |Amount |
+------------------+------------------+------------------+
|Nakanishi | 100| 10000|
|Yagi | 200| 20000|
|Hamada | 300| 30000|
|Itou | 400| 40000|
+------------------+------------------+------------------+
参考URL
- EnglishWorm.com
- SinglesFan.com
- LmLab.net
- サイトマップ
- 運営者について