我试图将csv文件解析为一个懒惰的高图表图。
我使用了paperclip来上传csv文件,我在解析数据方面遇到了问题,而且我不确定该怎么做。
csv文件有3列。第2列和第3列是我想要访问的。第2列是日期,第3列是温度。
控制器
def show
@soiltemp = Soiltemp.find(params[:id])
@data = CSV.parse(@soiltemp.csv.path, :headers => true, :encoding => 'ISO-8859-1')
dates = []
temps = []
@data.each do |row|
dates << row[1]
temps << row[2]
end
@graph = LazyHighCharts::HighChart.new('graph') do |f|
f.title({ :text=>"Combination chart"})
f.options[:xAxis][:categories] = dates
f.series(:type=> 'area', :name=> 'Degree', :data => [temps], :color => '#00463f')
end
@hash = Gmaps4rails.build_markers(@soiltemps) do |soiltemps, marker|
marker.lat soiltemps.latitude
marker.lng soiltemps.longitude
marker.infowindow render_to_string(partial: 'soiltemps/map')
end
查看
<%= high_chart("chart", @graph) %>
<p><b>Last Updated:</b> <%= @soiltemp.updated_at.strftime("%d %B, %Y") %></p>
<%= link_to 'Back', soiltemps_path %>
答案 0 :(得分:0)
您似乎需要每列的值数组来提供高图series
。您将遍历csv数据的每一行(@data.each
),并且块中的每一行本身是csv的每列中的值的数组,但是索引为0。因此,要获得第2列,您需要row[1]
。
以下是您可以做的事情:
def show
@soiltemp = Soiltemp.find(params[:id])
@data = CSV.parse(@soiltemp.csv.path, :headers => true, :encoding => 'ISO-8859-1')
dates = []
temperatures = []
@data.each do |row|
dates << row[1] # column 2
temperatures << row[2] # column 3
end
@graph = LazyHighCharts::HighChart.new('graph') do |f|
f.title({ :text=>"Combination chart"})
# make the csv row headers the graph's categories
f.options[:xAxis][:categories] = @data.headers
f.series(:data => dates, ...rest of options)
f.series(:data => temperatures, ...rest of options)
end
... rest of code ...
end
您给哪个系列(日期或临时值)取决于您。希望有所帮助。