Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl6
- use v6;
- #use Grammar::Debugger;
- use Test;
- grammar timesheetparser {
- token TOP {<line>+}
- token line {<assigns>||<record>||<times>||<nonrecord>}
- token assigns {<name>}
- regex name {\s*'W&H Staff:'$<names>=\N*'Customer:'$<customer>=\N*'Country:'$<country>=\N*\n<secondline>}
- regex secondline {\N*\n}
- token record {^^\s*<day>\s*<date>\s*<secondhalf>*}
- token secondhalf {<time>\h*<time><times>*}
- token times {\h*<hrs>\h*<text><order>*<comments>\v*}
- token day {\w**2}
- token date {\d**2\.\d**2\.\d**4}
- token time {\d**2\:\d**2}
- token hrs {\d**1..2\,\d**2}
- token text {(\h||<:L>)*}
- token order {40\d*}
- token comments {\V*}
- token nonrecord {\N*\n}
- }
- class timesheetdata {
- has $.name;
- has $.customer;
- has $.country;
- has @.orders;
- has %.hours;
- method tester(){ say $!name;}
- submethod BUILD(:$namer) {
- $!name = $namer;
- say $!name;
- }
- }
- class timesheetdataactions {
- method name($/) {
- my Int $positionfrom = 11 + index(~$/, "W&H Staff:");
- my Int $positionto = 10 + index(~$/, "Customer: ");
- #my $temp= ~$<names>.trim-trailing ~" " ~$<secondline>.substr($positionfrom..$positionto);
- make ~$<names>.trim-trailing ~" " ~$<secondline>.substr($positionfrom..$positionto);
- #make timesheetdata.new(namer => $temp);
- }
- }
- sub MAIN ($filename){
- my $times=timesheetparser.parsefile($filename,:actions(timesheetdataactions)).ast;
- my $fh= open "testfile.txt", :w;
- say $times;
- for $times<line> -> $l {
- if ($l<assigns>) {
- $fh.say(Str.($l<assigns><name>.made));
- }
- if ($l<record>|$l<times>) {
- $fh.say(Str.($l));
- }
- }
- my $timer=timesheetparser.parsefile('testfile.txt');
- my %timesa;
- my $temporder;
- for $timer<line> -> $l {
- for $l<record><secondhalf> -> $r {
- for $r<times> -> $t {
- if $t<order> {
- my $temp=$t<hrs>;
- $temp~~s/","/\./;
- $temporder=$t<order>;
- (%timesa{$temporder})=(%timesa{$temporder})+$temp;
- }
- }
- }
- };
- $fh.say(%timesa);
- $fh.close;
- }
Add Comment
Please, Sign In to add comment