рдХреЛрдмреЛрд▓ рд╕реЗ рдЬрд╛рд╡рд╛ рддрдХ рдХрд╛ рд░рд╛рд╕реНрддрд╛: рдкреНрд░рддрд┐ рджрд┐рди рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рд▓рд┐рдЦрдирд╛

рдЕрднрд┐рд╡рд╛рджрди, рдкреНрд░рд┐рдп рдорд┐рддреНрд░реЛрдВред


рд╣рдо рдЕрдкрдиреЗ рдЧреИрд░-рд▓рд╛рднрдХрд╛рд░реА рд╕рдВрдЧрдарди рдХреА (рддреВрдлрд╛рдиреА) рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред


рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдо рд╕рд░рд▓ (рд▓реЙрдЧрд┐рдВрдЧ) рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ: рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред


рдЧреБрд▓реЛрдмрдиреНрдж


рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рд╣рдорд╛рд░реЗ рдореВрд▓ рдирд┐рдЧрдо (рдПрдХ рдмрдбрд╝реА рд╡рд┐рддреНрддреАрдп рддрдХрдиреАрдХ) рдХреЛ рдореЗрдирдлреНрд░реЗрдо рдФрд░ рдХреЛрдмреЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдФрд░ рдмрдбрд╝реЗ рд╕рдВрдЧрдарди рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ - рдХрдард┐рдирд╛рдИ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ?


рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдПрдХреАрдХрд░рдг рдореЗрдВ рдПрдХ рдЧреБрд▓рд╛рдо рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд╣рдореЗрдВ рдмрд╛рд╣рд░ рд╕реЗ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдерд╛ред рдЕрд░реНрдерд╛рддреН - рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдлрд╛рдЗрд▓реЗрдВ "COBOL рдбреЗрдЯрд╛ рдлрд╛рдЗрд▓реЗрдВ"ред


рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛ (рдФрд░ рд╣рдореЗрдВ рдкрд╣рд▓реЗ COBOL рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдерд╛), рдЗрд╕рдореЗрдВ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рдЧреИрд░-рд░реЗрдЦреАрдп рд╕рдВрд░рдЪрдирд╛ рд╣реИ ред рдЕрд░реНрдерд╛рддреН:


  • рдПрдХ рдФрд░ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреЛ рд╡рд┐рднрд┐рдиреНрди "рд╕рдореВрд╣реЛрдВ" (COBOL рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк) рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рдмрд╣реБрд░реВрдкрддрд╛: рдирд┐рд░реНрджреЗрд╢ redefinesред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рд╕рдореВрд╣реЛрдВ рдФрд░ рдЙрдирдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рдеред
  • рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдирд┐рд░реНрджреЗрд╢ occurs
  • рдмреНрд▓реЙрдХ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рд╕реЗ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рддрджрдиреБрд╕рд╛рд░, рдЖрдк рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдПрдХ рдЕрд▓рдЧ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

, COBOL: "copybook" ( Data Section Division), , :


PIC X(06)V99


 PIC 9(06).9999999


PIC 9(07)V9(07) COMP-3

:


  • IBM Computational 3
  • (EBCDIC, ASCII) тАФ ( )
  • (CR, LF, CRLF, LFCR, Newline, N )
  • 400
  • header, record, trailer

: ?


, . : JRecord 90.


, тАФ , - . , data picture comp-3 .


, 2 :


  • hold my coffee

, . тАФ тАФ :


  • COBOL Java (Groovy)

, ? тАФ 1 .



- , :


  • ( )

COBOL тАФ Data Section Division. , COBOL.


, -, COBOL ( Java) тАФ MIT:
https://github.com/uwol/proleap-cobol-parser


, :


  • Java (Groovy)
  • API, (ETL)

Antlr, meta-API Visitor. -.


visit e , Groovy , (data picture clause):


    @Override
    @CompileDynamic
    Boolean visitDataPictureClause(CobolParser.DataPictureClauseContext ctx) {
        PictureClause entry = (PictureClause) program.getASGElementRegistry().getASGElement(ctx)
        def (length, comp3length, scale) = calculateLengths(entry.pictureString)
        write """    setDataPicture("""
        write """        depth: ${currentFrame.depth},"""
        write """        pictureString: "${entry.pictureString}","""
        write """        length: ${length},"""
        write """        comp3length: ${comp3length},"""
        write """        scale: ${scale},"""
        Boolean result = super.visitDataPictureClause(ctx)
        write """    )"""
        return result
    }

, COBOL Groovy.
, copybook.
Java , .


Closure Groovy тАФ Closure COBOL.


, COBOL (copybook):


