Larry Sandwick wrote:
> 
> With the little amount of Perl that I know, I have come to a dilemma. I
> do not know how to parse this file so in column 1 (24165) is the number
> duplicate for every item number in the list. I also need  in the 2
> column  (O185850) to duplicate itself for every item. The 3rd item
> (05/30/03)needs to follow the same process. The file format is below,
> before the parser.
> 
> I know I can split the file on "|" but because the data is not
> consistent and my skill set is limiting me to re-parse this file into a
> file I can upload into MySql I am asking for help and suggestions I do I
> detect that column 1 has change ? Some how I need to read in the first
> three lines for every backorder, before I can start outputting the data?
> 
> This is the file before ( see below what is should look like after the
> parser.  (Before)
> 
> 24165| DEF    |       |                          |     |     |
>      |O18580  |259    |LEATHER BOOK SIDE TABLE   |    1|    1|   295.00
>      |05/30/03|1774   |FUNCTIONAL TABLE LAMP     |    1|    0|    35.00
>      |        |1773   |FUNCTIONAL FLOOR LAMP     |    1|    0|    62.50
>      |        |1302   |MOROCCAN FLORAL BX,BRASS  |    1|    0|    29.00
>      |        |1666   |CUBA COFFEE TABLE         |    1|    1|   290.00
>      |        |1666   |CUBA SIDE TABLE           |    1|    1|   147.50
> 24310| ABC    |       |                          |     |     |
>      |O18813  |1145   |FLEUR-DE-LIS DOCUMENT BOX |    1|    0|    52.50
>      |07/29/03|1549   |TAOS CENTERPIECE          |    1|    1|    65.00
>      |        |1729L  |FRENCH BOX BOOKEND, LEFT  |    1|    1|    69.00
>      |        |1729R  |FRENCH BOX BOOKEND, RIGHT |    1|    1|    69.00
>      |        |1549   |WINDEMERE BOOK CADDY      |    1|    0|    85.00
>      |        |1774   |REVOLVING BOOK TABLE      |    1|    1|   234.00
>      |        |1574   |NORMANDY 3 DRAWER CONSOLE |    1|    1|   330.00
>      |        |1765   |LEATHER BOOKS,ASST.SET/12 |    1|    1|   175.00
> 5522 |  XYZ   |       |                          |     |     |
>      |O18549  |1551   |HEX LEATHER GARDEN STOOL  |    1|    0|   130.50
>      |05/20/03|1749   |TRIVET STAND              |    1|    1|    87.75
>      |        |1801   |DESK BOX, VICTORIA        |    1|    1|    85.50
>      |        |1549   |TAOS CENTERPIECE          |    1|    1|    58.50
> 
> (After)
> 
> Format user | itemkey | date | item | description | order | backorder | cost
> 
> 24165|O18580|05/30/03|259    |LEATHER BOOK SIDE TABLE   |    1|    1| 295.00
> 24165|O18580|05/30/03|1774   |FUNCTIONAL TABLE LAMP     |    1|    0| 35.00
> 24165|O18580|05/30/03|1773   |FUNCTIONAL FLOOR LAMP     |    1|    0| 62.50
> 24165|O18580|05/30/03|1302   |MOROCCAN FLORAL BX,BRASS  |    1|    0| 29.00
> 24165|O18580|05/30/03|1666   |CUBA COFFEE TABLE         |    1|    1| 290.00
> 24165|O18580|05/30/03|1666   |CUBA SIDE TABLE           |    1|    1| 147.50
> 24310|O18813|07/29/03|1145   |FLEUR-DE-LIS DOCUMENT BOX |    1|    0| 52.50
> 24310|O18813|07/29/03|1549   |TAOS CENTERPIECE          |    1|    1| 65.00
> 24310|O18813|07/29/03|1729L  |FRENCH BOX BOOKEND, LEFT  |    1|    1| 69.00
> 24310|O18813|07/29/03|1729R  |FRENCH BOX BOOKEND, RIGHT |    1|    1| 69.00
> 24310|O18813|07/29/03|1549   |WINDEMERE BOOK CADDY      |    1|    0| 85.00
> 24310|O18813|07/29/03|1774   |REVOLVING BOOK TABLE      |    1|    1| 234.00
> 24310|O18813|07/29/03|1574   |NORMANDY 3 DRAWER CONSOLE |    1|    1| 330.00
> 24310|O18813|07/29/03|1765   |LEATHER BOOKS,ASST.SET/12 |    1|    1| 175.00
> 5522 |O18549|05/20/03|1551   |HEX LEATHER GARDEN STOOL  |    1|    0| 130.50
> 5522 |O18549|05/20/03|1801   |DESK BOX, VICTORIA        |    1|    1| 85.50
> 
> Any suggestions would greatly be appreciated !!!

This seems to do what you want:

#!/usr/bin/perl
use warnings;
use strict;

my ( %record, $user );
while ( <DATA> ) {
    my @fields = split /\|/ or next;
    if ( /^\d/ or eof DATA ) {
        for my $key ( keys %record ) { 
            print join( '|', $key, @{ $record{ $key } }{ qw/ itemkey date / }, $_ )
                for @{ $record{ $key }{ data } };
            }
        %record = ( $user = $fields[ 0 ] => {} );
        }
    else {
        if ( $fields[ 1 ] =~ m|\d+/\d+/\d+| ) {
            $record{ $user }{ date } = $fields[ 1 ];
            }
        elsif ( $fields[ 1 ] =~ m|\d+| ) {
            $record{ $user }{ itemkey } = $fields[ 1 ];
            }
        push @{ $record{ $user }{ data } }, join '|', splice @fields, 2;
        }
    }

__DATA__
24165| DEF    |       |                          |     |     |
     |O18580  |259    |LEATHER BOOK SIDE TABLE   |    1|    1|   295.00
     |05/30/03|1774   |FUNCTIONAL TABLE LAMP     |    1|    0|    35.00
     |        |1773   |FUNCTIONAL FLOOR LAMP     |    1|    0|    62.50
     |        |1302   |MOROCCAN FLORAL BX,BRASS  |    1|    0|    29.00
     |        |1666   |CUBA COFFEE TABLE         |    1|    1|   290.00
     |        |1666   |CUBA SIDE TABLE           |    1|    1|   147.50
24310| ABC    |       |                          |     |     |
     |O18813  |1145   |FLEUR-DE-LIS DOCUMENT BOX |    1|    0|    52.50
     |07/29/03|1549   |TAOS CENTERPIECE          |    1|    1|    65.00
     |        |1729L  |FRENCH BOX BOOKEND, LEFT  |    1|    1|    69.00
     |        |1729R  |FRENCH BOX BOOKEND, RIGHT |    1|    1|    69.00
     |        |1549   |WINDEMERE BOOK CADDY      |    1|    0|    85.00
     |        |1774   |REVOLVING BOOK TABLE      |    1|    1|   234.00
     |        |1574   |NORMANDY 3 DRAWER CONSOLE |    1|    1|   330.00
     |        |1765   |LEATHER BOOKS,ASST.SET/12 |    1|    1|   175.00
5522 |  XYZ   |       |                          |     |     |
     |O18549  |1551   |HEX LEATHER GARDEN STOOL  |    1|    0|   130.50
     |05/20/03|1749   |TRIVET STAND              |    1|    1|    87.75
     |        |1801   |DESK BOX, VICTORIA        |    1|    1|    85.50
     |        |1549   |TAOS CENTERPIECE          |    1|    1|    58.50

__END__


John
-- 
use Perl;
program
fulfillment

-- 
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