Flat file Unknown Characters

I am trying to process a flat file which is position based. The data has some info like this


The characters E in 20976E , { represent some number notation. Something they call it zone…

Has anybody has any idea what this zone notation for numbering means… i am totally unaware of this and never heard of it. Searched the internet a little bit but did not find any info on it…

I am not sure what this notation is but I would like to know the following:

  1. Where are you getting the information from (System (hardware, software), OS platform, integration software generating this information, input type (invoice, shipping schedule, rma, …)

  2. What is the correct information suppose to be.

I can guess at a translation for this but I don’t know its worth:

5016020976E00000000000 -> exponential notation for 5016020976
D7000000{000000{000000{000000{000000{000000{ -> decimal number (D) sequence of fixed length (7) delimited by “{”. So you could have
But then This could be account numbers for a payroll or to say push ({) the following amounts of money (000000) for employee number “D7”.

Hope you can really supply some extra information as you see how impossible it is to solve without knowing the environment it is working from and into. Thank you.

Hi ybedu,
I am getting this flat file from a MainFrame system and those folks say that these special characters means some zone info for representing some numeric format. For Example:

256527H means - it is the hex equivalent of the zone - and the 8

So after conversion it has to come to 25652.78-

Similary i want to know what does 20976E , { mean ?

Thanks for ur help

Hello Sreedhar,
I asked for the extra information in hopes that others would be clearer on your situation. Like I said, I have not directly encountered your situation and took the most intuitive approach I could find. I noticed you went from 256527H to 25652.78- and the “.78-” is something I could not make up. My attempted translation is 20976E to 2.0976 to 2.10 with rounding. I gave you my best attempt about the other data in the prior posting. Hopefully someone else will read into this read and have the exact answer or at least a better guess. If all fails just ask the mainframe folks to tell you exactly all the scenarios of data to output. Don’t worry if it makes you look bad in front of them, they will thank you later for getting the job done. Good day.

The number format you’re seeing is “zoned decimal.” You may also run into “packed decimal.” These are common representations used on the mainframe. Do a search on the web for information about these formats (one with a decent definition is http://gsbwww.uchicago.edu/computing/research/SASManual/lgref/z1131887.htm). You’ll need to locate or write some code to convert these representations to something you want to use.

The easiest way around this is to have whomever is generating this file to change the format from say PIC S9(5)V99 to PIC +9(5).99 . I am assuming that the program generating this data is written in COBOL. This will put both your sign and your decimal point as a separate printable characters (and in this case change it from a 7 byte field to a 9). So instead of “256527H”, you would have “-25652.78”, which would be much easier to digest in webMethods.

I realize that the producer of this data may not be willing or able to modify the program, but if so, that would be the easiest way around your problem.

My mainframe COBOL is a little rusty, but I believe that is correct.

Roger - Your COBOL is not at all rusty. We are dealing with a similar scenario as well. I believe the PIC S9(5)V99 represents a signed decimal (positive or negative) with 5 integer values and a maximum of 2 decimal values.

As for the “H” in the last byte, this is an EBCDIC representation of an ASCII “-5” (negative 5). The other negative numbers you may come across are:
EBCDIC: {J, K, L, M, N, O, P, Q, R} which correspond to
ASCII: {-1, -2, -3, -4, -5, -6, -7, -8, -9}

Hope that helps,

Just to follow up, we implemented this approach to pass negative ASCII number to a COBOL PIC S9(5) data type. To add to the table above, an EBCDIC “{” (left bracket) corresponds to an ASCII negative number ending with “0”.

I know that’s really confusing so let me give examples. An ASCII “-21” looks like “2J”, ASCII “-22” looks like EBCDIC “2K”, etc. Now for the really goofy one … an ASCII “-20” would be an EBCDIC “2}”

Sorry, I confused the EBCDIC character for negative numbers ending in “0” in my post above. It should be right bracket “}”

So in EBCDIC, “-570” looks like “57}”

There is a good description of how signed/zoned decimals are represented at http://www.discinterchange.com/TechTalk_signed_fields_.html