Hi Nigel, it worked like a charm ^_^
On Mon, Sep 2, 2013 at 10:02 AM, Nigel Thorne <[email protected]> wrote: > You could go > > rule(:ctime) {(space >> str("ctime = ") >> value.as(:time) >> > newline).as(:ctime)} > > I think that would produce what you need. > > > --- > "Man, I'm going to have so many chickens when this lot hatch!" > > > On Mon, Sep 2, 2013 at 5:58 PM, Ra <[email protected]> wrote: > >> Hi Nigel, >> I got the point but how can I create that tree structure if the parser >> give me back : >> {:job_id=>"2763.spark.space.ad"@8, >> :job_name=>"STDIN"@42, >> :job_owner=>"[email protected]"@64, >> :resources_used_cput=>"00:00:00"@116, >> :resources_used_mem=>"3152kb"@150, >> :resources_used_vmem=>"32528kb"@183, >> :resources_used_walltime=>"00:07:40"@221, >> :job_state=>"R"@246, >> :queue=>"bio"@260, >> :server=>"spark.ingm.ad"@277, >> :checkpoint=>"u"@308, >> :ctime=>"Thu Aug 29 18:09:26 2013"@322} >> >> Or better, how do I need to write the parser ? >> You can have a look >> https://github.com/helios/torque_rm/blob/master/lib/torque_rm/qstat.rb#L46-L112 >> >> On Sat, Aug 31, 2013 at 3:32 PM, Nigel Thorne <[email protected]>wrote: >> >>> From http://kschiess.github.io/parslet/transform.html >>> >>> class MyTransform < Parslet::Transform >>> >>> rule('a') { 'b' } >>> >>> end >>> MyTransform.new.apply('a') # => "b" >>> >>> A Transform class, when applied, looks through it's known rules, and >>> applies any that match. Applying a rule replaces the matched object with >>> the result of the associated block. It has to match a whole object, so you >>> can't match a single key from a hash. You have to match the whole hash. One >>> way around this is to make your parser generate a tree that is a little >>> less flat. So.. if instead your output was >>> >>> {..., :ctime => {time: "Thu Aug 29 18:09:26 2013"} } >>> >>> You could then do something like this >>> >>> class MyTransform < Parslet::Transform >>> >>> rule(:time => simple(:time)) { DateTime.parse(time) } >>> >>> end >>> MyTransform.new.apply(your_tree) >>> >>> This would result in a tree with the whole {time => ...} hash replaced the >>> a DateTime value. In this case: >>> >>> >>> >>> >>> >>> {..., :ctime => #<DateTime: 2013-08-29T18:09:26+00:00 ...> } >>> >>> >>> I hope this helps. >>> >>> >>> >>> --- >>> "No man is an island... except Philip" >>> >>> >>> On Sat, Aug 31, 2013 at 9:30 PM, Ra <[email protected]> wrote: >>> >>>> Dear Kaspar, >>>> your parselet is wonderful and I'm using it as part of a library for >>>> managing TORQUE/PBS, parselet is use mostly for extracting info form qstat. >>>> This is just an example of the object returned from my parser: >>>> >>>> {:job_id=>"2763.spark.space.ad"@8, >>>> :job_name=>"STDIN"@42, >>>> :job_owner=>"[email protected]"@64, >>>> :resources_used_cput=>"00:00:00"@116, >>>> :resources_used_mem=>"3152kb"@150, >>>> :resources_used_vmem=>"32528kb"@183, >>>> :resources_used_walltime=>"00:07:40"@221, >>>> :job_state=>"R"@246, >>>> :queue=>"bio"@260, >>>> :server=>"spark.ingm.ad"@277, >>>> :checkpoint=>"u"@308, >>>> :ctime=>"Thu Aug 29 18:09:26 2013"@322} >>>> >>>> >>>> some keys are "maybe" so I do not have the guarantees that all of them >>>> will be available to all the objects, btw that is fine because qstat not >>>> always report everything. >>>> I read the documentation many times but I did understand how to convert >>>> the parser's result: >>>> >>>> for instance, I'd like to have ctime as a DateTime object and >>>> resources_used_mem >>>> as a numeric ... >>>> >>>> >>>> could you give me some advice on how to correctely transform my output ? >>>> >>>> Cheers. >>>> >>>> -- >>>> Raoul >>>> >>> >>> >> >> >> -- >> Ra >> > > -- Ra
