Dieses Dokument 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: