пытаясь получить дельту между столбцами, используя FasterCSV - PullRequest
1 голос
/ 05 августа 2011

Немного нуба, поэтому заранее извиняюсь.

Я пытаюсь прочитать CSV-файл с несколькими столбцами, я хотел бы посмотреть, есть ли где-нибудь в файле одна строка "foo"и, если это так, возьмите строку на одну ячейку (она же строка, на одну колонку), а затем запишите ее в файл

мой файл c.csv:

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

, поэтому вв этом случае я бы хотел использовать "bar" и "tom" в новом CSV-файле.

Вот что у меня есть:

#!/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

Я посмотрел здесь https://github.com/circle/fastercsv/blob/master/examples/csv_table.rb но я, очевидно, не понимаю этого, я думаю, что мне придется использовать Table для того, чтобы делать то, что я хочу, но, немного ударившись головой о стену, я решил спросить совета уопытные люди.помогите пожалуйста?

1 Ответ

0 голосов
/ 06 августа 2011

с учетом вашего входного файла c.csv

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

тогда этот скрипт:

#!/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

создаст файл output.csv

bar
tom
...