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

hi Monks, How do i write experession for the pattern match for below data....
'SELECTPOID_ID0FROM'||TABLE_NAME||'WHEREACCOUNT_OBJ_ID0=76362171;' ---------------------------------------------------------------------- +---------- SELECT poid_id0 FROM ACTIVE_SESSION_T WHERE account_obj_id0 = 7636217 +1; SELECT poid_id0 FROM ADMIN_ACTION_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AUDIT_ACCOUNT_PRODUCTS_T WHERE account_obj_id0 = + 76362171; SELECT poid_id0 FROM AU_BAL_GRP_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_DEAL_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_DEPENDENCY_T WHERE account_obj_id0 = 76362171 +; SELECT poid_id0 FROM AU_DEVICE_SERVICES_T WHERE account_obj_id0 = 763 +62171; SELECT poid_id0 FROM AU_DEVICE_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_DISCOUNT_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_GROUP_SHARING_MEMBERS_T WHERE account_obj_id0 + = 7636217 1; 'SELECTPOID_ID0FROM'||TABLE_NAME||'WHEREACCOUNT_OBJ_ID0=76362171;' ---------------------------------------------------------------------- +---------- SELECT poid_id0 FROM AU_GROUP_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_ORDERED_BALGROUP_T WHERE account_obj_id0 = 76 +362171; SELECT poid_id0 FROM AU_PAYINFO_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_PLAN_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_PRODUCT_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_RATE_PLAN_SELECTOR_T WHERE account_obj_id0 = +76362171; SELECT poid_id0 FROM AU_RATE_PLAN_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_RATE_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_ROLLOVER_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_SERVICE_T WHERE account_obj_id0 = 76362171; 'SELECTPOID_ID0FROM'||TABLE_NAME||'WHEREACCOUNT_OBJ_ID0=76362171;' ---------------------------------------------------------------------- +---------- SELECT poid_id0 FROM AU_SERVICE_TRANSFER_LIST_T WHERE account_obj_id0 + = 7636217 1; SELECT poid_id0 FROM AU_SPONSORSHIP_T WHERE account_obj_id0 = 7636217 +1; SELECT poid_id0 FROM AU_TELIA_AGREEMENT_T WHERE account_obj_id0 = 763 +62171; SELECT poid_id0 FROM AU_TELIA_OFFER_ACCOUNT_T WHERE account_obj_id0 = + 76362171; SELECT poid_id0 FROM AU_TRANSITION_T WHERE account_obj_id0 = 76362171 +; SELECT poid_id0 FROM BAL_GRP_T WHERE account_obj_id0 = 76362171;
where my output should be ....
SELECT poid_id0 FROM ACTIVE_SESSION_T WHERE account_obj_id0 = 7636217 +1; SELECT poid_id0 FROM ADMIN_ACTION_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AUDIT_ACCOUNT_PRODUCTS_T WHERE account_obj_id0 = + 76362171; SELECT poid_id0 FROM AU_BAL_GRP_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_DEAL_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_DEPENDENCY_T WHERE account_obj_id0 = 76362171 +; SELECT poid_id0 FROM AU_DEVICE_SERVICES_T WHERE account_obj_id0 = 763 +62171; SELECT poid_id0 FROM AU_DEVICE_T WHERE account_obj_id0 = 76362171; SELECT poid_id0 FROM AU_DISCOUNT_T WHERE account_obj_id0 = 76362171;
..... the ----------------------------------------------------------- line and the 'SELECTPOID_ID0FROM'||TABLE_NAME||'WHEREACCOUNT_OBJ_ID0=76362171;' should be edited.

Replies are listed 'Best First'.
Re: Pattern match....
by moritz (Cardinal) on Jan 21, 2009 at 07:33 UTC
    So basically you want to grab the first block, right? If yes, count the number of times you've seen a line made of dashes, and if that number is between one and two, print the line.

    If you want more specific help, show us what you've tried so far.

Re: Pattern match....
by puudeli (Pilgrim) on Jan 21, 2009 at 07:37 UTC

    Update: One should read the whole problem description before running into conclusions...

    Update2:If you require only the first block and not all select statements, then in addition to the examples in my post you would have to recognize when to stop collecting lines from the input.

    --
    seek $her, $from, $everywhere if exists $true{love};
      hi... its showing an error.as mentioned below, Type of arg 1 to push must be array (not private variable) . in the line , push $line, @wanted if $line =~ /^SELECT poid/;

        Ah, the push arguments are in wrong order, my memory played a trick with me. The correct order would be:

        push @wanted, $line if $line =~ /^SELECT poid/;
        --
        seek $her, $from, $everywhere if exists $true{love};