大家好,我最近使用了 ruport 的向 console 打印表格的功能,给自己做一个复习时间表的小工具。但发现在显示中文的时候会出现串行的情况,大概看了一下 gem 中的源码。
def calculate_max_col_widths
# allow override
return if options.max_col_width
options.max_col_width = []
unless data.column_names.empty?
data.column_names.each_index do |i|.
options.max_col_width[i] = data.column_names[i].to_s.length # 里面基本对长度的判断都是使用length进行的,但中文的大小会占用二个字符长度在console中,就出现了以下说的问题。
end
end
data.each { |r| max_col_widths_for_row(r) }.
end
下面是我的工具的主要代码部分,就是最简单的使用了 ruport 的例子。
def print_tab
table = Ruport::Data::Table.new :column_names => ["宝贝","学习","复习1","复习2","复习3","复习4","复习5"],
:data => @powers.map {|power|
[power.name,
power.first_study_time.strftime("%m-%d"),
power.review1.strftime("%m-%d"),
power.review2.strftime("%m-%d"),
power.review3.strftime("%m-%d"),
power.review4.strftime("%m-%d"),
power.review5.strftime("%m-%d"),
]
}
puts table.to_text
end
这是控制台显示的结果
我目前有二个不成熟的思路:
这个问题断断续续困惑了我 2 天的时间,还请各位帮忙,多多指点,非常感谢大家。