Dieser Abschnitt beschreibt, wie Sie die Funktionen der Statements DISPLAY und WRITE miteinander kombinieren können, um
vertikale Ausgaben von Feldwerten zu erzeugen.
Folgende Themen werden behandelt:
Natural bietet Ihnen zwei Möglichkeiten, die verschiedenen Daten eines Datensatzes bei der Ausgabe untereinander anzuordnen:
Wie weiter oben beschrieben, erzeugt das DISPLAY-Statement normalerweise Ausgaben in Spaltenform mit
Standardüberschriften, während das WRITE-Statement die Daten nebeneinander ohne Überschriften
anordnet.
Sie können die Merkmale dieser beiden Statements miteinander verbinden, um eine vertikale Ausgabe von Feldwerten zu erzeugen.
Das DISPLAY-Statement ordnet die Werte eines Feldes untereinander an, und
zwar Datensatz für Datensatz; die verschiedenen Felder eines Datensatzes werden
nebeneinander ausgegeben.
Durch ein dem DISPLAY-Statement nachgestelltes WRITE-Statement
haben Sie die Möglichkeit, in einem WRITE-Statement angegebene Text und/oder
Feldwerte zwischen den einzelnen mit dem DISPLAY-Statement ausgegebenen
Datensätzen einzufügen.
Das folgende Programm zeigt diese Kombination von DISPLAY und
WRITE:
** Example 'WRITEX04': WRITE (in combination with DISPLAY) ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 JOB-TITLE 2 CITY 2 DEPT END-DEFINE * READ (3) VIEWEMP BY CITY STARTING FROM 'SAN FRANCISCO' DISPLAY NAME JOB-TITLE WRITE 22T 'DEPT:' DEPT SKIP 1 END-READ END
Ausgabe des Programms WRITEX04:
Page 1 04-11-11 14:15:55
NAME CURRENT
POSITION
-------------------- -------------------------
KOLENCE MANAGER
DEPT: TECH05
GOSDEN ANALYST
DEPT: TECH10
WALLACE SALES PERSON
DEPT: SALE20
Im vorigen Beispiel ergibt sich die Position des Feldes DEPT aus der
Tabulator-Notation nT (in diesem Fall
20T, d.h. die Ausgabe beginnt in der 20. Bildschirmspalte).
Durch die Notation T*field können Sie die
WRITE-Ausgabe nach der Position
eines im vorangegangenen DISPLAY-Statement ausgegebenen Feldes ausrichten (wobei
field der Name des Feldes ist, nach dem die Ausrichtung
erfolgen soll).
Im folgenden Beispiel wird die Position der vom WRITE-Statement erzeugten
Ausgabe mittels der Notation T*JOB-TITLE nach der Position des Feldes
JOB-TITLE ausgerichtet:
** Example 'WRITEX05': WRITE (in combination with DISPLAY) ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 JOB-TITLE 2 DEPT 2 CITY END-DEFINE * READ (3) VIEWEMP BY CITY STARTING FROM 'SAN FRANCISCO' DISPLAY NAME JOB-TITLE WRITE T*JOB-TITLE 'DEPT:' DEPT SKIP 1 END-READ END
Ausgabe des Programms WRITEX05:
Page 1 04-11-11 14:15:55
NAME CURRENT
POSITION
-------------------- -------------------------
KOLENCE MANAGER
DEPT: TECH05
GOSDEN ANALYST
DEPT: TECH10
WALLACE SALES PERSON
DEPT: SALE20
Wenn bei der Kombination von DISPLAY und WRITE die vom WRITE-Statement erzeugte Ausgabe
über mehrere Zeilen und/oder Spalten gehen soll, empfiehlt sich die Verwendung der
Notation x/y
(Zahl-Schrägstrich-Zahl), mit der Sie angeben können, in welcher Zeile/Spalte etwas
ausgegeben werden soll. Die Zahl vor dem Schrägstrich gibt die Zeile an, die Zahl hinter
dem Schrägstrich die Spalte.
Die Positionierungsnotation bewirkt, dass das nächste Element in dem
DISPLAY- oder WRITE-Statement x
Zeilen unterhalb der letzten Ausgabe platziert wird, beginnend in Spalte
y der Ausgabe.
Das folgende Programm veranschaulicht die Verwendung dieser Notation:
** Example 'WRITEX06': WRITE (with n/n)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 MIDDLE-I
2 ADDRESS-LINE (1:1)
2 CITY
2 ZIP
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
DISPLAY 'NAME AND ADDRESS' NAME
WRITE 1/5 FIRST-NAME
1/30 MIDDLE-I
2/5 ADDRESS-LINE (1:1)
3/5 CITY
3/30 ZIP /
END-READ
END
Ausgabe des Programms WRITEX06:
Page 1 04-11-11 14:15:55
NAME AND ADDRESS
--------------------
RUBIN
SYLVIA L
2003 SARAZEN PLACE
NEW YORK 10036
WALLACE
MARY P
12248 LAUREL GLADE C
NEW YORK 10036
KELLOGG
HENRIETTA S
1001 JEFF RYAN DR.
NEWARK 19711
Standardmäßig gibt Natural die Felder nebeneinander aus.
Mit der VERT-Klausel können Sie erreichen, dass bei einem DISPLAY-Statement die Werte der
verschiedenen Felder eines Datensatzes nicht nebeneinander, sondern untereinander (in
vertikaler Anordnung) ausgegeben werden.
Mit einer HORIZ-Klausel können Sie dies im selben
DISPLAY-Statement wieder rückgängig machen und zur horizontalen Ausgabe
zurückkehren.
Die Ausgabe von Spaltenüberschriften beim DISPLAY VERT
wird über eine AS-Klausel gesteuert:
Ohne AS-Klausel werden keine Spaltenüberschriften ausgegeben. Siehe
Beispiel 1.
AS CAPTIONED bewirkt die Ausgabe der Standard-Spaltenüberschriften.
Siehe Beispiel
2.
AS 'text' bewirkt, dass Text als
Spaltenüberschrift ausgegeben wird. Beachten Sie hierbei, dass ein Schrägstrich (/)
innerhalb von Text-Elementen eines DISPLAY-Statements einen
Zeilenvorschub bewirkt. Siehe Beispiel
3.
AS 'text' CAPTIONED bewirkt, dass Text als Spaltenüberschrift
ausgegeben wird und außerdem die Standard-Spaltenüberschrift in jeder Ausgabezeile dem
jeweiligen Feldwert direkt vorangestellt wird. Siehe Beispiel 4.
Das folgende Programm verwendet keine AS-Klausel, d.h. es werden keine Spaltenüberschriften
ausgegeben.
** Example 'DISPLX09': DISPLAY (without column title) ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 CITY END-DEFINE * READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK' DISPLAY VERT NAME FIRST-NAME / CITY SKIP 2 END-READ END
Ausgabe des Programms DISPLX09:
Beachten Sie, dass alle Feldwerte vertikal, d.h. untereinander, ausgegeben werden:
Page 1 04-11-11 14:15:54 RUBIN SYLVIA NEW YORK WALLACE MARY NEW YORK KELLOGG HENRIETTA NEWARK
Das folgende Programm enthält eine VERT- und
eine HORIZ-Klausel, die bewirken, dass einige Ausgaben vertikal
und andere horizontal angeordnet sind, sowie eine AS CAPTIONED-Klausel zur
Ausgabe der Standard-Spaltenüberschriften.
** Example 'DISPLX10': DISPLAY (with VERT as CAPTIONED and HORIZ clause)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 JOB-TITLE
2 SALARY (1:1)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
DISPLAY VERT AS CAPTIONED NAME FIRST-NAME
HORIZ JOB-TITLE SALARY (1:1)
SKIP 1
END-READ
END
Ausgabe des Programms DISPLX10:
Page 1 04-11-11 14:15:54
NAME CURRENT ANNUAL
FIRST-NAME POSITION SALARY
-------------------- ------------------------- ----------
RUBIN SECRETARY 17000
SYLVIA
WALLACE ANALYST 38000
MARY
KELLOGG DIRECTOR 52000
HENRIETTA
Das folgende Programm enthält eine AS
'text'-Klausel, die bewirkt, dass der angegebene
'text' als Spaltenüberschrift ausgegeben
wird.
Anmerkung
Ein Schrägstrich (/) in dem Textelement in einem DISPLAY-Statement
bewirkt einen Zeilenumbruch.
** Example 'DISPLX11': DISPLAY (with VERT AS 'text' clause)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 JOB-TITLE
2 SALARY (1:1)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
DISPLAY VERT AS 'EMPLOYEES' NAME FIRST-NAME
HORIZ JOB-TITLE SALARY (1:1)
SKIP 1
END-READ
END
Ausgabe des Programms DISPLX11:
Page 1 04-11-11 14:15:54
EMPLOYEES CURRENT ANNUAL
POSITION SALARY
-------------------- ------------------------- ----------
RUBIN SECRETARY 17000
SYLVIA
WALLACE ANALYST 38000
MARY
KELLOGG DIRECTOR 52000
HENRIETTA
Die Klausel AS 'text' CAPTIONED bewirkt, dass
der angegebene Text als Spaltenüberschrift angezeigt wird und dass die
Standard-Spaltenüberschriften direkt vor dem Feldwert in jeder ausgegebenen Zeile
angezeigt werden:
Das folgende Programm enthält eine AS 'text'
CAPTIONED-Klausel.
** Example 'DISPLX12': DISPLAY (with VERT AS 'text' CAPTIONED clause)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 JOB-TITLE
2 SALARY (1:1)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
DISPLAY VERT AS 'EMPLOYEES' CAPTIONED NAME FIRST-NAME
HORIZ JOB-TITLE SALARY (1:1)
SKIP 1
END-READ
END
Ausgabe des Programms DISPLX12:
Diese Klausel bewirkt, dass die Standard-Spaltenüberschriften (NAME und
FIRST-NAME) vor den Feldwerten ausgegeben werden:
Page 1 04-11-11 14:15:54
EMPLOYEES CURRENT ANNUAL
POSITION SALARY
------------------------------- ------------------------- ----------
NAME RUBIN SECRETARY 17000
FIRST-NAME SYLVIA
NAME WALLACE ANALYST 38000
FIRST-NAME MARY
NAME KELLOGG DIRECTOR 52000
FIRST-NAME HENRIETTA
Bei einer Kombination von DISPLAY VERT-Statement mit nachfolgendem WRITE-Statement können Sie mit der
Notation P*field-name die Feld-Ausgabe
des WRITE-Statements nach der Zeilen und Spalten-Position eines im
DISPLAY VERT-Statements angegebenen Feldes ausrichten.
Im folgenden Programm werden die Felder SALARY und BONUS in
der gleichen Spalte ausgegeben, SALARY in jeder ersten Zeile,
BONUS in jeder zweiten Zeile.
Der Text ***SALARY PLUS BONUS*** ist nach SALARY
ausgerichtet, d.h. der Text wird in der gleichen Spalte wie SALARY und in
der ersten Zeile ausgegeben. Der Text (IN US DOLLARS) hingegen ist nach
BONUS ausgerichtet; entsprechend wird dieser Text in der gleichen Spalte
wie BONUS und in der zweiten Zeile ausgegeben.
** Example 'WRITEX07': WRITE (with P*field)
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 CITY
2 NAME
2 JOB-TITLE
2 SALARY (1:1)
2 BONUS (1:1,1:1)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'LOS ANGELES'
DISPLAY NAME JOB-TITLE
VERT AS 'INCOME' SALARY (1) BONUS (1,1)
WRITE P*SALARY '***SALARY PLUS BONUS***'
P*BONUS '(IN US DOLLARS)'
SKIP 1
END-READ
END
Ausgabe des Programms WRITEX07:
Page 1 04-11-11 14:15:55
NAME CURRENT INCOME
POSITION
-------------------- ------------------------- ----------
SMITH 0
0
***SALARY PLUS BONUS***
(IN US DOLLARS)
POORE JR SECRETARY 25000
0
***SALARY PLUS BONUS***
(IN US DOLLARS)
PREPARATA MANAGER 46000
9000
***SALARY PLUS BONUS***
(IN US DOLLARS)
Siehe das folgende Beispiel-Programm im Kapitel Referenzierte Beispielprogramme: