poohman

Untitled

Sep 18th, 2016
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. #!/usr/bin/perl6
  2. use v6;
  3.  
  4. #use Grammar::Debugger;
  5. use Test;
  6. grammar timesheetparser {
  7. token TOP {<line>+}
  8. token line {<assigns>||<record>||<times>||<nonrecord>}
  9. token assigns {<name>}
  10. regex name {\s*'W&H Staff:'$<names>=\N*'Customer:'$<customer>=\N*'Country:'$<country>=\N*\n<secondline>}
  11. regex secondline {\N*\n}
  12. token record {^^\s*<day>\s*<date>\s*<secondhalf>*}
  13. token secondhalf {<time>\h*<time><times>*}
  14. token times {\h*<hrs>\h*<text><order>*<comments>\v*}
  15. token day {\w**2}
  16. token date {\d**2\.\d**2\.\d**4}
  17. token time {\d**2\:\d**2}
  18. token hrs {\d**1..2\,\d**2}
  19. token text {(\h||<:L>)*}
  20. token order {40\d*}
  21. token comments {\V*}
  22. token nonrecord {\N*\n}
  23. }
  24.  
  25. class timesheetdata {
  26. has $.name;
  27. has $.customer;
  28. has $.country;
  29. has @.orders;
  30. has %.hours;
  31.  
  32.  
  33. method tester(){ say $!name;}
  34. submethod BUILD(:$namer) {
  35. $!name = $namer;
  36. say $!name;
  37. }
  38. }
  39.  
  40. class timesheetdataactions {
  41.  
  42. method name($/) {
  43. my Int $positionfrom = 11 + index(~$/, "W&H Staff:");
  44. my Int $positionto = 10 + index(~$/, "Customer: ");
  45. #my $temp= ~$<names>.trim-trailing ~" " ~$<secondline>.substr($positionfrom..$positionto);
  46. make ~$<names>.trim-trailing ~" " ~$<secondline>.substr($positionfrom..$positionto);
  47. #make timesheetdata.new(namer => $temp);
  48.  
  49.  
  50. }
  51. }
  52. sub MAIN ($filename){
  53. my $times=timesheetparser.parsefile($filename,:actions(timesheetdataactions)).ast;
  54. my $fh= open "testfile.txt", :w;
  55. say $times;
  56. for $times<line> -> $l {
  57. if ($l<assigns>) {
  58. $fh.say(Str.($l<assigns><name>.made));
  59. }
  60. if ($l<record>|$l<times>) {
  61. $fh.say(Str.($l));
  62. }
  63. }
  64.  
  65. my $timer=timesheetparser.parsefile('testfile.txt');
  66. my %timesa;
  67. my $temporder;
  68. for $timer<line> -> $l {
  69. for $l<record><secondhalf> -> $r {
  70. for $r<times> -> $t {
  71. if $t<order> {
  72. my $temp=$t<hrs>;
  73. $temp~~s/","/\./;
  74. $temporder=$t<order>;
  75. (%timesa{$temporder})=(%timesa{$temporder})+$temp;
  76. }
  77. }
  78. }
  79. };
  80. $fh.say(%timesa);
  81. $fh.close;
  82. }
Add Comment
Please, Sign In to add comment