third_party_content:community:commentary:forums_nonworks:05d52d66539f52af8525665c002584f7

Sign up on the Revelation Software website to have access to the most current content, and to be able to ask questions and get answers from the Revelation community

At 10 AUG 1998 02:49:48AM Barry Stevens wrote:

I have a file to convert that has cobol COMP-6 fields.

These fields store 2 decimal digits per character (Byte) e.g. a 2 char comp-6 field storing the value 123 is stored as two chars with the hex values of 01 23.

How can I extract each single value from each character so that I end up with 3 chars 123.

T.I.A.

Barry


At 10 AUG 1998 04:15AM Chris Vaughan wrote:

OCONV should do the trick:

charvar = hexvar 'HEX'

I cannot remember if or where comp-6 carries the sign nibble - but it will (if present) be the first or last character in 'charvar'.


At 10 AUG 1998 04:25AM Chris Vaughan wrote:

numeric.string=input.recordoffset, bytesize 'HEX'

I cannot recall comp-6. It may be specific to a particular compler. Are you sure that it is unsigned. If it is signed, the relevant nibble will be expanded into the either the first or last charcter of numeric.string. You'll have to work out the appropriate values for + and -.


At 10 AUG 1998 08:04PM Barry Stevens wrote:

Chris.

Thanks heaps, that did the trick - from the manual I did not interpret that that is how it would convert.

BTW. Just in case, Do you know how to do COMP-1, COMP-2

Thanks again

Barry


At 12 AUG 1998 03:22AM Chris Vaughan wrote:

If COMP-1 and COMP-2 are BINARY data types, then something like the following should do it.

(by the way - what Cobol compiler do you use - is it perchance an NCR implementation).

numval=binval(inputrecoffset, bytesize)

FUNCTION BINVAL(INPUT)

OUTPUT=0
REPS=LEN(INPUT)
FACTOR=1
FOR REP=REPS TO 1 STEP -1 
  OUTPUT += SEQ(INPUTREP, 1) * FACTOR
  FACTOR=FACTOR * 256
NEXT REP

RETURN OUTPUT

This example assumes unsigned binary with both bitwise and bytewise ascendency from right to left.

eg.

hex(010203) would be evaluated as

(3 * 1) + (2 * 256) + (1 * 65536)=65051

hex(aabbcc) would be evaluated as

(204 * 1) + (187 * 256) + (170 * 65536)=11189196

ry with both bitwise and bytewise ascendency from right to left.

eg

hex(010203) would be evaluated as

(3 * 1) + (2 * 256) + (1 * 65536)=65051

hex(aabbcc) would be evaluated as

(204 * 1) + (187 * 256) + (170 * 65536)= 11189196

View this thread on the forum...

  • third_party_content/community/commentary/forums_nonworks/05d52d66539f52af8525665c002584f7.txt
  • Last modified: 2023/12/28 07:40
  • by 127.0.0.1