Aus Raspberry Pi Geek 10/2022

Mit COBOL-Programmen auf dem Raspberry Pi arbeiten (Seite 2)

Spalte

Funktion

Beschreibung

1 bis 6

Zeilennummern

Dieser Bereich ist für Zeilennummern reserviert, die allerdings im Programm nicht wieder auftauchen.

7

Indikator

In diesem Feld lassen sich Sonderfunktionen definieren wie * (Kommentar), - (Fortsetzung einer Zeile), / (Seitenvorschub), D (Debugging).

8 bis 11

Bereich A

Alle Abschnitte, Absätze und einige spezielle Einträge beginnen in diesem Bereich. Das Ende der Zeile darf in den Bereich B hineinragen.

1 bis 72

Bereich B

Alle Statements müssen im Bereich B beginnen.

73 bis 80

Identifizierung

Hier lassen sich Kommentare und Dokumentation einfügen. Der Compiler ignoriert diesen Bereich.

Zurück zu Listing 2: Die Zeile 00100 weist an der Position 7 einen Stern auf, enthält also einen Kommentar. Die Identification Division befindet sich in den Zeilen 00200 bis 00500 und enthält wenig Spannendes. Zeile 00550 ist eine leere Environment Division, weil das Programm auf keine Dateien zugreift, und könnte komplett wegfallen.

In der Data Division legen Sie den Speicherplatz fest, der zwölf alphanumerische Zeichen aufnehmen kann, und nennen ihn HALLO-TEXT. Die Zahl vor der Definition bezeichnet man als Ebenennummer. Der Kasten “Ebenennummer” beschreibt genauer, was es damit auf sich hat.

Ebenennummer

COBOL dient dem Verarbeiten strukturierter Daten. Daher lässt sich in der Data Division genau definieren, wie die Daten aufgebaut sind. Die Ebenennummer 01 beschreibt einen alleinstehenden Wert oder den Oberbegriff zu einer Datenstruktur. Zum Bilden von Untergruppen nutzen Sie die Ebenennummern 02 bis 49. Häufig genügen jedoch eine oder zwei Untergruppen. Das Verfahren erinnert an struct in C. Neben den üblichen Ebenennummern gibt es einige, die Sonderfunktionen erfüllen. Über die 77 definieren Sie beispielsweise eine unabhängige Variable. Mit der 88 bauen Sie Auswahlstrukturen auf, ähnlich wie bei der Enumeration in modernen Programmiersprachen.

Ab Zeile 00900 beginnt die Procedure Division, in der das eigentliche Programm steht. Das Kommando MOVE schreibt den Text “Hallo Welt” in die Variable HALLO-TEXT, DISPLAY gibt ihn aus. Um die Programmausführung definiert zu beenden, nutzen Sie STOP RUN.

Sie kompilieren das Programm mit cobc -x hallowelt.cbl und führen es dann mit ./hallowelt aus. Hierbei müssen Sie beachten, dass der COBOL-Compiler ausführbaren, nicht auf einer anderen CPU-Architektur lauffähigen Maschinencode erzeugt. Falls Sie die IDE zum Starten des COBOL-Programms nicht verlassen wollen, verwenden Sie das integrierte Terminal, das Sie via Terminal | New Terminal erreichen.

Taucht beim Kompilieren des Programms die Ausgabe warning: line not terminated by a newline auf, ignorieren Sie den Hinweis einfach. Der Fehler tritt durch eine ungünstige Zeilenumbruchverkettung am Ende der Datei und eine leere Zeilennummer auf, spielt aber fürs Funktionieren des Programms keinerlei Rolle. Um die Meldung auszuschalten, öffnen Sie die Quellcodedatei mit Nano und reparieren das Dateiende. Die Änderung bleibt aktiv, bis Sie die letzte Zeile wieder editieren.

Fun Fact

Auslöser für diesen Artikel war ein 1973 erschienenes Buch, das dem Autor beim Aufräumen in die Hände fiel. Interessant hierbei: Die Sprachkonzepte und die Syntax von COBOL haben sich in weiten Teilen seit knapp 50 Jahren kaum mehr verändert. Entsprechend fiel es selbst mit diesem uralten Schmöker nicht schwer, die Grundlagen der Sprache zu verstehen.

