50 AS/400 Tips und Techniken Teil 7

Nov 10th, 2007 | By Redaktion | Category: Hot-Tips

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
            Tags: , , , , , , , , , , , , , ,

            Leave Comment