ruport, reading a csv whose column name have white spaces

  • Thread starter Fourchette Fourchette
  • Start date
F

Fourchette Fourchette

hi there,

i am not a expert with ruby at all. this is my first post, i do hope
it's at right place, please advise otherwise.

i have some dump reporting to do. The input is a csv file. i figured
rupert could be my friend.

i got it up and running with the following

# instanciate the csv reading stuff
t = Table("source.csv")

# remove unnecessary junk
t.remove_column("Product/Release Xdor")

now i want to filter and search data like

Student.find:)all, :conditions => { :first_name => "Harvey", :status =>
1 })

(example taken from
http://api.rubyonrails.org/classes/ActiveRecord/Base.html)

however, the trick is that some of the column names have both the '/'
character and white spaces in them.

so it would look like

t.find:)all, :conditions => { :product/White Darf => "Harvey",
:Solution/Small Story => 0 })

=> that is giving me syntax errors.


t.find:)all, :conditions => { :'Product/White Darf' => "Harvey",
:'Solution/Small Story' => 0 })

=> this is throwing instead

$ ruby ruport.rb Anovo-Biometrics-cases.csv
ruport.rb:86:in `find': wrong number of arguments (2 for 1)
(ArgumentError)
from ruport.rb:86:in `run'
from ruport.rb:115

I feel confused. it seriously look like i've fallen into some beginners
issue.

anyone has an idea ?

thanks
 
B

Bob Nadler

Hi,

hi there,

i am not a expert with ruby at all. this is my first post, i do hope
it's at right place, please advise otherwise.

There's a Ruport mailing list here: http://groups.google.com/group/ruby-rep=
orts
i have some dump reporting to do. The input is a csv file. i figured
rupert could be my friend.

i got it up and running with the following

# instanciate the csv reading stuff
t =3D Table("source.csv")

# remove unnecessary junk
t.remove_column("Product/Release Xdor")

now i want to filter and search data like

Student.find:)all, :conditions =3D> { :first_name =3D> "Harvey", :status = =3D>
1 })

(example taken from
http://api.rubyonrails.org/classes/ActiveRecord/Base.html)

however, the trick is that some of the column names have both the '/'
character and white spaces in them.

so it would look like

t.find:)all, :conditions =3D> { :product/White Darf =3D> "Harvey",
:Solution/Small Story =3D> 0 })

=3D> that is giving me syntax errors.


t.find:)all, :conditions =3D> { :'Product/White Darf' =3D> "Harvey",
:'Solution/Small Story' =3D> 0 })

=3D> this is throwing instead

$ ruby ruport.rb Anovo-Biometrics-cases.csv
ruport.rb:86:in `find': wrong number of arguments (2 for 1)
(ArgumentError)
=A0 =A0 =A0 =A0from ruport.rb:86:in `run'
=A0 =A0 =A0 =A0from ruport.rb:115

I feel confused. it seriously look like i've fallen into some beginners
issue.

anyone has an idea ?
You're confusing the Ruport API with ActiveRecord. Based on your
description I'm assuming you're using Ruport in a stand-alone Ruby
script and not Rails.

Take a look at Ruport::Data::Table::rows_with
(http://api.rubyreports.org/classes/Ruport/Data/Table.html#M000036)

You'll need to do something like:

t.rows_with('Product/White Darf' =3D> 'Harvey', 'Solution/Small Story' =3D>=
0)

Try the Ruport mailing list if you need more help.
(http://groups.google.com/group/ruby-reports)

--Bob
 
F

Fourchette Fourchette

Thanks bob,

rows_with does the job. great !

however, i have a field (Solution/Hardware) that i want to use in the
_with condition. the trick is that this column often contains a list of
material such as "PC123,PX0990,ER4554,ER554", and I want the filter to
grab only line with "ER" in the string.

So basically, i am looking for the row_with parameter syntax to use
myfield like "*ER*"
instead of
myfield = "ER"

How can i achieve this ?

thanks

ps: i got my invitation to ruport forum still pending :)
 
B

Bob Nadler

Thanks bob,

rows_with does the job. great !

however, i have a field (Solution/Hardware) that i want to use in the
_with condition. the trick is that this column often contains a list of
material such as "PC123,PX0990,ER4554,ER554", and I want the filter to
grab only line with "ER" in the string.

So basically, i am looking for the row_with parameter syntax to use
=A0 =A0myfield like "*ER*"
instead of
=A0 =A0myfield =3D "ER"

How can i achieve this ?

rows_with can also take a block, so you can define how you want the
column filtered (in this case I'd probably use a regular expression).
Something like:

t.rows_with(column_name) { |col| col ~=3D /regex/ }

Take a look at the Ruby API for regular expressions for more info.
 
F

Fourchette Fourchette

rows_with can also take a block, so you can define how you want the
column filtered (in this case I'd probably use a regular expression).
Something like:

t.rows_with(column_name) { |col| col ~= /regex/ }

Take a look at the Ruby API for regular expressions for more info.

wow... can't wait to test that :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,479
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top