That was what I ended up doing. A REXX stage that performs a loop on each record, using a parse template with variables as positional parsing points, and the rexx reverse function. It is fully adaptable to any number of fields, in any columns. I have not done any measurements, but it 'feels' quick enough. :-)
Thanks, Shimon On Tue, Aug 25, 2009 at 10:55 AM, Michael Harding <mhard...@us.ibm.com>wrote: > While all-pipes solutions are usually elegant and always inherently cool, > either Bob's or the Piper's could be a challenge to build dynamically. I'd > probably use one or the other - or something similar - for a fixed case, > but I think Shimon's search for a generalized solution would be more easily > addressed by a Rexx stage and wouldn't suffer that much of a performance > penalty. > > -- > Mike Harding > > CMSTSO Pipelines Discussion List <CMS-PIPELINES@VM.MARIST.EDU> wrote on > 08/25/2009 07:40:44 AM: > > > From: Bob Cronin <bob.cro...@gmail.com> > > To: CMS-PIPELINES@VM.MARIST.EDU > > Date: 08/25/2009 07:41 AM > > Subject: Re: reversing *parts* of a record > > Sent by: CMSTSO Pipelines Discussion List <CMS-PIPELINES@VM.MARIST.EDU> > > > > Couldn't you use Specs to do this? Assign those parts of the record > > that need to be reversed to a variable and use "print reverse(var)" to > > build the output record? > > > > For example > > > > PIPE Strliteral /abcdefg 12345 hijklmn 6789/ > > | Specs a: w1 . b: w3 . print reverse(a) 1 w2 nw print reverse(b) nw w4 > nw > > | Console > > > > produces: > > > > gfedcba 12345 nmlkjih 6789 > > -- > > bc > > > > On Tue, Aug 25, 2009 at 7:17 AM, John P. Hartmann<jphartm...@gmail.com> > wrote: > > > 3WAY gets you one range of a record. You'll need two, the second on > > > the tertiary output from the first. > > > > > > |w1: 3way w4 > > > |g1: gather > > > \w1: > > > |reverse > > > |g1: > > > \w1: > > > |w2: 3way w-2 > > > |g1: > > > \w2: > > > |reverse > > > |g1: > > > \w2: > > > |g1: > > > > > > j. > > > > > > 2009/8/25 Shimon Lebowitz <shimon...@gmail.com>: > > >> I am trying to deal with a problem apparently created for me by > > Mr. Gates & Co. > > >> > > >> I need to send files from CMS to end users on PCs, where the > > >> files contain data which represents Hebrew characters. I gave > > >> SMTP a translation table which converts the EBCDIC representation > > >> of Hebrew to the ASCII used by Windows, but the PC is a smart alec, > > >> and also reverses the character order, since Hebrew reads right to > left. > > >> > > >> So, if I have input records like this on CMS: > > >> > > >> 2008 12987 65084 abcdefgh 78346 45239 tuvwxyz 873468 > > >> 2009 31 836 ijklmno 169827 8373 mnop > 34902 > > >> > > >> (Note: the letters in the actual record will be Hebrew! I only used > > >> English to prevent the confusion that happens when the order gets > > >> reversed. And besides, how many of you have Hebrew fonts?). > > >> > > >> If I SendFile a file of those records to a MS-Win system, > > >> the characters will be displayed on the screen as hgfedcba, zyxwvut, > > >> etc. In order to have the data normal when it arrives, I need > > >> to reverse the field which contains the Hebrew text, but obviously NOT > > >> the other parts of the record, which would destroy the numeric values. > > >> > > >> What I think would be my favorite solution would be for the REVERSE > > >> stage to accept inputranges, as the XLATE stage does. That would be > great! > > >> A simple ... | REVERSE 22-31 48-56 | ... would solve my problem > > >> easily and elegantly. But... REVERSE has no ranges. :-( > > >> > > >> Since the EXEC I am writing must deal with many different > > >> files, and will receive external arguments defining the positions > > >> of the Hebrew fields, I need a generalized solution. I tried something > > >> with a particular case, where I knew the positions (only one > > >> Hebrew field 5-24) and the record length (fixed 32): > > >> ... > > >> 'F1: FANOUT |', > > >> 'F2: FANINANY |', > > >> 'JOIN 1 |', > > >> 'SPECS 1-32 1 33-* 5 |', > > >> '>' OUTPUTID, > > >> '? F1: |', > > >> 'SPECS 5-24 1 |', > > >> 'REVERSE |', > > >> 'F2:' > > >> > > >> How would I generalize this? And is there a better way? > > >> > > >> Thanks! > > >> Shimon > > >> > > > >