Statements DISPLAY und WRITE

Dieses Dokument beschreibt, wie Sie die Statements DISPLAY und WRITE zur Ausgabe von Daten und zur Steuerung der Art und Weise benutzen, in der die Informationen ausgegeben werden.

Folgende Themen werden behandelt:


Das DISPLAY-Statement

Das DISPLAY-Statement erzeugt eine Ausgabe in Spaltenform; d.h. die Werte eines Feldes werden jeweils in einer Spalte untereinander ausgegeben. Wenn mehrere Felder ausgegeben werden, d.h. wenn mehrere Spalten erzeugt werden, werden diese Spalten nebeneinander ausgegeben.

Die Reihenfolge, in der die Felder ausgegeben werden, bestimmen Sie durch die Reihenfolge, in der Sie die Feldnamen im DISPLAY-Statement angeben.

Das DISPLAY-Statement im folgenden Programm zeigt für jede Person zuerst die Personalnummer (PERSONNEL-ID) an, dann den Nachnamen (NAME) und zuletzt die Tätigkeitsbezeichnung (JOB-TITLE):

** Example 'DISPLX01': DISPLAY
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 PERSONNEL-ID
  2 NAME
  2 BIRTH
  2 JOB-TITLE
END-DEFINE
*
READ (3) VIEWEMP BY BIRTH
  DISPLAY PERSONNEL-ID NAME JOB-TITLE
END-READ
END

Ausgabe des Programms DISPLX01:

Page      1                                                  04-11-11  14:15:54
 
PERSONNEL         NAME                  CURRENT
   ID                                  POSITION
--------- -------------------- -------------------------
 
30020013  GARRET               TYPIST
30016112  TAILOR               WAREHOUSEMAN
20017600  PIETSCH              SECRETARY

Um die Reihenfolge der Spalten in der Ausgabe zu ändern, ändern Sie einfach die Reihenfolge der Feldnamen im DISPLAY-Statement. Falls Sie beispielsweise zuerst die Nachnamen, dann die Tätigkeitsbezeichnungen und zuletzt die Personalnummern ausgeben möchten, müsste das entsprechende DISPLAY-Statement folgendermaßen aussehen:

** Example 'DISPLX02': DISPLAY
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 PERSONNEL-ID
  2 NAME
  2 BIRTH
  2 JOB-TITLE
END-DEFINE
*
READ (3) VIEWEMP BY BIRTH
  DISPLAY NAME JOB-TITLE PERSONNEL-ID
END-READ
END

Ausgabe des Programms DISPLX02:

Page      1                                                  04-11-11  14:15:54
 
        NAME                  CURRENT          PERSONNEL
                             POSITION             ID
-------------------- ------------------------- ---------
 
GARRET               TYPIST                    30020013
TAILOR               WAREHOUSEMAN              30016112
PIETSCH              SECRETARY                 20017600

Über jeder Spalte wird eine Spaltenüberschrift ausgegeben. Verschiedene Möglichkeiten, die Ausgabe dieser Überschriften zu beeinflussen, sind weiter unten im Abschnitt Spaltenüberschriften beschrieben.

Das WRITE-Statement

Das WRITE-Statement wird zur Erzeugung unformatierter (d.h. nicht in Spalten unterteilter) Ausgaben benutzt. Im Gegensatz zum DISPLAY-Statement gilt für das WRITE-Statement Folgendes:

  • Es führt, wenn nötig, einen automatischen Zeilenvorschub aus; d.h. ein Feld oder Textelement, das nicht mehr in eine Zeile passt, wird automatisch in der nächsten Zeile ausgegeben.

  • Es erzeugt keine Spaltenüberschriften.

  • Bei Werten eines multiplen Feldes werden diese nicht untereinander sondern nebeneinander ausgegeben.

Die beiden Beispielprogramme auf der folgenden Seite veranschaulichen die grundsätzlichen Unterschiede zwischen DISPLAY- und WRITE-Statement.

Sie können beide Statements auch miteinander kombinieren; diese Möglichkeit ist unter Vertikale Ausgabe von Feldwerten im Abschnitt Vertikale Ausgabe durch Kombination von DISPLAY und WRITE beschrieben.

Beispiel für ein DISPLAY-Statement

** Example 'DISPLX03': DISPLAY
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 SALARY (1:3)
END-DEFINE
*
READ (2) VIEWEMP BY NAME STARTING FROM 'JONES'
  DISPLAY NAME FIRST-NAME SALARY (1:3)
END-READ
END

Ausgabe des Programms DISPLX03:

Page      1                                                  04-11-11  14:15:54
 
        NAME              FIRST-NAME        ANNUAL
                                            SALARY
-------------------- -------------------- ----------
 
JONES                VIRGINIA                  46000
                                               42300
                                               39300
JONES                MARSHA                    50000
                                               46000
                                               42700                          
 

Beispiel für ein WRITE-Statement

** Example 'WRITEX01': WRITE
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 SALARY (1:3)
END-DEFINE
*
READ (2) VIEWEMP BY NAME STARTING FROM 'JONES'
  WRITE NAME FIRST-NAME SALARY (1:3)
END-READ
END

Ausgabe des Programms WRITEX01:

Page      1                                                  04-11-11  14:15:55
 
JONES                VIRGINIA                  46000      42300      39300
JONES                MARSHA                    50000      46000      42700

Spaltenabstand - der SF-Parameter und die Notation nX

Standardmäßig sind die mit einem DISPLAY-Statement ausgegebenen Spalten jeweils durch eine Leerstelle voneinander getrennt.

Mit dem Session-Parameter SF (Spacing Factor) können Sie angeben, wieviele Leerstellen zwischen den Spalten einer DISPLAY-Ausgabe eingefügt werden sollen. Sie können die Anzahl der Leerstellen auf einen Wert von 1 bis 30 setzen.

Der Parameter kann in einem FORMAT-Statement angegeben werden und gilt dann für den ganzen Report. Oder er kann in einem DISPLAY-Statement angegeben werden, und zwar auf Statement-Ebene, aber nicht auf Element-Ebene.

Mit der Notation nX können Sie die Anzahl der Leerstellen (n) zwischen zwei bestimmten Spalten angeben. Eine nX-Notation hat Vorrang vor einer SF-Parameterangabe.

Beispiel:

** Example 'DISPLX04': DISPLAY (with nX)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 PERSONNEL-ID
  2 NAME
  2 BIRTH
  2 JOB-TITLE
END-DEFINE
*
FORMAT SF=3
READ (3) VIEWEMP BY BIRTH
  DISPLAY PERSONNEL-ID NAME 5X JOB-TITLE
END-READ
END

Ausgabe des Programms DISPLX04:

Das obige Beispielprogramm erzeugt folgende Ausgabe, wobei die ersten beiden Spalten aufgrund des SF-Parameters im FORMAT-Statement durch 3 Leerstellen voneinander getrennt sind, während die zweite und dritte Spalte aufgrund der Notation 5X im DISPLAY-Statement durch 5 Leerstellen voneinander getrennt sind:

Page      1                                                  04-11-11  14:15:54
 
PERSONNEL           NAME                      CURRENT
   ID                                        POSITION
---------   --------------------     -------------------------
 
30020013    GARRET                   TYPIST
30016112    TAILOR                   WAREHOUSEMAN
20017600    PIETSCH                  SECRETARY

Die Notation nX kann auch in einem WRITE-Statement verwendet werden, um Leerstellen zwischen Ausgabe-Elementen einzufügen:

WRITE PERSONNEL-ID 5X NAME 3X JOB-TITLE

Mit dem obigen Statement werden zwischen den Feldern PERSONNEL-ID und NAME 5 Leerstellen und zwischen NAME und JOB-TITLE 3 Leerstellen eingefügt.

Tabulator-Notation nT

Mit der Tabulator-Notation nT, die im DISPLAY- und im WRITE-Statement verwendet werden kann, können Sie die Spalte n bestimmen, ab der ein Ausgabe-Element ausgegeben werden soll.

** Example 'DISPLX05': DISPLAY (with nT)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
  DISPLAY 5T NAME 30T FIRST-NAME
END-READ
END

Ausgabe des Programms DISPLX05:

Das obige Programm erzeugt folgende Ausgabe, wobei das Feld NAME ab Spalte 5 (vom linken Seitenrand aus gezählt) und das Feld FIRST-NAME ab Spalte 30 ausgegeben wird:

