On Thu, 2003-10-30 at 12:26, Michael Bowden wrote:
> Hi folks:
>  
> I first want to apologize for this post.  I think that during the fall
> back, I lost a few brain cells.
>  
> I am working on a Perl script to update a data file.  I load my data
> into an array.  I want to cycle through the array and make changes. Then
> output the array to a file.  In the past, I would open the database,
> read in the lines, and output each line as I updated the elements in the
> array.  In these scripts, I was only updating, one element in the array.
>  Now I need to update several elements in the array before writing
> everything to a file.  If I write the program as I have in the past, I
> would be using a lot of i/o reading the data into the array, changing
> one element and then outputting the data to a file and repeating the
> steps over and over until all the changes have been made.  In some
> cases, I will be changing 20 to 30 elements in the array.  So I need
> some help.
>  
> I read in an array from a file.  It looks something like this:
>  
> 200044455669,,abcdefg,7777777,f00,f00,f00,f00,a01,b23,c45,d00,e10,no,no,no,no,no,
> 200011122333,,hikls,2222223,f32,f43,f00,f00,a04,b06,c08,d03,e09,no,no,no,no,no,
> mrgreenjeans,,pqrstuv,44442244,f20,f00,f00,f00,a06,b08,c10,d10,e00,no,no,no,no,no,
> 20006654987,,zzzxyxz,33344434,f03,f00,f00,f00,a00,b12,c12,d13,e14,no,no,no,no,no,
>  
> Each line represents one element in the array.  
> So $array[0] equal 
> 200044455669,,abcdefg,7777777,f00,f00,f00,f00,a01,b23,c45,d00,e10,no,no,no,no,no,.
>  
> I want to update the 4th, 5th, and 13th subelements in $array[0],
> $array[1] and $array[4].  Then I want to write the updated @array back
> to a file.

Is this remotely close to what you're looking for?

# read data on stdin. collect output on stdout.
while (<>) {
        chomp;
        @line = split(',');
        # interested in records stating with digits
        if (/^\d/) {
                # update fields 4, 5, 13.
                @line[3,4,12] = ('one', 'two', 'three');
                print join(',',@line), "\n";
        } else {
                print "$_\n";
        }
}

Alternative to print you could push onto the array of records as you
have been.


>  
> Can some one shed some light on how I can do this without updating a
> single line at a time?
>  
> Thanks.
>  
> Michael
>  
> 
> 
> 
> 
> Michael L. Bowden
> Coordination of Automation and Access Services
> Harrisburg Area Community College
> e: [EMAIL PROTECTED]
-- 
Dale Bewley - [EMAIL PROTECTED] - 530-752-1202
Unix Administrator - Shields Library - UC Davis

Reply via email to