array question (grep -v on array)

Ask a Question related to PERL Miscellaneous, Design and Development.

  1. #1

    Default array question (grep -v on array)

    Hi,

    I have an output of errors fed into an array, after which I only look
    at things I care about and put them in a different array:

    @oracle_errors =
    grep(/ORA-/||/neededarchiving/||/FULL/||/archival/||/Standby/||/deadlock/,@output);

    However, I would like to have (yet another array), e.g. @ignore_errors
    which will contain values such as
    ORA-error can be ignored
    ORA-error2 can be ignored

    How can I set that up?

    Alternatively, (if simpler), i'd like to add some kind of 'grep -v'
    functionality to my grep command (but the array method seems sweeter).

    Thanks.
    ........
    We use Oracle 8.1.7.4 on Solaris 2.7 boxes
    remove NSPAM to email
    NetComrade Guest

  2. Similar Questions and Discussions

    1. Converting an XML Array to a multi-level array
      I have an array assigned to a data grid such as: private var myIngredients:Array = new Array( <item ln1="Plain" sn="plain" ln2="(3 cups)...
    2. [newbie]saving and reading array of associative array
      i'm looking for examples of saving to file and reading back an array of associative array, in a ruby like way. saying i have something like : ...
    3. array data matches but array created in loop doesn't work
      I have the exact same data in two arrays, but only the array created like so will work: $spaw_imglibs = array( array( 'value' =>...
    4. #24897 [Com]: array_multisort() will reindex the array but not if array length is 1
      ID: 24897 Comment by: franklin_se at hotmail dot com Reported By: chro at sokrates dot uio dot no Status: ...
    5. #24897 [Opn->Asn]: array_multisort() will reindex the array but not if array length is 1
      ID: 24897 Updated by: sniper@php.net Reported By: chro at sokrates dot uio dot no -Status: Open +Status: ...
  3. #2

    Default Re: array question (grep -v on array)

    [email]andreyNSPAM@bookexchange.net[/email] (NetComrade) writes:
    > I have an output of errors fed into an array, after which I only look
    > at things I care about and put them in a different array:
    >
    > @oracle_errors =
    > grep(/ORA-/||/neededarchiving/||/FULL/||/archival/||/Standby/||/deadlock/,@output);
    >
    > However, I would like to have (yet another array), e.g. @ignore_errors
    > which will contain values such as
    > ORA-error can be ignored
    > ORA-error2 can be ignored
    What do you mean by that? What would be the desired semantics of
    @ingore_errors?

    If you are talking about an analogue of gnugrep -vf then I'd assume
    @ignore_errors was an array of regex (all of which must be unmatched).
    > How can I set that up?
    You could combine the patterns into one...

    my $ignore_error_pattern = join '|', map "(?:$_)", @ignore_errors;
    $ignore_error_pattern = qr/$ignore_error_pattern/;

    ....and then use...

    my @oracle_errors = grep !/$ignore_error_pattern/, @output;

    However, whilst this may look elegant, it turns out that it is not
    efficient.

    You are better off just doing it with explicit nested loops.

    That is, unless you really don't need @ignore_errors to be an arbirary
    array of regex.

    If you can instead make @ignore_errors be a simple array of strings
    that are going to looked for in a easily recognied place in the line
    (like, say, at the first ocurance of 'ORA-') there's a much more
    efficient solution.

    my %ignore;
    @ignore{@ignore_errors}=();

    my @oracle_errors = grep { ! ( /(ORA-\S+)/ && exists $ignore{$1) ) } @output;
    > We use Oracle 8.1.7.4 on Solaris 2.7 boxes
    I drive a Ford Escort on the LHS of the road :-)

    --
    \\ ( )
    . _\\__[oo
    .__/ \\ /\@
    . l___\\
    # ll l\\
    ###LL LL\\
    Brian McCauley Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139