简体   繁体   中英

trying to get the delta between columns using FasterCSV

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 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM