Record Reformatter
Do you have a need to restructure records? Record Reformatter is ideal for moving data between different systems, or to produce simple reports based on complex file structures. The restructuring is often used to expand packed numeric fields, such as COMP-3, or binary/floating point numbers. It can also handle floating point numbers from a VAX system.It will also read IBM type records on your PC.
Other applications include extracting fields from a data base for indexing, or summary applications. It can also be used to do an intelligent ASCII/EBCDIC conversion on data where there is a mixture of text and binary fields.
The Record Reformatter has many tools built in to assist the user in analysing unknown records and field structures. This includes calculating record lengths by looking for patterns in the data, and showing data in several formats, allowing the user to select a sensible conversion.
Where Cobol data descriptions are available in a file form, this can be read and the record structure determined automatically. In a similar way, AS400 savelib tapes may be read with MMPC to produce a record reformatter file description.
The date conversion routines, and the general restructuring of records may assist in converting data files in applications requiring updates due to the year 2000 (Y2K) problem.
The Record Reformatter may be used as a stand alone tool, or in conjunction with InterMedia for Windows, or MMPC. and as such provides a very power method of handling many IBM type tapes and records.
About Records
Before details of how to use the Record
Reformatter are explained, a few notes on record structure and
definitions are required. As with all applications there will
be exceptions that can not be handled, but in practice, these
will not be very common.Records can be fixed length or variable
length.
Fixed Length Records
A fixed length record always has the
same length, but a file may be made up of many different types
of record, which may each have different lengths.
The record reformatter will try and determine the record length automatically, even for records without carriage returns. The user can over ride any automatic record length determination.
A record is defined by unique codes in a fixed location, irrespective of the record length. For instance, the first 2 characters may be a two digit number which determines the type of record. Up to 10 different types of record may be defined, each with different record lengths and field structures.
Fields are fixed lengths and locations within a record. Different record types, will have different fields, and field positions.
Before any work may be performed on records, it is therefore essential to define the following points.
Types of input records:
Output records are defined by:
All these values are entered via the Record Reformatter Editor. In analysis mode field types can be automatically determined. Due to the nature of text based records, this initial analysis will not be always correct, so full editing of the first approximation may be achived later. Alternatively, the structure may be entered manually, or from a Cobol Data definition file.
Variable Length Records
With fixed length records, each field
and record has a pre-determined length. With variable length
records, fields and records are marked by end characters. A
typical marking would be fields are separated by a comma, and
records by a CR. Thus two records could like as below:
field1,field2,A longer field,last field(CR)
fa,fb,fc,final field in this record(CR)
Thus to define such a file structure it is necessary to assign values for field and record delimiters. With the Record reformatter, both of these delimiters may be one or two characters long.
With variable length fields, only a single record structure can be handled.
Automatic Analysis Mode
A very powerful feature of RR32 is the
ability to analyse records and create a outline input field
definition automatically. Although this is not a complete substitute
for documentation describing a record, it can be extremely useful
in analysing an otherwise unknown record.
Analyse will try and determine field breaks, as well as field types. This includes text (ASCII or EBCDIC) and packed fields. The automatic field breaks may be moved, added or deleted. The generated routine may then be edited in any way required. This can include adding fields, deleting, concatenating and sorting field definitions.
Output Creation and
Testing
Once an input record has been defined
a typical application is to convert it into say a quote comma
quote delimited record. The output can be automatically generated
based on the input field locations and descriptions. Several
typical output types may be created.
The output may then be edited as required so that lengths can be controlled or modified. In the same way fixed data fields may be added.
Specification of Features
| Maximum number of record types | 20 |
| Maximum number of field definitions | 3000 |
| Maximum file length | Only limited by disk space |
| Record Analysis | First 50 records |
| Setup wizard | Yes |
| Win95/98 | Yes |
| Win NT 4.0 | Yes |
| Win 3.x | No |
Field Conversions
Each field may be converted by the following
commands. The position of each output field is entirely dependant
on the user, and fields may be omitted or included multiple
times as required.
Copy
This is probably the most common conversion
rule to be used. It very simply copies the input field to the
output field. If the input and output fields are different lengths,
either the end of the field will be truncated, or padded with
spaces.
Copy Reverse
This will copy the field, as described
above, and then reverse it. Thus a field such as "Hello 1234"
will become
"4321 olleH."
The reversing works on the final length
of the output field, so if padding was required, the padding
would end up at the start of the field.
For fields of 1,2,4 bytes in length,
this operation is identical to Swap 8, Swap 16 and Swap 32.
Copy Pascal
This will copy a Pascal text string.
A Pascal string starts with a byte giving the length, followed
by the string. The length byte is stripped when copying.
ASCII-EBCDIC
As in Copy but converts an ASCII input
field to EBCDIC
EBCDIC-ASCII
As in copy but converts an EBCDIC field
to ASCII
FILL ASCII
This fills the output field with the
ASCII string defined in the parameters. Any codes in <>
are treated as hex values. Example of string is 12<09>Hello.
It may typically be used for inserting tags between fields,
or even a ',' to make a record ',' delimited.
FILL HEX
This is the same as Fill ASCII but allows
the user to insert non printing characters.
For example to insert a CRLF, the output
string
0D0A
would be used.
It may also be used to insert EBCDIC
characters.
ASCII-PACKED
This converts an ASCII number to a packed
field. This takes numbers and uses nibbles (4 bits) to represent
the number, thus a number '1234', would be in hex, 31 32 33
34, and this would be converted to 01 23 4C, where C represents
+. A D would represent -, and F, unsigned. This method of storing
numbers effectively compresses the space required by a factor
of 2, and is common within many IBM based record structures.
It is also known as IBM COMP-3.
EBCDIC-PACKED This converts an EBCDIC number to a packed field. (See ASCII-PACKED)
Packed to ASCII
Packed to EBCDIC
Packed fields are a very common occurrence
in many (IBM) records. The numbers may be signed, as above,
or unsigned, in which case a series of hex characters 12 34
56 would represent the decimal number 123456.
Convert Date
The convert date operator will convert
a date field to a DDMMYYYY date format.
The actual output date format is selected
on the configuration screen of the routine.
The type of date conversion is dependant on the combo box at the right of the line.
Conversion options are as below:
TIME
Inserts system time in output string,
as HH:MM:SS
SWAP 32
Swaps 4 byte arrays. This can be useful
to convert numbers from little endolian to big endolian.
SWAP 16
Swaps two characters from the input string
example
Input = InterMedia
output = nIetMrdeai.
SWAP 8
Swaps two nibbles from an input byte.
For example, 0D(hex) would be converted to D0(hex).
Record Count
This inserts the current record count
+/- Number HiLo
+/- Number LoHi
Vax Float.
This converts the input binary number to an ASCII string. The output buffer is right justified, and if not large enough the most significant digits will be truncated. If the value is negative, a '-' sign will be added. This conversion feature can be extremely important when trying to import binary files into a text file format.
The range of numbers is as below:
Digits Output buffer size
| Input Digit | Output buffer size |
| 1 | 4 |
| 2 | 6 |
| 3 | 8 |
| 4 | 11 |
| 8 | 38 max |
| 10 | 200 (not yet implemented) |
For Vax floating point numbers there are 4 defined lengths:
- F-Float 4 bytes
- D-Float 8 Bytes
- G-Float 8 Bytes (Not implemented yet)
- H-Float 16 Bytes (Not implemented yet)
All Vax numbers are signed, and the ordering is fixed.
The size of the input number will be taken from the input field definition, and may be 1-4 bytes in length. The ordering of the number will be high byte first for HiLo, and low byte first for LoHi.
For floating point numbers (8 characters in length) the output is almost unlimited. If the output is longer than the field allowed for, the number will be displayed in scientific notation, eg 2.63E5. If the output from a floating point number contains invalid characters, this is most likely one of two reasons:
a) It is not a floating point number
b) The order should be swapped, i.e. HiLo, or LoHi
The 6 digit character is a special floating point implementation. It is not known how standard this is.
The 6 byte array is as below:
Byte 1 mantissa
Byte 2-6 Exponent in Lo-Hi ordering
The exponent is in the range of 0.5 - 1.5
The mantissa is a multiple of 2
Number HiLo
Number LoHi
This is as above, but the number is not
signed, and so the output buffer can be one character shorter.
Cobol Num
This rule will convert signed strings
from Cobol systems. The string includes it's sign as part of
the last digit. The output may also be formatted with the same
commands as described below in Formatting Numeric fields.
Formatting Numeric fields
Numeric fields have an extra edit field
at the right of the screen. This is to allow for formatting
of the output. By using this the number of decimal places may
be determined and leading zeros displayed or suppressed.
The options are extremely variable and
the command line is in the structure below
£#,4.2
where the symbols are as below
If a £, or $ sign is shown this means
that the money sign is added in front of the
number.
If # is set then leading zeros are displayed
If a , is in the line, then significant
numbers are broken down into groups of 3, separated by a comma,
such as
1,234,567.12.
The final number is the number of significant
and decimal places. Thus 3.2 would be 3 leading digits and 2
decimal places.
If the field is left blank, then no numeric
formatting will take place.
If the output field is too short, then
significant t digits are truncated.
Some examples:
- £3.4 £100.1234
- #6.2 0000012.99
- #,6.2 123,456.55
- ,8.2 1,435.55
- 5.0 43241
TransTab (InterMedia for Windows
only)
The TransTab option is the same of 'Copy
Field', but an IMW translation table may be applied. The translation
table is any IMW table and it performs a complete string and byte translation. Thus the output string may be longer than
the input string. If too long for the output field, it will
be truncated (from the right).
Typical applications could be case mapping (make all lower case, or all upper case) or handling accented characters, or different EBCDIC conversions.
There is a limitation of a maximum number of 8 different translation tables definable within a single record reformatter table. There is no limit on the number of fields that may be converted.
IB Field
This will insert and IntelliBase / IntelliBase
95 field marker. The parameter should be a number between 1
and 9999. The output data is always a 4 digit number, preceded
by a 0EH, and followed by a 0FH. The length should always be
6.