2013-11-15 53 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