Äpfel und Gurken

Das Programm aus Listing 3 liest eine Datei (Listing 4) ein und wertet die Datensätze darin aus. Es gibt ausschließlich Datensätze aus, die ein bestimmtes Merkmal besitzen, in unserem Fall den Typ.

Als Beispiel nehmen wir an, jemand ist sich unsicher, was Obst und was Gemüse ist. Unser Programm schließt die Wissenslücke, indem es Obst aus der Eingabedatei input_file herausfiltert. In der Environment Division definieren Sie die einzulesende Datei. Die Data Division definiert den Aufbau der Datei und legt fest, wie Sie diese im Working-Storage (Arbeitsspeicher) ablegen wollen. In der Procedure Division liest das Programm die Datei ein, sucht darin nach Obst und gibt bei einem Treffer schließlich den Namen aus.

Um komplexere Dateien zu verarbeiten oder nach anderen Kriterien zu suchen, lässt sich das Beispielprogramm beliebig erweitern. Die Input-Datei enthält am Ende eine Spalte mit einem Asterisk, die lediglich dazu dient, das Zeilenende in der Datei zu markieren. COBOL arbeitet mit festen Längen für die Datenfelder, entsprechend kommen hinter dem Typ Obst noch einige Leerzeichen zum Auffüllen.

Bitte beachten Sie, dass in Listing 3 keine Zeilennummern vorhanden sind. Sie müssen aber trotzdem die ersten sieben Spalten frei lassen – die Lochkarte lässt grüßen.

Listing 3

obst.cbl

       IDENTIFICATION DIVISION.
       PROGRAM-ID. File_verarbeiten.
       AUTHOR. Martin Mohr.
       DATE-WRITTEN. 20.04.2022.
      *
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
         SELECT daten ASSIGN to 'input_file'
         ORGANIZATION IS LINE SEQUENTIAL.
      *
       DATA DIVISION.
         FILE SECTION.
         FD daten.
         01 daten-file.
            05 d-id PIC 9(5).
            05 d-name PIC A(14).
            05 d-typ PIC A(7).
            05 d-end PIC A(1).
      *
       WORKING-STORAGE SECTION.
       01 ws-daten.
         05 ws-id PIC 9(5).
         05 ws-name PIC A(14).
         05 ws-typ PIC A(7).
         05 ws-end PIC A(1).
      *
       77 WS-EOF PIC X(1).
      *
       PROCEDURE DIVISION.
       OPEN INPUT daten.
          PERFORM UNTIL WS-EOF='Y'
             READ daten INTO ws-daten
                AT END MOVE 'Y' TO WS-EOF
                NOT AT END
                  IF ws-typ = "Obst" THEN
                     DISPLAY ws-name
                  END-IF
             END-READ
          END-PERFORM.
       CLOSE daten.
       STOP RUN.

Listing 4

input_file

00001Apfel         Obst   *
00002Birne         Obst   *
00003Spinat        Gemüse *
00004Salat         Gemüse *
00005Kartoffel     Gemüse *
00006Kirsche       Obst   *
00007Gurke         Gemüse *
00008Knoblauch     Gemüse *
00009Pflaume       Obst   *
00010Pfirsich      Obst   *

Fazit

COBOL ist eine robuste Programmiersprache, die anders als viele Konkurrenten keinem ständigen Wandel unterliegt. Das letzte Release kam 2014 heraus und brachte nur neue Funktionen für die Massendatenverarbeitung. COBOL-Programme finden sich vor allem auf Großrechnern im Finanzsektor und bei Behörden. Das dürfte sich auch in Zukunft kaum ändern. Selbst nachdem Sie sich mit den Eigenheiten der Sprache angefreundet haben, verläuft die Lernkurve steil. COBOL eignet sich definitiv nicht dazu, coole Apps zu entwickeln, aber da Experten rar gesät sind, lässt sich damit gutes Geld verdienen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben