Cobol Quelltexte

Eine wesentliche Aufgabe als Programmierer ist es die Wartbarkeit der Anwendungen zu garantieren. Zu diesem Zweck lagert man (ich, du, er, sie, es,...) idealerweise möglichst viel in externe und extern pflegbare Resourcen aus. In Java steht dafür die Klasse Properties als einfachste Basisklasse zur Verfügung. Der nachfolgende Quellcode zeigt, wie man auf einfache Art die Java Properties Dateien unter Cobol nutzen kann.

       IDENTIFICATION DIVISION.

      *******************************************************************
       PROGRAM-ID.                 Properties.
       AUTHOR.                     Ritter, Sebastian.
      *                                                                 *
      * An simple implementation to read and use Java property files    *
      * with Micro Focus Cobol                                          *
      *-----------------------------------------------------------------*
      * INT: tested                                                     *
      *******************************************************************

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           select DATASET assign to FILENAME,
                  ORGANIZATION  is line sequential.
       DATA DIVISION.
       FILE SECTION.
       FD DATASET.
      * max. working with 256 (char for key) + 768 (char for value)
      * = 1024 chars
         01 DATALINE                           pic x(1024).

       WORKING-STORAGE SECTION.
      *datas for inner work
       78 KEY-VALUE-DELIMITER  VALUE "=".
       01 PROPERTY-INDEX       PIC 9(2).
      * max. 98 key-value-pairs
       78 MAX-KEYS             VALUE 98.
       01 KEY-VALUE-TABLE      OCCURS MAX-KEYS.
         05 KEY2                 PIC X(256).
         05 VALUE2               PIC X(768).

       78 EOF                  VALUE 0.
       01 FILE-STATE           PIC 9 VALUE EOF.
         88 FILE-END           VALUE EOF.
         88 FILE-WORK          VALUE 1.

       01 INDEX1               PIC 9(2).
       LINKAGE SECTION.
      *params of entry's
      *fill params for use the "Load" and "getProperty" entry
       01 PARAMS               PIC X(2048).
         01 KEY1                 PIC X(256).
         01 VALUE1               PIC X(768).
         01 FILENAME             PIC X(1024) VALUE ALL SPACES.
       PROCEDURE DIVISION.


       CONSTRUCTOR SECTION.
         GOBACK
       .

       ENTRY "Load" USING BY REFERENCE FILENAME.
         MOVE 1 TO PROPERTY-INDEX
         OPEN INPUT DATASET
          PERFORM READ-NEXT-PROPERTY WITH TEST AFTER UNTIL FILE-END
         CLOSE DATASET
         GOBACK
       .

       ENTRY "getProperty" USING     BY REFERENCE KEY1,
                                     BY REFERENCE VALUE1.
         IF NOT (ADDRESS OF VALUE1 EQUALS NULL)
           MOVE 01 TO INDEX1
           MOVE ALL SPACE TO VALUE1
           PERFORM WITH TEST BEFORE
                   UNTIL (INDEX1 > MAX-KEYS)
                      OR (INDEX1 > PROPERTY-INDEX)
             IF (KEY1 EQUALS KEY2(INDEX1))
               MOVE VALUE2(INDEX1) TO VALUE1
               MOVE MAX-KEYS TO INDEX1
             ELSE
               CONTINUE
             END-IF
             ADD 1 TO INDEX1
           END-PERFORM
         ELSE
           CONTINUE
         END-IF
         GOBACK
       .

      * display the loaded properties
       ENTRY "List".
         DISPLAY "Properties:"
         MOVE 01 TO INDEX1
         PERFORM PRINT-PROPERTY
             WITH TEST BEFORE
             UNTIL (INDEX1 > MAX-KEYS)
                OR (INDEX1 >= PROPERTY-INDEX)

         GOBACK
       .

      * helper section (@see visible private or protected in Java)
       PRINT-PROPERTY SECTION.
         DISPLAY KEY2(INDEX1) WITH NO ADVANCING
         DISPLAY " => " WITH NO ADVANCING
         DISPLAY VALUE2(INDEX1)
         ADD 1 TO INDEX1
       .

      * helper section (@see visible private or protected in Java)
       READ-NEXT-PROPERTY SECTION.
         READ DATASET
           AT END
             SET FILE-END TO TRUE
           NOT AT END
             SET FILE-WORK TO TRUE
             IF  NOT (DATALINE(1:1) EQUALS "#")
             AND NOT (PROPERTY-INDEX > MAX-KEYS)
               UNSTRING DATALINE DELIMITED BY KEY-VALUE-DELIMITER
                   INTO KEY2   (PROPERTY-INDEX),
                        VALUE2 (PROPERTY-INDEX)
               END-UNSTRING
               ADD 1 TO PROPERTY-INDEX
             ELSE
               CONTINUE
             END-IF
             IF (PROPERTY-INDEX > MAX-KEYS)
               SET FILE-END TO TRUE
             ELSE
               CONTINUE
             END-IF
         END-READ
       .
    

Code Download

Den Quelltext können Sie hier downloaden.

all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.de
Diese Seite ist Bestandteil der Internetpräsenz unter http://www.Bastie.de


Java Cobol Software Resourcen Service Links Über mich Zum Gästebuch Forum