bmTas / JRecord

Cobol IO for Java/JVM languages via a Cobol Copybook
GNU Lesser General Public License v3.0
30 stars 25 forks source link

JRecord 0.93.3 Readme

This versions adds support for Processing Cobol Messages in code Generated by the CodeGen (JRecord Code generation utility):

Notes for New Users

The ReadMe_NewUsers.md has an expanded version of this section. The first thing new users need to decide is

JRecord Download site

JRecord is available from Sourceforge:

**Current JRecord Download:

JRecord

Introduction

JRecord provides

For Documentation see JRecord Documentation

Getting started with JRecord Java interface

The easiest way to access JRecord is via IOBuilders (using the JRecordInterface1 class):

     ICobolIOBuilder ioBldr 
                 = JRecordInterface1.COBOL
                     .newIOBuilder("CobolCopybook.cbl")
                         .setSplitCopybook(CopybookLoader.SPLIT_01_LEVEL)
                         .setDialect(ICopybookDialects.FMT_FUJITSU);
     AbstractLineReader reader = ioBldr.newReader("input File Name");
     AbstractLine l;

     while ((l = reader.read()) != null) {
         ...
     }
     reader.close();

There is a description of using the IOBuilder interface in the JRecord Manual. You should also investigate the Code Generation options.

Code Generation

To help you get started with JRecord, there are 2 Code Generate options available:

Reading Example

Code to read a Cobol file (Generated by CodeGen utility):


         ICobolIOBuilder iob = JRecordInterface1.COBOL
                               .newIOBuilder(copybookName)
                                  .setFont("cp037")
                                  .setFileOrganization(Constants.IO_FIXED_LENGTH)
                                  .setSplitCopybook(CopybookLoader.SPLIT_NONE)
                                      ;  

           FieldNamesDtar021.RecordDtar021 rDtar021 = FieldNamesDtar021.RECORD_DTAR021;
           AbstractLineReader reader = iob.newReader(dataFile);
           while ((line = reader.read()) != null) {
               lineNum += 1;
               System.out.println(
                             line.getFieldValue(rDtar021.keycodeNo).asString()
                     + " " + line.getFieldValue(rDtar021.storeNo).asString()
                     + " " + line.getFieldValue(rDtar021.qtySold).asString()
                     + " " + line.getFieldValue(rDtar021.salePrice).asString()
                  );
           }

           reader.close();

Cobol Field Name class (Generated by CodeGen utility):

    public class FieldNamesDtar021 {

        public static final RecordDtar021 RECORD_DTAR021 = new RecordDtar021();

        public static class RecordDtar021 {
           public final String keycodeNo = "KEYCODE-NO";
           public final String storeNo = "STORE-NO";
           public final String theDate = "THE-DATE";
           public final String deptNo = "DEPT-NO";
           public final String qtySold = "QTY-SOLD";
           public final String salePrice = "SALE-PRICE";
        }
    }

Writing with JRecord Example

            FieldNamesDtar022.RecordDtar022 rDtar022 = FieldNamesDtar022.RECORD_DTAR022;
            ICobolIOBuilder iobWrite = JRecordInterface1.COBOL
                    .newIOBuilder(outCopybookName)
                       .setFont("cp037")
                       .setFileOrganization(Constants.IO_FIXED_LENGTH)
                       .setSplitCopybook(CopybookLoader.SPLIT_NONE)
                           ;  
            AbstractLineWriter writer = iobWrite.newWriter(outputFileName);
            AbstractLine dtar022Line  = iobWrite.newLine();

            dtar022Line.getFieldValue(rDtar022.keycodeNo).set("223");
            dtar022Line.getFieldValue(rDtar022.theDate)  .set(22);
            dtar022Line.getFieldValue(rDtar022.deptNo)   .set(22);
            dtar022Line.getFieldValue(rDtar022.qtySold)  .set(5);
            dtar022Line.getFieldValue(rDtar022.salePrice).set("123.45");

            writer.write(dtar022Line);

            ...

            writer.close();

Hadoop

If working with Hadoop have a look at:

Software Recommendations

Previous versions of JRecord came with utilities (editors etc), this version does not with old utilities (it does have Csv2Cobol and Cobol2Csv utilities).

I would suggest you:

You can use the RecordEditor to view / try out the JRecord-options before writing your code. In the future, I hope to release a Cobol-Version of the RecordEditor that uses Cobol-Copybooks and Xml-File descriptions. This will replace the old JRecord-Utilities. This is unlikely to be released before the end of 2015 though.

Change Summary

Changes 0.93.0

This versions includes

Changes that should not matter to users of JRecord

Changes 0.90

Changes 0.81.5

Changes 0.81.4

Changes for complex Occurs Depending