HP OpenVMS Systemsask the wizard |
The Question is: Within 'C' how do I read an RMS file created using cobol which has comp fields in it. The Answer is :
Reading the file is not a particular problem, files simply contain bytes
of data. Interpreting the packed decimal values from within a C program
is the issue here, since C doesn't have native support for this data type.
You can find data type conversion routines in the OTS$ library, or
using the appropriate descriptors, LIB$CVT_DX_DX can convert between
most data types.
Alternatively, you could write your file access routines in COBOL and
have the fields passed back into C in whatever data type you like, use
COBOL to perform the conversions.
If you can't use COBOL, you could choose another language that supports
packed decimal. (eg: BASIC.)
Note however, that there are often very good reasons for choosing to
use packed decimal to represent data, so you need to be careful in
choosing the data type you convert into for C. For example,
calculations involving money should never be performed using floating
point data types as floating point arithmetic is necessarily somewhat
inexact.
If you were to visit the AskQ website (<http://www.itrc.hp.com/service/james/CPQhome.do>) and
use a query such as the following against the OpenVMS database:
An example of packed decimal in C?
You would find a C example of converting packed decimal to integer
listed among the available answers. There are various other examples
available via AskQ; in the OpenVMS support database. For sources of
support programs and examples, please see the OpenVMS FAQ.
|