On Dec 11, 2003, at 12:27 PM, 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?
.

personally I say Shoot the "person" who came up with the file lay out - but what you need is a bit of peek ahead coding.

        my $entry;     # our entry - from the first line
        my $key = '';  # the 'key' - that bit from the second line
        my $date = ''; # date - that occurs on the third line
        my $line;      # what we will cache the 'rest of the date line'
        # I was using Inline::Files - so let us assume that
        # you opened the file as INFO1
        while ( my $stuff = <INFO1> ) {
        
                chomp($stuff);
                next if ($stuff =~/^\s*$/); # blow off empty lines
                # thin down the spaces around the "|"
                # this way the $user in particular will be 'empty'
                # as well as streamline the other fields

                $stuff =~ s/\s*\|\s*/|/g;
                my ($user,$itemkey,$tail) = split(/\|/, $stuff, 3);

                if ( $user )
                {
                        $entry = $user;         # save the entry info
                        $key = $date = '';  # reset any previous key and date
                } else {
                        if ( $key && $date ) # if we have both, this is a follow on 
item
                        {
                                print "$entry|$key|$date|$tail\n";
                        } elsif ( $key ) # if we have the key we need the date
                        {
                                $date = $itemkey; # collect the date
                                # send out foist the Old Line and then our new one
                                print "$entry|$key|$date|$line\n";
                                print "$entry|$key|$date|$tail\n";
                        } else {
                                $key = $itemkey; # save the key
                                $line = $tail;   # save the tail
                        }
                } # else side of have user value
        }

that will generate your
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|1749|TRIVET STAND|1|1|87.75
5522|O18549|05/20/03|1801|DESK BOX, VICTORIA|1|1|85.50
5522|O18549|05/20/03|1549|TAOS CENTERPIECE|1|1|58.50

Still think you should shoot who EVER came up with
the original file format...

HTH....

ciao
drieux

---


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