开发者

trying to get the delta between columns using FasterCSV

开发者 https://www.devze.com 2023-03-26 04:50 出处:网络
A bit of a noob here so apologies in advance. I am trying to read a CSV file which has a number of columns, I would like see if one string\"foo\" exists anywhere in the file, and if so, grab the stri

A bit of a noob here so apologies in advance.

I am trying to read a CSV file which has a number of columns, I would like see if one string "foo" exists anywhere in the file, and if so, grab the string one cell over (aka same row, one column over) and then write that to a file

my file c.csv:

foo,bar,yip
12,apple,yap
23,orange,yop
foo,tom,yum

so in this case, I would want "bar" and "tom" in a new csv file.

Here's what I have so far:

#!/usr/local/bin/ruby -w

require 'rubygems'
require 'fastercsv'

rows = FasterCSV.read("c.csv")
acolumn = rows.collect{|row| row[0]}

if acolumn.select{|v| v =~ /foo/} == 1
i = 0
for z in i..(acolumn).count
puts rows[1][i]
end

I've looked here https://github.com/circle/fastercsv/blob/master/examples/csv_table.rb but I am obviously not understanding it, my best guess 开发者_StackOverflow中文版is that I'd have to use Table to do what I want to do but after banging my head up against the wall for a bit, I decided to ask for advice from the experienced folks. help please?


Given your input file c.csv

foo,bar,yip
12,apple,yap
23,orange,yop
foo,tom,yum

then this script:

#!/usr/bin/ruby1.8

require 'fastercsv'

FasterCSV.open('output.csv', 'w') do |output|
  FasterCSV.foreach('c.csv') do |row|
    foo_index = row.index('foo')
    if foo_index
      value_to_the_right_of_foo = row[foo_index + 1]
      output << value_to_the_right_of_foo
    end
  end
end

will create the file output.csv

bar
tom
0

精彩评论

暂无评论...
验证码 换一张
取 消