comparison nun/tasks/findreqs.pl @ 356:102ac4f0bd22 misc

Make findreqs.pl more forgiving to inaccuracies in log data.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 27 Jun 2018 14:57:20 +0300
parents 6f4baa8abf82
children b5959a81c3f5
comparison
equal deleted inserted replaced
355:6f4baa8abf82 356:102ac4f0bd22
1 #!/usr/bin/perl -w 1 #!/usr/bin/perl -w
2 use strict; 2 use strict;
3 use warnings; 3 use warnings;
4 my %taskList = (); 4 my %taskList = ();
5 my %taskNames = ();
5 my @tmpList = (); 6 my @tmpList = ();
6 my $wasFound = 0; 7 my $wasFound = 0;
7 my $n; 8 my $n;
8 my $nline = 0; 9 my $nline = 0;
10
9 11
10 ### Process and parse input logfile 12 ### Process and parse input logfile
11 while (defined(my $line = <STDIN>)) 13 while (defined(my $line = <STDIN>))
12 { 14 {
13 $nline++; 15 $nline++;
19 $wasFound = 1; 21 $wasFound = 1;
20 $n = 0; 22 $n = 0;
21 } 23 }
22 elsif ($line =~ /^You now have '(.+)' at ([0-9]+)\% without special bonuses\.$/ && $wasFound) 24 elsif ($line =~ /^You now have '(.+)' at ([0-9]+)\% without special bonuses\.$/ && $wasFound)
23 { 25 {
24 my $tmpName = $1; 26 my $tmpName = lc($1);
25 my $tmpPercentage = $2; 27 my $tmpPercentage = $2;
26 $n = 10; 28 $n = 10;
27 29
28 for my $taskName (@tmpList) 30 for my $taskName (@tmpList)
29 { 31 {
30 if (defined($taskList{$taskName}{$tmpName})) 32 my $lcName = lc($taskName);
33 if (defined($taskList{$lcName}{$tmpName}))
31 { 34 {
32 if ($tmpPercentage < $taskList{$taskName}{$tmpName}) 35 if ($tmpPercentage < $taskList{$lcName}{$tmpName})
33 { 36 {
34 $taskList{$taskName}{$tmpName} = $tmpPercentage; 37 $taskList{$lcName}{$tmpName} = $tmpPercentage;
35 } 38 }
36 } 39 }
37 else 40 else
38 { 41 {
39 $taskList{$taskName}{$tmpName} = $tmpPercentage; 42 $taskList{$lcName}{$tmpName} = $tmpPercentage;
43 $taskNames{$lcName} = $taskName;
40 } 44 }
41 } 45 }
42 } 46 }
43 47
44 if ($n++ >= 6) 48 if ($n++ >= 6)
45 { 49 {
46 $wasFound = 0; 50 $wasFound = 0;
47 for my $taskName (@tmpList) 51 for my $taskName (@tmpList)
48 { 52 {
49 if (!defined($taskList{$taskName})) 53 my $lcName = lc($taskName);
54 if (!defined($taskList{$lcName}))
50 { 55 {
51 $taskList{$taskName} = (); 56 $taskList{$lcName} = {};
57 $taskNames{$lcName} = $taskName;
52 } 58 }
53 } 59 }
54 @tmpList = (); 60 @tmpList = ();
55 } 61 }
56 } 62 }
60 { 66 {
61 print "|------------------------------------------------------------------------|\n"; 67 print "|------------------------------------------------------------------------|\n";
62 } 68 }
63 69
64 70
71 sub print_line($$$)
72 {
73 my ($task, $skill, $perc) = @_;
74 printf "| %-36s | %-25s | %3d |\n", $task, $skill, $perc;
75 }
76
77
65 ### Print out the results 78 ### Print out the results
66 $n = 0; 79 $n = 0;
67 if ($#ARGV >= 0) { 80 if ($#ARGV >= 0) {
68 if ($ARGV[0] eq "-tasks") 81 if ($ARGV[0] eq "-tasks")
69 { 82 {
70 for my $taskName (sort keys %taskList) 83 for my $taskName (sort keys %taskList)
71 { 84 {
72 print $taskName."\n"; 85 print $taskNames{$taskName}."\n";
73 } 86 }
74 } 87 }
75 elsif ($ARGV[0] eq "-dump") 88 elsif ($ARGV[0] eq "-dump")
76 { 89 {
77 for my $taskName (sort keys %taskList) 90 for my $taskName (sort keys %taskList)
85 } 98 }
86 } 99 }
87 } 100 }
88 else 101 else
89 { 102 {
90 my $sepLine = 0; 103 my $separator = 0;
91 print ",------------------------------------------------------------------------.\n"; 104 print ",------------------------------------------------------------------------.\n";
92 print "| Task name | Skill/spell | Min |\n"; 105 print "| Task name | Skill/spell | Min |\n";
93 print "+--------------------------------------+---------------------------+-----+\n"; 106 print "+--------------------------------------+---------------------------+-----+\n";
94 for my $taskName (sort keys %taskList) 107 for my $taskName (sort keys %taskList)
95 { 108 {
96 my $nreqs = scalar keys(%{$taskList{$taskName}}); 109 my $nreqs = scalar keys(%{$taskList{$taskName}});
97 110
98 if ($nreqs == 0) 111 if ($nreqs == 0)
99 { 112 {
100 # No requirement data for task 113 # No requirement data for task
101 print_separator() if ($sepLine); 114 print_separator() if ($separator);
102 printf "| %-36s | %-31s |\n", $taskName, "UNKNOWN or no requirements"; 115 printf "| %-36s | %-31s |\n", $taskName, "UNKNOWN or no requirements";
103 print_separator(); 116 print_separator();
104 $sepLine = 1; 117 $separator = 1;
105 } 118 }
106 elsif ($nreqs == 1) 119 elsif ($nreqs == 1)
107 { 120 {
108 for my $skillName (sort keys %{$taskList{$taskName}}) 121 for my $skillName (sort keys %{$taskList{$taskName}})
109 { 122 {
110 printf "| %-36s | %-25s | %3d |\n", $taskName, $skillName, $taskList{$taskName}{$skillName}; 123 print_line($taskNames{$taskName}, $skillName, $taskList{$taskName}{$skillName});
111 } 124 }
112 $sepLine = 1; 125 $separator = 1;
113 } 126 }
114 else 127 else
115 { 128 {
116 print_separator() if ($sepLine); 129 print_separator() if ($separator);
117 printf "| %-70s |\n", $taskName; 130 printf "| %-70s |\n", $taskNames{$taskName};
118 for my $skillName (sort keys %{$taskList{$taskName}}) 131 for my $skillName (sort keys %{$taskList{$taskName}})
119 { 132 {
120 printf "| %-36s | %-25s | %3d |\n", "", $skillName, $taskList{$taskName}{$skillName}; 133 print_line("", $skillName, $taskList{$taskName}{$skillName});
121 } 134 }
122 print_separator(); 135 print_separator();
123 $sepLine = 0; 136 $separator = 0;
124 } 137 }
125 138
126 $n++; 139 $n++;
127 } 140 }
128 print "|-----------------+--------------------+---------------------------+-----'\n"; 141 print "|-----------------+--------------------+---------------------------+-----'\n";