[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

csv help

Junkone

11/28/2007 6:53:00 PM

hello
Here is a extract of csv file that i use
Ticker,Trade,Date,Price
FLWS,Long,01/08/2007 2:00:00 PM,9.05

It will always have only 2 rows. How can i load it as a hash so that i
get access it like
hashvar["Ticker"] .....
It there an existing api or do i have to load it as csv and then looop
thro the array and create the hash.

thanks for the help in advance.
3 Answers

James Gray

11/28/2007 7:05:00 PM

0

On Nov 28, 2007, at 12:55 PM, Junkone wrote:

> hello
> Here is a extract of csv file that i use
> Ticker,Trade,Date,Price
> FLWS,Long,01/08/2007 2:00:00 PM,9.05
>
> It will always have only 2 rows. How can i load it as a hash so that i
> get access it like
> hashvar["Ticker"] .....
> It there an existing api or do i have to load it as csv and then looop
> thro the array and create the hash.

FasterCSV can do it for you:

#!/usr/bin/env ruby -wKU

require "rubygems"
require "faster_csv"

csv = <<END_CSV
Ticker,Trade,Date,Price
FLWS,Long,01/08/2007 2:00:00 PM,9.05
END_CSV

data = FCSV.parse(csv, :headers => true)[0].to_hash
p data
# >> {"Trade"=>"Long", "Date"=>"01/08/2007 2:00:00 PM",
"Price"=>"9.05", "Ticker"=>"FLWS"}

__END__

Hope that helps.


James Edward Gray II

Christian von Kleist

11/28/2007 7:26:00 PM

0

On Nov 28, 2007 1:55 PM, Junkone <junkone1@gmail.com> wrote:
> hello
> Here is a extract of csv file that i use
> Ticker,Trade,Date,Price
> FLWS,Long,01/08/2007 2:00:00 PM,9.05
>
> It will always have only 2 rows. How can i load it as a hash so that i
> get access it like
> hashvar["Ticker"] .....
> It there an existing api or do i have to load it as csv and then looop
> thro the array and create the hash.
>
> thanks for the help in advance.
>
>

If the file is always two lines and the format is always the same, I'd do:

data = {}
lines = File.readlines.collect {|line| line.chomp}
lines[0].each {|header| data[header] = lines[1].shift}

But you could use a CSV gem instead.

Christian von Kleist

11/28/2007 7:28:00 PM

0

On Nov 28, 2007 2:25 PM, Christian von Kleist <cvonkleist@gmail.com> wrote:
>
> On Nov 28, 2007 1:55 PM, Junkone <junkone1@gmail.com> wrote:
> > hello
> > Here is a extract of csv file that i use
> > Ticker,Trade,Date,Price
> > FLWS,Long,01/08/2007 2:00:00 PM,9.05
> >
> > It will always have only 2 rows. How can i load it as a hash so that i
> > get access it like
> > hashvar["Ticker"] .....
> > It there an existing api or do i have to load it as csv and then looop
> > thro the array and create the hash.
> >
> > thanks for the help in advance.
> >
> >
>
> If the file is always two lines and the format is always the same, I'd do:
>
> data = {}
> lines = File.readlines.collect {|line| line.chomp}
> lines[0].each {|header| data[header] = lines[1].shift}
>
> But you could use a CSV gem instead.
>

Oops, bad mistakes in that little snippet. Here we go:

data = {}
lines = File.readlines('data.csv').collect {|line| line.chomp.split(',')}
lines[0].each {|header| data[header] = lines[1].shift}