50 AS/400 Tips und Techniken Teil 7

10. November 2007 | Von | Kategorie: Tools, Hot-Tips

Der Artikel enthält 50 hochwertige Programmierer Tips. Der 9 teilige Artikel enthält Programmiertips in allen gängigen Programmier-Sprachen.

Tips und Techniken für die AS/400

Der 7. Teil der jährlichen Tips und Techniken jetzt online:
Thema: COBOL

Blitz Links:
  Zugriff auf Serviceprogramm-Datenexporte von Cobol-Programmen aus
Zufallszahlgenerator
Adressierung bestimmter Feldabschnitte
Handhabung eingebetteter Leerzeichen des String-Verbs

COBOL

 

Zugriff auf Serviceprogramm-Datenexporte von Cobol-Programmen aus

Ein Cobol-Programm erhält den Zugriff auf die Datenexporte von Serviceprogrammen, wenn Sie bei der Definition der Datenobjekte im Arbeitsspeicher die External-Klausel verwenden, z.B.:

Ø1	ExpDta       Pic X(1Ø) External.

Wie bei RPG IV muß der Name genau mit dem Namen des exportierten Objekts übereinstimmen. Definieren Sie das Datenobjekt so, wie es in dem exportierten Serviceprogramm definiert wurde. Definieren Sie das Objekt im Arbeitsspeicher, und definieren Sie es als Level 01.
Damit das Cobol-Programm Zugriff auf die Datenexporte hat, muß es in derselben Aktivierungsgruppe wie das Serviceprogramm ausgeführt werden. Ein Cobol-Modul, das in einem Serviceprogramm ausgeführt wird, kann Daten an ein Cobol-Programm exportieren. Allerdings kann das in einem Serviceprogramm ausgeführte Cobol-Modul keine Datenobjekte an ein RPG-Programm exportieren (auch dann nicht, wenn beide Programme in derselben Aktivierungsgruppe ausgeführt werden).

Zufallszahlgenerator

Eine Möglichkeit, eine Zufallszahl zwischen 0 und 99 zu erhalten, ist die Verwendung des Hundertstelsekunden-Feldes der Systemzeit. Mit dem folgenden Cobol-Code wird eine Zufallszahl in dem Objekt W-Random plaziert:

Ø1  W-Time
    Ø2  Filler		Pic 9(6).
    Ø2  W-Random	Pic 9(2).
        .
        .
        .
    Accept W-Time from Time.

Der Grad der Zufälligkeit kann verzerrt werden, wenn die oben genannte Accept-Anweisung in einer Schleife ausgeführt wird, die sich in einem relativ gleichmäßigen Zeitabstand wiederholt. Dies ist beispielsweise bei einer Schleife ohne Ein- und Ausgabe der Fall, in der der Zeitzyklus nicht durch andere Faktoren beeinflußt wird (z.B. wenn keine anderen Jobs im System die CPU-Zyklen gemeinsam mit dem Job benutzen). In einer solchen Situation kann jede Wiederholung der Schleife gleich lang dauern, wodurch das Objekt W-Random immer den gleichen oder nahezu den gleichen Wert hat.

Adressierung bestimmter Feldabschnitte

In einigen Situationen – beispielsweise bei der Jahr 2000-Konvertierung – kann es von Vorteil sein, bestimmte Feldbereiche zu adressieren (z.B. einen Teil eines Datums). In Cobol erfolgt dieser Schritt über die Referenzänderung. Dabei wird mit Hilfe von zwei numerischen Werten, die durch einen Doppelpunkt in einer Klammer voneinander getrennt sind, auf ein Feld gezeigt. Die beiden numerischen Werte zeigen den Referenzbeginn und die Referenzlänge an. Ähnlich wie Substrings in anderen Programmiersprachen ermöglicht die Referenzänderung, einen Teil eines Feldes als ein Datumsobjekt zu definieren.
Geben Sie folgenden Code ein, wenn Sie überprüfen möchten, ob der Monat eines Datums Juli ist, dessen „Usage is Display“ das yymmdd-Format hat:

If Compdate(3:2) = Ø7
     Display "Date is in July"
Else
     Display "Date is not in July"

In diesem Beispiel zeigt die in Klammern stehende 3 den Referenzbeginn an. Die Ziffer 2 bezeichnet die Länge der Referenz.
Dieser Tip ist für Situationen gedacht, in denen ein Teil des Feldes ein wichtiges Datenobjekt in einem speziellen Kontext darstellt. Falls Sie beispielsweise mit Kundennummern arbeiten, in denen ein bestimmtes Buchstabenpräfix oder die ersten Zahlen eine bestimmte Region kennzeichnen, können Sie leichter nach bestimmten Zahlen suchen oder die Zahlen sortieren, indem Sie nur auf den entsprechenden Teil des Feldes zugreifen.

Handhabung eingebetteter Leerzeichen des String-Verbs

Der folgende Tip beschreibt, wie Sie bei der Verwendung des String-Verbs zur Verkettung von Namen und Städtefeldern in Cobol eingebettete Leerzeichen in einem String handhaben (z.B. „Mary Jo“ oder „New York“), wenn Cobol ein einzelnes Leerzeichen als Zeichenfolgen-Delimiter verwendet? Eine einfache Methode ist die Verwendung von zwei Leerzeichen als Delimiter im Literal der Delimited-by-Klausel.
Angenommen die Zeichenfolgen „Doe“ oder „Mary Joe“ sind linksbündig ausgerichtet und die Felder Lname und Fname enthalten entsprechend rechtsbündig ein Leerzeichen. Für die beiden folgenden Anweisungen erhalten Sie unterschiedliche Ergebnisse, die davon abhängen, ob Sie ein oder zwei Leerzeichen in dem Literal der Delimited-by-Klausel spezifizieren:

String Lname "," Fname
     Delimited by "  " into NameDesc.

Bei der Begrenzung durch ein Leerzeichen (statt der im Beispiel verwendeten zwei Leerzeichen) erkennt Cobol „Jo“ nicht als Teil der Zeichenfolge. „Mary Jo“ und „NameDesc“ sieht wie folgt aus:

Doe,Mary

Bei einer Begrenzung mit zwei Leerzeichen sieht „NameDesc“ wie folgt aus:

Doe,Mary Jo

 


Ein achter Teil folgt.
Mit freundlichen Grüßen

    Ihr Burgy Zapp
Schlagworte: , , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.