000010 IDENTIFICATION  DIVISION.                                        XXXXXXXX
       PROGRAM-ID.     UnstringSample.                                  XXXXXXXX
       ENVIRONMENT     DIVISION.                                        XXXXXXXX
       CONFIGURATION SECTION.                                           XXXXXXXX
       SPECIAL-NAMES.   DECIMAL-POINT IS COMMA.                         XXXXXXXX
       INPUT-OUTPUT    SECTION.                                         XXXXXXXX
       DATA            DIVISION.                                        XXXXXXXX
       WORKING-STORAGE SECTION.                                         XXXXXXXX
       01 ABCDE-RECORD.                                                 XXXXXXXX
XXXXXX  02 ABCDE-REC.                                                   XXXXXXXX
        03 ABCDE-COMMON.                                                XXXXXXXX
           05 ABCDE-DETAILS.                                            XXXXXXXX
             10 ABCDE-RECORD-ABC.                                       XXXXXXXX
                15 ABCDE-PRI-ABC.                                       XXXXXXXX
                   20 ABCDE-ABC-AAAAAAAA         PIC X(02).             XXXXXXXX
                   20 ABCDE-ABC-ACCT-ABCS.                              XXXXXXXX
                      25 ABCDE-ABC-ABC-1         PIC X(02).             XXXXXXXX
                      25 ABCDE-ABC-ABC-2         PIC X(03).             XXXXXXXX
                      25 ABCDE-ABC-ABC-3         PIC X(03).             XXXXXXXX
                      25 ABCDE-ABC-ABC-4         PIC X(04).             XXXXXXXX

:


io.infinite.cobol.CobolCompiler|import groovy.transform.CompileStatic
import io.infinite.cobol.CobolRuntime
import io.infinite.cobol.CobolApi
import io.infinite.other.CopybookStructureEnum

@CompileStatic
class CobolClosureRuntime extends CobolRuntime {

    @Override
    void run(Long totalSize, InputStream inputStream, String charsetName, List<Byte> lineBreakBytes, CobolApi cobolApi, CopybookStructureEnum copybookStructure) {
        super.setup(totalSize, inputStream, charsetName, lineBreakBytes, cobolApi, copybookStructure)
readFile() {
    createRecord("ABCDE-RECORD") {
        createGroup(2, "ABCDE-REC") {
            createGroup(3, "ABCDE-COMMON") {
                createGroup(4, "ABCDE-DETAILS") {
                    createGroup(5, "ABCDE-RECORD-ABC") {
                        createGroup(6, "ABCDE-PRI-ABC") {
                            createGroup(7, "ABCDE-ABC-AAAAAAAA") {
                                setDataPicture(
                                    depth: 7,
                                    pictureString: "X(02)",
                                    length: 2,
                                    comp3length: 2,
                                    scale: 0,
                                )
                            }//<(end of group: ABCDE-ABC-AAAAAAAA)
                            createGroup(7, "ABCDE-ABC-ACCT-ABCS") {
                                createGroup(8, "ABCDE-ABC-ABC-1") {
                                    setDataPicture(
                                        depth: 8,
                                        pictureString: "X(02)",
                                        length: 2,
                                        comp3length: 2,
                                        scale: 0,
                                    )
                                }//<(end of group: ABCDE-ABC-ABC-1)
                                createGroup(8, "ABCDE-ABC-ABC-2") {
                                    setDataPicture(
                                        depth: 8,
                                        pictureString: "X(03)",
                                        length: 3,
                                        comp3length: 2,
                                        scale: 0,
                                    )
                                }//<(end of group: ABCDE-ABC-ABC-2)
                                createGroup(8, "ABCDE-ABC-ABC-3") {
                                    setDataPicture(
                                        depth: 8,
                                        pictureString: "X(03)",
                                        length: 3,
                                        comp3length: 2,
                                        scale: 0,
                                    )
                                }//<(end of group: ABCDE-ABC-ABC-3)
                                createGroup(8, "ABCDE-ABC-ABC-4") {
                                    setDataPicture(
                                        depth: 8,
                                        pictureString: "X(04)",
                                        length: 4,
                                        comp3length: 3,
                                        scale: 0,
                                    )
                                }//<<<<(end of group: ABCDE-ABC-ABC-4)
                            }//<<<<(end of group: ABCDE-ABC-ACCT-ABCS)
                        }//<<<<(end of group: ABCDE-PRI-ABC)
                    }//<<<<(end of group: ABCDE-RECORD-ABC)
                }//<<<<(end of group: ABCDE-DETAILS)
            }//<<<<(end of group: ABCDE-COMMON)
        }//<<<<(end of group: ABCDE-REC)
    }//<<<<(end of group: ABCDE-RECORD)
}//<<<<<

    }

}


, Production .


тАФ , . тАФ copybook тАФ .


.
$.


:


  • Open Source COBOL Java (Groovy)
  • COBOL (proleap.io)
  • COMP-3
  • Data Section Division
  • redefines
  • occurs
  • API, XML ( )
  • (EBCDIC, ASCII )


1)
2) тАФ , . .
3) , " ". 2020 .


https://i-t.io , . -, .


.


!


:
https://github.com/INFINITE-TECHNOLOGY/COBOL


All Articles