S_Shrum has asked for the wisdom of the Perl Monks concerning the following question:

I am using the DBI to return back the results of a flat-file database (via the AnyData DBD).

One thing I would like to be able to do is allow for record #s AS PART OF THE ARRAY after the query is run. The point is to make it optional.

Is there a way to create a row (position 0), insert the record number (row number), and move everything over (the query results), keeping in mind that the column heading array will also need to be changed as well with a 'Record #' field.

If this sounds confusing, let me know and I will try to be more specific.

TIA

Sean Shrum
sean@shrum.net
sean_shrum@hotmail.com

  • Comment on Want to add a ROW # field to an pre-existing array

Replies are listed 'Best First'.
Re: Want to add a ROW # field to an pre-existing array
by dvergin (Monsignor) on Feb 04, 2002 at 07:44 UTC
    As screamingeagle says, your question is a little vague. So let's make some assumptions: it would appear that you have an array of arrays with each inner array being one record. And when you say "Is there a way to create a row" it seems that you mean, "Is there a way to create a column..."

    If I'm on the right track we want to look first at those individual records which are each an (anonymous) array. For inserting values into the middle of an array, you need to use splice(). But to add elements to the beginning or end of an array, the following are each quite sufficient:

    @array = ($new, @array); # new 1st element or @array = (@array, $new); # new last element or @array = ($new, @array, $new2); # both
    In the case of an aoa (array of arrays), we need to be a little more tricky with things but the principle is the same:
    #!/usr/bin/perl -w use strict; # Fudge up some sample data my @records = (['Eagle', 'Bird', 'Feathers'], ['Moose', 'Mammal', 'Fur'], ['Adder', 'Snake', 'Skin']); # Insert the record number column @records = map { [$_, @{$records[$_]}] } (0..$#records); # Show the result print "@$_\n" for @records;
    If you like things a little more verbose and plain-spoken, you can substitute the following for the map line:
    for my $i (0..$#records) { @{$records[$i]} = ($i, @{$records[$i]}); }
    Hope this helps.

    David

    ------------------------------------------------------------
    "Perl is a mess and that's good because the
    problem space is also a mess.
    " - Larry Wall

Re: Want to add a ROW # field to an pre-existing array
by Biker (Priest) on Feb 04, 2002 at 11:08 UTC

    You can add a scalar value to the 'beginning' of an array using unshift(@my_array,'sometext');

    "Livet är hårt" sa bonden.
    "Grymt" sa grisen...

Re: Want to add a ROW # field to an pre-existing array
by screamingeagle (Curate) on Feb 04, 2002 at 06:57 UTC
    umm..this does sound a little vague (I'm quite dumb anyway, to make matters worse :-) ). Could u post whatever code you've written so far, or an example would also be great...