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

Reply via email to