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
>>
>

Reply via email to