Hello Monks,


Ok so for some reason I'm having trouble figuring this out and hopefully someone can help me. I can think of two different ways to go about this.

First Way:
I have a 2D-Array which the rows can vary in length but the columns are always the same.
i.e. ---> @AoA[$x][$y]

I also have a Sub-Routine in my code which goes through the array and if a certain username is found in a row, I save a reference number to that line in another simple one-dimensional array. So if I find the username I want, I save $x to an array called @excluded.

So for example:
@AoA has the following (BTW the pipes "|" are not actually part of the array)
922337219576856 |rgiles |5005444 |156 |pts/220 |9:00:44 922337219576856 |mrandall |3309650 |35 |none |9:10:44 922337219576856 |mmartin |4565899 |122 |pts/101 |9:15:44 59761456123786 |rkelly |5555555 |999 |pts/900 |9:00:00 59761456123786 |mvick |1234567 |886 |none |9:20:00 59761456123786 |jrussel |7654321 |456 |tty/101 |10:00:00 86555522211 |cklien |5151515 |000 |tty/100 |10:00:00 86555522211 |mmartin |1234567 |987 |none |11:00:00

The username I want is "mmartin".
So the array @excluded would contain:
@excluded = (2, 7)

So the main question is this:
How would I loop through the original 2D-Array (@AoA) and assign each element exactly how it is to another 2D-Array and if the current line is equal to a value in @excluded I want to skip that line and continue on to the next?

I know I could probably just loop through and just use the name to exclude the line but I'm adding to existing code. And the Array holding the references to the row line numbers already is being used in the code so I thought I should use that.

Here's what I tried:
Code is VERY rough tried so many different things not even sure where I left off but here's what I tried.
sub killSession { my $SysPerf; my $recordRef = 0; #Holds the names of users from SysPerf. my @SPUsers = ("bill", "mike", "kevin", "mmartin", "sp"); #Loop through all the records (a line at a time), and search for +SPUsers in that "full" record. for (my $x = 0; $x <= $#records; $x++) { for (my $y = 0; $y <= $#SPUsers; $y++) { if ("@{ $AoA[$x] }" =~ "$SPUsers[$y]" && $AoA[$x][0] eq 'O +WNER') { $SPrecords[$recordRef] = $x; $SysPerf .= "@{ $AoA[$x] }\n"; $recordRef++; } } } #IF SPrecords is not empty, then there are SP user's who own recor +ds. Do not kill these records. #IF they exist then we want to remove them from the array my $num = 0; if (@SPrecords) { for (my $x = 0; $x <= $#records; $x++) { if ($x ne @SPrecords) { for (my $y = 0; $y <= 13; $y++) { $AoA[$x][$y] = $recordsToDel[$num][$y]; print "$recordsToDel[$num][$y]"; } $num++; } } } }


Second Way:

This way I found to be much harder.
And that is to use the original array and splice/delete out the lines containing the usernames I want. But I couldn't figure out how to delete a row and then shift the rest up.


Any suggestions would be greatly appreciated.

Thanks in Advance,
Matt

.

In reply to Help to assign a 2D-Array to another while excluding specific rows. by mmartin

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.