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
.
Den Quelltext können Sie hier downloaden.
all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.de