Subversion Repositories camp_sysinfo_client_3

Rev

Rev 165 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 165 Rev 169
Line 2... Line 2...
2
use warnings;
2
use warnings;
3
use strict;  
3
use strict;  
4
 
4
 
5
# modified 20190419 RWR
5
# modified 20190419 RWR
6
# changed cleanup to remove encapsulating quotes
6
# changed cleanup to remove encapsulating quotes
7
 
7
#
8
# 20200220 RWR v1.4.1
8
# 20200220 RWR v1.4.1
9
# added trim
9
# added trim
-
 
10
# 20200224 RWR v1.4.2
-
 
11
# Added tableToHash
10
 
12
 
11
# Description: Library used by modules. Do NOT enable
13
# Description: Library used by modules. Do NOT enable
12
 
14
 
13
 
15
 
14
our $VERSION = '1.4.1';
16
our $VERSION = '1.4.2';
15
 
17
 
16
# set of libraries to be used by these modules
18
# set of libraries to be used by these modules
17
 
19
 
-
 
20
# parameters
-
 
21
# $report - a reference to a report array (one line per row) 
-
 
22
# $headerRegex - optional regex to locate the first (header) line.
-
 
23
# $delimiter - optional delimiter used between header columns
-
 
24
# if $headerRegex is not defined, assumes first line is the headers
-
 
25
# if delimiter is not defined, assumes space is the delimitere
-
 
26
#
-
 
27
# Determines the field widths based on the header line
-
 
28
# processes each line in turn, returning an array ref, where each
-
 
29
# row is a hash ref. The hash ref has the key from the header, and
-
 
30
# the value found in the row.
-
 
31
 
-
 
32
sub tableToHash {
-
 
33
   my ($report, $headerRegex, $delimiter) = @_;
-
 
34
   my @return;
-
 
35
   my %headers;
-
 
36
   # get rid of any line returns at the end.
-
 
37
   chomp @{$report};
-
 
38
   my $lineNum = 0;
-
 
39
   # bypass all the header information, if $headerRegex is defined
-
 
40
   if ( $headerRegex ) {
-
 
41
      for ( $lineNum = 0; $lineNum < @{$report} && ${$report}[$lineNum] !~ m/$headerRegex/; $lineNum++ ) {}
-
 
42
   }
-
 
43
   if ( $lineNum < @{$report} ) { # did we get an actual report? some drives will not give us one
-
 
44
      # first, process the header line and get the start position and the length
-
 
45
      my $char = 0;
-
 
46
      while ( $char < length(${$report}[$lineNum]) ) {
-
 
47
         substr( ${$report}[$lineNum],$char ) =~ m/^([^ ]+\s*)/;
-
 
48
         my $header = $1;
-
 
49
         my $start = $char;
-
 
50
         my $length = length($header);
-
 
51
         if ( $header = &trim( $header ) ) {
-
 
52
            $headers{$header}{'start'} = $start;
-
 
53
            # note that if this is the last header, we do NOT want a lenght attribute
-
 
54
            $headers{$header}{'length'} = $length-1 if $length + $char < length(${$report}[$lineNum]);
-
 
55
         }
-
 
56
         $char += $length;
-
 
57
      }
-
 
58
      # now, get the data from all the following lines
-
 
59
      while ( ++$lineNum < @{$report} ) {
-
 
60
         last unless ${$report}[$lineNum]; # first blank line bails
-
 
61
         my %thisLine;
-
 
62
         foreach my $thisHeader (keys %headers) {
-
 
63
            $thisLine{$thisHeader} = &trim( 
-
 
64
               defined( $headers{$thisHeader}{'length'} ) ? 
-
 
65
                  substr( ${$report}[$lineNum], $headers{$thisHeader}{'start'}, $headers{$thisHeader}{'length'} )
-
 
66
                  : # if no length defined, grab everything to the end of the line
-
 
67
                  substr( ${$report}[$lineNum], $headers{$thisHeader}{'start'} )
-
 
68
               );
-
 
69
         }
-
 
70
         push @return, \%thisLine;
-
 
71
      }
-
 
72
   }
-
 
73
   return \@return;
-
 
74
}
-
 
75
 
-
 
76
 
-
 
77
 
18
 
78
 
19
# cleanUp - passed a delimiter and a string, does the following (delimiter can be '')
79
# cleanUp - passed a delimiter and a string, does the following (delimiter can be '')
20
#           chomps the string (removes trailing newlines)
80
#           chomps the string (removes trailing newlines)
21
#           removes all text BEFORE the delimiter, the delimiter, and any whitespace
81
#           removes all text BEFORE the delimiter, the delimiter, and any whitespace
22
#           thus, the string 'xxI Am x  a weird string' with a newline will become
82
#           thus, the string 'xxI Am x  a weird string' with a newline will become