2013-11-15 54 views
0

我想解析一个csv文件到一个懒惰的高图图。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

看起来你需要从每一列的值的阵列来给你高图表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 

哪个阵列(日期或临时工)你给哪个系列是由你。希望有所帮助。

+0

谢谢你回答迭戈。我更新了y控制器以反映我想要达到的目标,但是我得到一个空白图表,我必须做错某些事情。 – Grinskull

+0

好的,我有日期显示,但f.series(:data => temps)不会显示。 – Grinskull