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

Какой массив (даты или Temps) вы даете, к которому серии до вас. Надеюсь, это поможет.

+0

Спасибо, что ответили на вопрос Диего. Я обновил y контроллер, чтобы отразить то, что я пытаюсь достичь, но я получаю пустой график, я должен делать что-то неправильно. – Grinskull

+0

Хорошо, у меня есть даты, но f.series (: data => temps) не будут отображаться. – Grinskull

Смежные вопросы