From: Fourchette Fourchette on
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/.

From: Bob Nadler on
Hi,

On Thu, Jul 29, 2010 at 8:30 AM, Fourchette Fourchette
<alexisdal(a)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

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

From: Fourchette Fourchette on
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 :)
--
Posted via http://www.ruby-forum.com/.

From: Bob Nadler on
On Tue, Aug 3, 2010 at 4:59 AM, Fourchette Fourchette
<alexisdal(a)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.

> thanks
>
> ps: i got my invitation to ruport forum still pending :)
> --
> Posted via http://www.ruby-forum.com/.
>
>

From: Fourchette Fourchette on
>
> 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 :)
--
Posted via http://www.ruby-forum.com/.