If asterisks will only appear in the first position of a field, you could
use a TRT instruction to determine if (and where) an asterisk appears.  If
one does appear, the position would let you "calculate" which field it
appears in so you can move the corresponding data into the compare operand.
If more than one field of a table entry can contain an asterisk, you would
need to repeat the test until no asterisks remained.

If your outer loop is over the table elements and your inner loop is over
the structure data, then I would set a flag for each field of the table
containing an asterisk.  Then you need only test the flags to determine
which structure data needs to be copied to the compare operand.

But if you have to do I/O for the structure data, you may want the opposite
loop order so you would read each structure element only once.  If the
number of entries in the Acceptable Values table is reasonable, you could
preprocess them into an array of flags and avoid multiple I/Os for that data
also.

> -----Original Message-----
> From: IBM Mainframe Assembler List [mailto:ASSEMBLER-
> l...@listserv.uga.edu] On Behalf Of esst...@juno.com
> Sent: Saturday, June 17, 2017 8:55 AM
> To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
> Subject: Table Searchig with a Mask
> 
> Hi everyone
> 
> I would like some help in reducing the number of instructions required to
search a table.
> The table is in no particular order, so a Binary Search may not be
appropriate here.
> .
> .
> I will try to explain this.
> .
> I have a structure with X number of fields
> For this example lets assume:
> STRUCTURE    EQU *
> USERID       DS CL8
> COMPANY_CODE DS CL4
> JOB_NAME     DS CL8
> FILE         DS CL8
> 
> I also have an Array (table) of Acceptable Values with the same elements
> as my structure.
> I can search the table using a single compare for a length of 28.
> .
> .
> However some of the table entries contain an asterisk "*" in the first
position of
> the respective field. The asterisk means to accept any value from the
structure.
> For Example:
> ARRAY         EQU  *
> TUSERID       DC CL8'JOSEPH  '
> TCOMPANY_CODE DC CL4'*   '
> TJOB_NAME     DC CL8'REPORT  '
> TFILE         DC CL8'*       '
> .
> In order to search the table using a single compare instruction, I would
need to overlay
> the respective elements in the structure with the Asterisk from the
corresponding element
> in the Array Table Entry.
> .
> This would mean I would need to compare each element in the ARRAY entry
for the
> Asterisk,
> and if present move the corresponding field to the structure.
>            CLI TCOMPANY_CODE,=C'*'
>            JNE NEXT_ELEMENT
>            MVC COMPANY_CODE,TCOMPANY_CODE
> .
> I prefer not to test each element in the ARRAY for an Asterisk and Move
them individually
> to the structure, prior to comparing the structure with the Array Entry.
> .
> I'm not aware of any instruction that will move selectively all fields
> with an Asterisk "*". Which Is what I am looking for, then I can use a
single move
> or four Moves and continue to use a single compare instruction.
> .
> Again I'm looking for the fewest amount of instructions to accomplish
this.
> .
> What Alternatives are there ?
> A long time ago I did see someone do something similar with a Translate
and Test.
> But again this is several iterations of TRT and a Move for each Array
element.
> .
> 
> Thank You
> Paul D'Angelo
> ************

Reply via email to