Charles K. Clarkson <mailto:[EMAIL PROTECTED]> wrote:
>     Repost your script to the previous web link and I'll take
> another look on Thursday.

I will do that.  In the meantime, I've implimented many
of the suggestions everyone has given me, but I'm a bit
stumped on this:

I have the function:

sub which_line {
        my $record = shift;
        # pipe symbols appear on line 1 at character positions 27 and 38, and do
        # not appear at those positions on line 2
        return 1 if $record =~ ((/\|[0A-Z]\|$/)
                        && ($record =~ /^.{26}\|/)
                        && ($record =~ /^.{37}\|/));
        return 2 if $record =~ /^.{30}\|[BNPG]\|/;
        return 3;
}

But it isn't working.  It appears to always find line 1
and never line two.  I had these two reversed (looked
for line 2 first) because the line 1 match I had before
will match both line 1 and line 2, which is why I've
added the /^.{26}\|/ and /^.{37}\|, as those characters
do not exist on line 2 at those positions, but they're
matching anyway with what I've got above.  My guess is
that the regex is finding any "|" in any position
after the ^.{X}, but I don't know how to fix that.

Any clues as to what I've done wrong?

The input being sent to the program is of the form:

|6643    |Jason Balicki   |          |0501211243|000:00:00|        0| S      |0|
|        |13145551212         |N|            |   0|001001|001001| 100|   10|B|A|

And the pipes will (should) always be at the locations
shown in the example.

I have also tried:

sub which_line {
        my $record = shift;
        # pipes (|) appear on line 1 at character positions 27 and 38, and do
        # not appear at those positions on line 2
        # also tried 'eq "|"' and $position=26 and 28.  Just in case I was
        # off on my count
        my $position=27
        if ((substr($record, $position) eq "\|") 
                && ($record =~ /\|[0A-Z]\|$/)){
                        return 1;
        }
        elsif ($record =~ /^.{30}\|[BNPG]\|/){
                return 2;
        }
        else {
                return 3;
        }
}

but, for whatever reason, the (substr($record, 27) eq "|")
doesn't match at all (when line 1 is passed through) and
I end up with a return value of 3.

The current (as of 1/26/2005 at 11:49 am) whole program
can be found at:

http://www.nothingimportant.net/perl-stuff/alcatel_readserial

Thanks again,

--J(K)


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to