COPY Bibliothek

Wie schon verschiedentlich angemerkt, stammt Cobol aus einer Zeit, als all' die vielen kleinen Bits und Bytes sehr teuer waren. Aus dem Grunde wurde großer Wert auf ökonomische Speicher- und Programmausnutzung gelegt.
Oft werden von verschiedenen Programmen beispielsweise dieselben Datenstrukturen verwendet oder Unterprogramme in verschiedenen eigenständigen Programmen weisen exact dasselbe Coding auf o.ä..
Um hier nicht unnötig Platten- oder Bandkapazitäten zu verschwenden gibt es die Möglichkeit, solche 'Programmteile' als Bibliotheken abzulegen und überall im Programm einbauen zu lassen. Die Bibliothek liegt also nur einmal vor und kann von verschiedensten Programmen genutzt werden. Wie diese Bibliothek angelegt wird, ist systemabhängig und hat mit Cobol nur insoweit was zu tun, als der Aufbau der Bibliothek natürlich so sein muß, daß sie an den gewünschten Stellen vom Programm auch 'verstanden' werden.
Heute, wo Speicherkapazität normalerweise vorhanden ist, 'bis der Arzt kommt' ist der ökonomische Gedanke nichtmehr von Bedeutung. Durch die Verwendung von Bibliotheken kann man sich jedoch viel Schreibarbeit ersparen und Programmstrukturen können mit Hilfe dieser Technik übersichtlicher gestaltet werden und sind leichter ausbau- und dokumentierbar. Daher hat diese Programmiertechnik auch heute noch ihre Berechtigung.

Beispiel:
Wenn man über oft gebrauchte Datenstrukturen nachdenkt, kommen einem sofort die klassischen 'Stammdaten' in den Sinn. So wird es, sobald mit Personendaten gearbeitet wird, irgendwo eine Personen-Stammdaten-Datei im Programmsystem geben. Solcherlei Daten sind meist gleich aufgebaut. So wird man in einer solchen Datei Namen, Vornamen, Straße, PLZ und Ort und vielleicht noch ein Geburtsdatum finden. Außerdem sind noch einige Schlüsselfelder (Personen-Nr. als Primärschlüssel) in der Datenstruktur festgelegt, da es sich um eine index-sequentielle Datei handelt. Die entsprechende Datenstruktur wird nun einmalig bestimmt und in einer Bibliothek (Stamm-Dat.CBL) abgelegt. Der Inhalt dieser Bibliothek sähe dann in etwa so aus:

01 Stammdaten.
   05 Pers-Nr PIC 9(5).
   05 Name PIC X(30).
   05 Vname PIC X(30).
   05 Post.   
      10 Strasse PIC X(30).
      10 Leitzahl.
         15 Land-KZ PIC X(3).
         15 PLZ PIC X(15).
   05 Geb-Dat.
      10 Tag PIC 99.
      10 Monat PIC 99.
      10 Jahr PIC 9(4).


Jetzt kann man in der DATA DIVISION schreiben:

FILE SECTION.
FD Personenstamm.
COPY "C:Stamm-Dat.DEF".
:


Es ist nicht notwendig den Pfad zur Bibliotheks-Datei anzugeben, man kann dies aber tun. Nach der Übersetzung würde folgendes sichtbar:

FILE SECTION.
FD Personenstamm.
01 Stammdaten.
   05 Pers-Nr PIC 9(5).
   05 Name PIC X(30).
   05 Vname PIC X(30).
   05 Post.   
      10 Strasse PIC X(30).
      10 Leitzahl.
         15 Land-KZ PIC X(3).
         15 PLZ PIC X(15).
   05 Geb-Dat.
      10 Tag PIC 99.
      10 Monat PIC 99.
      10 Jahr PIC 9(4).
:



Man kann auch Bibliotheken über den Compiler erzeugen. In einer so erzeugten Bibliothek können dann einzelne COPY-Elemente vorhanden sein. Um nun zu spezifizieren, um welches Element in der Bibliothek es sich handelt, gibt es den IN/OF-Zusatz. Ist der Name der Bibliothek z.B. 'Daten.LIB' so würde man formulieren:

COPY "Stamm-Dat.DEF" IN "Daten.LIB".


REPLACING-Zusatz:
Mit Hilfe dieses Zusatzes kann man einzelne Felder in der vorgefundenen Datenstruktur ersetzen und so auch Bibliothekseinträge nutzen, die erst noch auf die 'speziellen Bedürfnisse' des konkreten Falles angepasst werden müssen. Die vorgenommenen Änderungen haben dabei nur Auswirkungen auf das konkrete Coding. Die Bibliothek selber bleibt von diesen Änderungen unberührt.
Nehmen wir an, wir wollten die Datenstruktur oben nutzen, um sie in der WORKING-STORAGE SECTION zu nutzen. In dem Programm, in dem wir die Struktur nutzen wollen, soll diese Struktur für Personaldaten verwandt werden. Man könnte dann sagen:

WORKING-STORAGE SECTION.
COPY "Stamm-Dat.DEF" IN "C:Daten.LIB"
     REPLACING Stammdaten BY Personaldaten.


Nach der Übersetzung sähe die Datenstruktur dann so aus:

01 Personaldaten.
   05 Pers-Nr PIC 9(5).
   05 Name PIC X(30).
   05 Vname PIC X(30).
   05 Post.   
      10 Strasse PIC X(30).
      10 Leitzahl.
         15 Land-KZ PIC X(3).
         15 PLZ PIC X(15).
   05 Geb-Dat.
      10 Tag PIC 99.
      10 Monat PIC 99.
      10 Jahr PIC 9(4).


Die COPY-Anweisung kann in jeder DIVISION des Programms verwendet werden.

...