[Chicago-talk] messy scalar into an array.

Brian Katzung briank at kappacs.com
Tue Mar 2 12:28:53 PST 2010


As an alternative to fixed fields, how about:

use strict;
my @received = `faxstat -r`;
my $line;
my ($mode, $ident, $time, $file);

foreach $line (@received) {
    if (($mode, undef, undef, $ident, $time, $file) =
      ($line =~ 
/^(\S+)\s+(\d+)\s+(\d+)\s+(\S.*\S)?\s+(..:..)\s+(.*\.tif)$/) {
        # do whatever
    }
}

This should also deal with skipping irrelevant (fax title?) lines.

  - Brian

Richard Reina wrote:
> Actually, I believe all the suggestion would work until I realized 
> that every now in then there is a column that is completely blank and 
> then it throw everything off. Here is an example of the output:
>
> -rw---- 2  14  <UNSPECIFIED> 14:53 fax00003459.tif
> -rw---- 1  14  501 443 9393         14:58 fax00003460.tif
> -rw---- 1  14                              15:01 fax00002470.tif
>
> That occasional empty column messes it up.  Is there a way to 
> accommodate for that?
>
> Sorry, for the added wrinkle.  I had not noticed that before.
>
> Richard
> *
> *
>
>
>     On Tue, Mar 2, 2010 at 8:46 AM, Richard Reina
>     <richard at rushlogistics.com <mailto:richard at rushlogistics.com>> wrote:
>
>         I'm sorry for asking what likely should be a simple question
>         but after spending a fair amount of time playing with qw(),
>         split(), join(), etc. I still have not figured it out.
>
>         I have some fairly messy system output which I have managed to
>         isolate into a scalar with
>
>         use strict;
>         my @received = `faxstat -r`;
>
>         I can't figure out how to neatly get this into an array so I
>         can get the output into a database table;
>
>         I've gotten this far;
>
>         my $line;
>         my @fax;
>
>         foreach $line (@received) {
>
>            if (substr($line,0,5) eq "-rw---") { # make sure it's an
>         actual fax
>                                                 # and not the title of
>         the output
>                chomp($line);
>            }
>         }
>
>         $line is exactly what I want but it's in the form of a scalar;
>          When I try to split it up into elements of an array with
>         @fax=split("", $line); it does not work due to all the back to
>         back white spaces.  If anyone can help me out with a better
>         way to do this I would really appreciate it.
>
>         Thanks,
>
>         Richard
>         _______________________________________________
>         Chicago-talk mailing list
>         Chicago-talk at pm.org <mailto:Chicago-talk at pm.org>
>         http://mail.pm.org/mailman/listinfo/chicago-talk
>
>

-- 
Brian Katzung, Kappa Computer Solutions, LLC
Leveraging UNIX, GNU/Linux, open source, and custom
software solutions for business and beyond
Phone: 877.367.8837 x1  http://www.kappacs.com




More information about the Chicago-talk mailing list