Page      1                                                  04-11-11  14:15:54
 
            NAME                  FIRST-NAME
    --------------------     --------------------
 
    JONES                    VIRGINIA
    JONES                    MARSHA
    JONES                    ROBERT

Zeilenvorschub — die Schrägstrich-Notation (/)

Mit einem Schrägstrich (/) in einem DISPLAY- oder WRITE-Statement bewirken Sie einen Zeilenvorschub.

  • Bei einem DISPLAY-Statement bewirkt ein Schrägstrich einen Zeilenvorschub zwischen Feldern und innerhalb von Text.

  • Bei einem WRITE-Statement bewirkt ein Schrägstrich nur zwischen Feldern einen Zeilenvorschub; innerhalb von Text wird er wie ein gewöhnliches Textzeichen behandelt.

Zwischen Feldern muss dem Schrägstrich je ein Leerzeichen vor- und nachgestellt werden.

Für mehrfachen Zeilenvorschub geben Sie mehrere Schrägstriche an.

Beispiel 1 - Zeilenvorschub bei einem DISPLAY-Statement:

** Example 'DISPLX06': DISPLAY (with slash '/')
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 DEPARTMENT
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
  DISPLAY NAME / FIRST-NAME 'DEPART-/MENT' DEPARTMENT
END-READ
END

Ausgabe des Programms DISPLX06:

Das obige DISPLAY-Statement erzeugt einen Zeilenvorschub nach jedem Wert des Feldes NAME sowie innerhalb des Textes DEPART-MENT:

Page      1                                                  04-11-11  14:15:54
 
        NAME         DEPART-
     FIRST-NAME       MENT
-------------------- -------
 
JONES                SALE
VIRGINIA
JONES                MGMT
MARSHA
JONES                TECH
ROBERT

Beispiel 2 - Zeilenvorschub bei einem WRITE-Statement:

** Example 'WRITEX02': WRITE (with line advance)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 DEPARTMENT
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
  WRITE NAME / FIRST-NAME 'DEPART-/MENT' DEPARTMENT //
END-READ
END

Ausgabe des Programms WRITEX02:

Das obige WRITE-Statement erzeugt einen Zeilenvorschub nach jedem Wert des Feldes NAME und einen doppelten Zeilenvorschub nach jedem Wert des Feldes DEPARTMENT, aber keinen innerhalb des Textes DEPART-/MENT:

Page      1                                                  04-11-11  14:15:55
 
JONES
VIRGINIA             DEPART-/MENT SALE
 
 
JONES
MARSHA               DEPART-/MENT MGMT
 
 
JONES
ROBERT               DEPART-/MENT TECH

Beispiel 3 - Zeilenvorschub in DISPLAY- und WRITE-Statements:

** Example 'DISPLX21': DISPLAY (usage of slash '/' in DISPLAY and WRITE)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
  2 CITY
  2 NAME
  2 FIRST-NAME
  2 ADDRESS-LINE (1)
END-DEFINE
*
WRITE TITLE LEFT JUSTIFIED UNDERLINED
       *TIME
   5X  'PEOPLE LIVING IN SALT LAKE CITY'
   21X 'PAGE:' *PAGE-NUMBER /
   15X 'AS OF' *DAT4E //
*
WRITE TRAILER UNDERLINED 'REGISTER OF' / 'SALT LAKE CITY'
*
READ (2) EMPLOY-VIEW WITH CITY = 'SALT LAKE CITY'
  DISPLAY  NAME /
           FIRST-NAME
           'HOME/CITY' CITY
           'STREET/OR BOX NO.' ADDRESS-LINE (1)
  SKIP 1
END-READ
END

Ausgabe des Programms DISPLX21:

14:15:54.6     PEOPLE LIVING IN SALT LAKE CITY                     PAGE:      1
               AS OF 11/11/2004


-------------------------------------------------------------------------------
        NAME                 HOME                STREET
     FIRST-NAME              CITY              OR BOX NO.
-------------------- -------------------- --------------------

ANDERSON             SALT LAKE CITY       3701 S. GEORGE MASON
JENNY

SAMUELSON            SALT LAKE CITY       7610 W. 86TH STREET
MARTIN

                                  REGISTER OF
                                SALT LAKE CITY
-------------------------------------------------------------------------------

Weitere Beispiele für DISPLAY- und WRITE-Statements

Siehe die folgenden Beispiel-Programme: