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