Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ruport, reading a csv whose column name have white spaces

2 views
Skip to first unread message

Fourchette Fourchette

unread,
Jul 29, 2010, 8:30:52 AM7/29/10
to
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
--
Posted via http://www.ruby-forum.com/.

Bob Nadler

unread,
Jul 29, 2010, 1:41:18 PM7/29/10
to
Hi,

On Thu, Jul 29, 2010 at 8:30 AM, Fourchette Fourchette
<alex...@hotmail.com> wrote:
> 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-reports

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' => 'Harvey', 'Solution/Small Story' => 0)

> thanks
> --
> Posted via http://www.ruby-forum.com/.
>
>

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

--Bob

Fourchette Fourchette

unread,
Aug 3, 2010, 4:59:46 AM8/3/10
to
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 :)

Bob Nadler

unread,
Aug 3, 2010, 1:06:59 PM8/3/10
to
On Tue, Aug 3, 2010 at 4:59 AM, Fourchette Fourchette
<alex...@hotmail.com> wrote:
> 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 ?

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.

Fourchette Fourchette

unread,
Aug 6, 2010, 11:52:01 AM8/6/10
to
>
> 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 :)

0 new messages