WRITE

Dieses Dokument behandelt folgende Themen:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Verwandte Statements: AT END OF PAGE | AT TOP OF PAGE | CLOSE PRINTER | DEFINE PRINTER | DISPLAY | EJECT | FORMAT | NEWPAGE | PRINT | SKIP | SUSPEND IDENTICAL SUPPRESS | WRITE TITLE | WRITE TRAILER

Gehört zur Funktionsgruppe: Erstellen von Ausgabe-Reports


Funktion

Das Statement WRITE dient dazu, Ausgaben in Freiformat zu erzeugen, die nicht bereits vorformatiert sind (vgl. DISPLAY-Statement).

Das WRITE-Statement unterscheidet sich vom DISPLAY-Statement in folgenden Punkten:

  • Passt ein Feld bzw. Textelement nicht mehr in eine Zeile, wird es automatisch in der nächsten Zeile ausgegeben. Ein Feld bzw. Textelement wird nicht auf zwei Zeilen verteilt.

  • Es werden keine Standard-Spaltenüberschriften erzeugt. Die Ausgabelänge der Felder richtet sich nach der Länge der tatsächlich ausgegebenen Feldwerte.

  • Mehrere Werte/Ausprägungen eines Arrays werden nicht untereinander sondern nebeneinander ausgegeben.

Siehe auch die folgenden Themen im Leitfaden zur Programmierung:

Syntax 1 — Dynamische Formatierung

WRITE  [(rep)] [NOTITLE] [NOHDR]
  [(statement-parameters)]            
  nX

'text' [(attributes)]

nT 'c'(n) [(attributes)]
x/y ['='] operand1 [(parameters)]
T*field-name      
P*field-name      
/      

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Syntax 1 − Beschreibung

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1   S A G N A U N P I F B D T L   G O ja nein

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
(rep)
Report-Spezifikation:

Mit der Notation (rep) kann ein bestimmter Report angegeben werden, wenn ein Programm mehrere Ausgaben erzeugen soll.

Es kann ein Wert von 0 bis 31 oder ein logischer Name, der mit einem DEFINE PRINTER-Statement zugewiesen wurde, angegeben werden.

Wenn (rep) nicht angegeben wird, bezieht sich das WRITE-Statement auf den ersten Report (Report 0).

Wenn diese Druckdatei für Natural als PC definiert wird, wird der Report auf den PC heruntergeladen, siehe Beispiel 6.

Informationen, wie Sie das Format eines mit Natural erstellten Ausgabe-Reports steuern, finden Sie im Abschnitt Steuerung der Ausgabe von Daten im Leitfaden zur Programmierung.

NOTITLE
Unterdrückung der Standard-Kopfzeile:

Natural generiert für jede über ein WRITE-Statement ausgegebene Seite eine Kopfzeile. Diese Kopfzeile enthält die laufende Seitennummer, Uhrzeit und Datum. Die Uhrzeit wird zu Beginn der Programmausführung gesetzt. Die Ausgabe dieser Standard-Kopfzeile kann durch Angabe des Schlüsselwortes NOTITLE oder durch ein WRITE TITLE-Statement unterdrückt werden.

Beispiele:

  • Ausgabe einer Standard-Kopfzeile:

    WRITE NAME
  • Ausgabe einer eigenen Kopfzeile:

    WRITE NAME WRITE TITLE 'user-title'
    
  • Ausgabe ohne Kopfzeile:

    WRITE NOTITLE NAME

Anmerkungen:

  1. Wenn die NOTITLE-Option verwendet wird, gilt sie für alle DISPLAY-, PRINT- und WRITE-Statements im selben Objekt, die Daten auf denselben Report schreiben.
  2. Natural prüft, wann ein Seitenvorschub erforderlich ist, bevor ein WRITE-Statement ausgeführt wird. Während der Ausführung eines WRITE-Statements werden keine neuen Seiten mit Kopf- oder Fußzeilen generiert.
NOHDR
Unterdrückung der Spaltenüberschrift:

Das WRITE-Statement selbst erzeugt keine Spaltenüberschriften. Wenn Sie allerdings das WRITE-Statement zusammen mit einem DISPLAY-Statement verwenden, können Sie mit der Option NOHDR des WRITE-Statements die vom DISPLAY-Statement generierten Spaltenüberschriften unterdrücken.

Die NOHDR-Option ist nur relevant, wenn das WRITE-Statement nach einem DISPLAY-Statement steht, die Ausgabe sich insgesamt über mehr als eine Seite erstreckt und die Ausführung des WRITE-Statements zur Ausgabe einer neuen Seite führt.

Ohne NOHDR-Option würden auf dieser neuen Seite die DISPLAY-Spaltenüberschriften ausgegeben, mit NOHDR werden sie dort nicht ausgegeben.

statement-parameters
Parameter-Definition auf Statement-Ebene:

Unmittelbar nach dem WRITE-Statement können Sie auf Statement-Ebene in Klammern einzelne Session-Parameter angeben. Die Werte dieser Parameter haben dann für das betreffende Statement vor auf übergeordneter Ebene mittels GLOBALS-Kommando, SET GLOBALS- (nur im Reporting Mode) oder FORMAT-Statement gesetzten Parameterwerten.

Wenn Sie mehrere Parameter angeben, müssen Sie sie durch ein oder mehrere Leerzeichen voneinander trennen. Eine einzelne Parameterangabe darf sich nicht über zwei Sourcecode-Zeilen erstrecken.

Anmerkung:
Die hier gültigen Parameter-Einstellungen kommen nur für Variablen-Felder in Betracht und haben keine Auswirkungen auf Text-Konstanten. Wenn Sie Feldattribute für eine Text-Konstante setzen möchten, dann müssen diese explizit für dieses Element gesetzt werden; siehe Parameter-Definition auf Element-Ebene.

Siehe auch:

nX, nT, x/y, T*field-name, P*field-name, '=', /,
Notation Feld-Positionierung:

Siehe Feld-Positionierung im Abschnitt Formatierung der Ausgabe.

'text', 'c'(n), attributes, operand1, parameters
Text/Attributzuweisung:

Siehe Text-, Attribut-Zuweisung, Ausgabe-Elemente im Abschnitt Formatierung der Ausgabe.

Liste der Parameter

Parameter, die mit dem WRITE-Statement angegeben werden können: Spezifikation
S = auf Statement-Ebene
E =auf Element-Ebene
AD Attribute Definition SE
AL Alphanumeric Length for Output SE
BX Box Definition SE
CD Color Definition SE
CV Control Variable SE
DF Date Format SE
DL Display Length for Output SE
DY Dynamic Attributes SE
EM Edit Mask SE
EMU Unicode Edit Mask E
FL Floating Point Mantissa Length SE
IS Identical Suppress SE
LS Line Size S
MC Multiple-Value Field Count S
MP Maximum Number of Pages of a Report S
NL Numeric Length for Output SE
PC Periodic Group Count S
PM Print Mode SE
PS Page Size * S
SG Sign Position SE
UC Underlining Character S
ZP Zero Printing SE

* Wenn die Anzahl der Ausprägungen eines Arrays den PS-Wert überschreitet, wird ein NAT0303-Fehler ausgegeben.

Ausführliche Beschreibungen der oben genannten Session-Parameter finden Sie in der Parameter-Referenz.

Siehe auch die folgenden Themen im Leitfaden zur Programmierung:

Beispiel für die Parameter-Benutzung auf Statement/Element-Ebene

DEFINE DATA LOCAL
1 VARI (A4)     INIT <'1234'>                  /*     Output 
END-DEFINE                                     /*    Produced
*                                              /*    ---------
WRITE           'Text'           VARI          /*    Text 1234
WRITE (PM=I)    'Text'           VARI          /*    Text 4321
WRITE           'Text' (PM=I)    VARI (PM=I)   /*    txeT 4321
WRITE           'Text' (PM=I)    VARI          /*    txeT 1234
END

Siehe auch Beispiel 5 − WRITE-Statement mit ‘=’ und Parametern auf Statement/Element-Ebene.

Formatierung der Ausgabe

nX        
nT        
x/y  

'text' [(attributes)]

T*field-name   'c' (n)   [(attributes)]
P*field-name   ['='] operand1 [(parameters )]
/        

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Feld-Positionierung

Syntax-Element Beschreibung
nX
Spaltenabstand:

Mit der nX Notation können Sie zwischen zwei Feldern n Leerzeichen einfügen. n darf nicht 0 sein.

Beispiel:

WRITE NAME 5X SALARY

Siehe auch:

nT
Tabulator-Einstellungen:

Mit der Notation nT setzen Sie Tabulatoren, d.h. die Ausgabe eines Feldes beginnt ab Spalte n. Ein Tabulator, der bereits durch eine andere Ausgabe belegt ist, darf nicht gesetzt werden.

In dem folgenden Beispiel wird das Feld NAME ab Spalte 25 und SALARY ab Spalte 50 ausgegeben:

WRITE 25T NAME 50T SALARY

Siehe auch:

x/y
x/y-Positionierung::

Mit der Notation x/y erreichen Sie, dass ein Feld x Zeilen unter der Ausgabe des letzten Statements, und zwar ab Spalte y ausgegeben wird. y darf nicht 0 sein. Eine Spalte, die in derselben Ausgabezeile bereits belegt ist, darf nicht angegeben werden.

Siehe auch Positionierungsnotation x/y (im Leitfaden zur Programmierung).

T*field-name
Feldbezogene Positionierung:

Mit der Notation T* können Sie die WRITE-Ausgabe nach der Position eines in einem vorangegangenen DISPLAY-Statement ausgegebenen Feldes (field-name) ausrichten. Es ist nicht erlaubt, auf eine bereits belegte Position zu positionieren.

Siehe auch:

P*field-name
Feld- und zeilenbezogene Positionierung:

Mit der Notation P* können Sie die WRITE-Ausgabe nach der Position und Zeile eines in einem vorangegangenen DISPLAY-Statement ausgegebenen Feldes (field-name) ausrichten. Diese Notation wird vor allem nach DISPLAY VERTICALLY-Statements verwendet. Es ist nicht erlaubt, auf eine bereits belegte Position zu positionieren.

Siehe auch:

'='
Feldinhalt hinter Feldüberschrift:

Ein Gleichheitszeichen in Apostrophen ('=') vor einem Feld bewirkt, dass vor dem Feldwert die (im DEFINE DATA-Statement oder im DDM) für das Feld definierte Überschrift ausgegeben wird.

Siehe auch:

/
Zeilenvorschub − Schrägstrich-Notation:

Ein Schrägstrich (/) zwischen Feldern/Textelementen bewirkt einen Zeilenvorschub, d.h. die nachfolgenden Felder/ Textelemente werden in der nächsten Zeile ausgegeben.

Beispiel:

WRITE NAME / SALARY

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

Siehe auch:

Text-, Attribut-Zuweisung, Ausgabe-Elemente

Syntax-Element Beschreibung
'text'
Text-Zuweisung:

Der in Apostrophen stehende Text wird ausgegeben.

Beispiel:

WRITE 'EMPLOYEE' NAME 'MARITAL/STATUS' MAR-STAT

Siehe auch:

'c'(n)
Zeichen-Wiederholung:

Das in Apostrophen stehende Zeichen (character) wird n-mal unmittelbar vor dem Feldwert ausgegeben.

Zum Beispiel:

WRITE '*' (5) '=' NAME

führt zur Ausgabe von

***** SMITH

Siehe auch Text-Notation, Vor einem Feldwert n mal anzuzeigendes Zeichen definieren - die 'c'(n)-Notation (im Leitfaden zur Programmierung).

attributes
Felddarstellung und Farbattribute:

Es ist möglich, den auszugebenden Feldern/Texten Anzeige- und Farbattribute zuzuordnen. Diese Attribute und die zu benutzende Syntax sind im Abschnitt Ausgabeattribute weiter unten beschrieben.

Beispiele:

WRITE 'TEXT' (BGR)
WRITE 'TEXT' (B)
WRITE 'TEXT' (BBLC)
operand1
Name des auszugebenden Feldes:

operand1 gibt das Feld an, dessen Inhalt an diese Stelle geschrieben wird.

Arrays mit Bereichen, die es ermöglichen, die Anzahl der Ausprägungen zur Ausführungszeit zu variieren, dürfen nicht angegeben werden.

Anmerkung:
Bei DL/I-Datenbanken: DL/I-AIX-Felder können nur angezeigt werden, wenn ein PCB verwendet wird, in dem die AIX im PROCSEQ-Parameter angegeben ist. Andernfalls gibt Natural zur Laufzeit eine Fehlermeldung aus.

parameters
Parameter-Definition auf Element-Ebene:

Unmittelbar nach operand1 können Sie auf Element-Ebene in Klammern einzelne Session-Parameter setzen. Diese Parameterwerte haben dann für das betreffende Feld Vorrang vor den mit einem GLOBALS-Kommando, SET GLOBALS- (nur im Reporting Mode) oder FORMAT-Statement oder auf Statement-Ebene gesetzten Parameterwerten.

Wenn Sie mehrere Parameter angeben, müssen Sie sie durch ein oder mehrere Leerzeichen voneinander trennen. Eine Parameterangabe darf sich jeweils nicht über zwei Sourcecode-Zeilen erstrecken.

Siehe auch:

Ausgabeattribute

Sie können den ausgegebenen Feldern/Textelementen Anzeige- und Farbattribute zuordnen. Sie können die folgenden Attribute angeben:

AD=AD-value
BX=BX-value
CD=CD-value
PM=PM-value

AD-value
CD-value

Die möglichen Parameterwerte sind in der Parameter-Referenz aufgeführt.

Anmerkung:
Der Compiler akzeptiert tatsächlich mehr als einem Attributwert für ein Ausgabefeld. Zum Beispiel können Sie Folgendes angeben: AD=BDI. In solch einem Fall gilt allerdings nur der letzte Wert. Im hier gezeigten Beispiel erhält nur der Wert I Gültigkeit, und das Ausgabefeld wird intensiviert (hell hervorgehoben) angezeigt.

Syntax 2 — Vordefinierte Form/Map benutzen

WRITE  [(rep)] [NOTITLE] [NOHDR] [USING ]

FORM

operand1 [operand2 ]
MAP

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Syntax 2 — Beschreibung

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S       A                         nein nein
operand2   S A G N A U N P I F B D T L       ja nein

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
FORM/MAP
Benutzung des vordefinierten Form/Map-Layouts:

Diese Option verwenden Sie, wenn Sie für die Ausgabe eine (mit dem Natural-Masken-Editor (Map Editor) erstellte) Maske (Map) verwenden wollen.

WRITE USING MAP bedeutet nicht, dass jedesmal, wenn die Maske ausgegeben wird, automatisch eine neue Seite ausgegeben wird.

Für den Zeilenabstand muss der Parameter LS um ein Byte größer gesetzt werden als die Zeilenlänge der Map.

operand1
Form/Map-Name:

operand1 ist der Name der zu verwendenden Map.

operand2
Auszugebendes Feld:

operand2 ist der Name des auszugebenden Feldes bzw. der auszugebenden Felder.

Ist operand1 eine Konstante und wird operand2 nicht angegeben, so werden bei der Kompilierung die Felder aus der Map-Source übernommen.

Die Felder müssen bezüglich Anzahl, Reihenfolge, Format, Länge und (bei Arrays) Anzahl der Ausprägungen mit den Feldern in de/mr referenzierten Layout/Map übereinstimmen, sonst tritt ein Fehler auf.

NOTITLE/NOHDR
Unterdrückung der Kopfzeile/Spaltenüberschrift:

Die Optionen NOTITLE und NOHDR sind unter Syntax 1 des WRITE-Statements beschrieben.

Beispiele

Beispiel 1 − WRITE-Statement mit '=', 'text', '/'

** Example 'WRTEX1': WRITE (with '=', 'text', '/')                      
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 FULL-NAME                                                           
    3 FIRST-NAME                                                        
    3 MIDDLE-I                                                          
    3 NAME                                                              
  2 CITY                                                                
  2 COUNTRY                                                             
END-DEFINE                                                              
*                                                                       
LIMIT 1                                                                 
READ EMPL-VIEW BY NAME                                                  
  /*                                                                     
  WRITE NOTITLE                                                         
        '=' NAME '=' FIRST-NAME '=' MIDDLE-I //                         
        'L O C A T I O N' /                                             
        'CITY:   ' CITY    /                                            
        'COUNTRY:' COUNTRY //
  /*                         
END-READ                     
END                         

Ausgabe des Programms WRTEX1:

NAME: ABELLAN              FIRST-NAME: KEPA                 MIDDLE-I:       
                                                                            
L O C A T I O N                                                             
CITY:    MADRID                                                             
COUNTRY: E                                                                 

Beispiel 2 − WRITE-Statement mit nX-, nT-Notation

** Example 'WRTEX2': WRITE (with nX, nT notation)                       
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
  2 JOB-TITLE                                                           
END-DEFINE                                                              
*                                                                       
LIMIT 4                                                                 
READ EMPL-VIEW BY NAME                                                  
  WRITE NOTITLE 5X NAME 50T JOB-TITLE                               
END-READ                                                                
END                                                                    

Ausgabe des Programms WRTEX2:

ABELLAN                                     MAQUINISTA             
ACHIESON                                    DATA BASE ADMINISTRATOR
ADAM                                        CHEF DE SERVICE        
ADKINSON                                    PROGRAMMER            

Beispiel 3 − WRITE-Statement mit Notation T*

** Example 'WRTEX3': WRITE (with T* notation)                           
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
  2 CITY                                                                
  2 SALARY (1)                                                          
END-DEFINE                                                              
*                                                                       
LIMIT 5                                                                 
READ EMPL-VIEW BY CITY STARTING FROM 'ALBU'                             
  DISPLAY NOTITLE CITY NAME SALARY (1)                                  
  AT BREAK CITY                                                         
    /*                                                                  
    WRITE / 'CITY AVERAGE:' T*SALARY (1) AVER(SALARY(1)) //       
    /*                                                                  
  END-BREAK                                                             
END-READ                                                                
END                                                                    

Ausgabe des Programms WRTEX3:

        CITY                 NAME           ANNUAL  
                                            SALARY  
-------------------- -------------------- ----------
                                                    
ALBUQUERQUE          HAMMOND                   22000
ALBUQUERQUE          ROLLING                   34000
ALBUQUERQUE          FREEMAN                   34000
ALBUQUERQUE          LINCOLN                   41000
                                                    
CITY AVERAGE:                                  32750
                                                    
                                                    
ALFRETON             GOLDBERG                   4800
                                                    
CITY AVERAGE:                                   4800

Beispiel 4 − WRITE-Statement mit Notation P*

** Example 'WRTEX4': WRITE (with P* notation)                           
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
  2 CITY                                                                
  2 BIRTH                                                               
  2 SALARY (1)                                                          
END-DEFINE                                                              
*                                                                       
LIMIT 3                                                                 
READ EMPL-VIEW BY CITY FROM 'N'                                         
  DISPLAY NOTITLE NAME CITY                                             
          VERT AS 'BIRTH/SALARY' BIRTH (EM=YYYY-MM-DD) SALARY (1)       
  SKIP 1                                                                
  AT BREAK CITY                                                          
    WRITE  / 'CITY AVERAGE' P*SALARY (1) AVER(SALARY (1)) //       
  END-BREAK                                                             
END-READ                                                                
END

Ausgabe des Programms WRTEX4:

        NAME                 CITY           BIRTH   
                                            SALARY  
-------------------- -------------------- ----------
                                                    
WILCOX               NASHVILLE            1970-01-01
                                               38000
                                                    
MORRISON             NASHVILLE            1949-07-10
                                               36000
                                                    
                                                    
CITY AVERAGE                                   37000
                                                    
                                                    
BOYER                NEMOURS              1955-11-23
                                              195900
                                                    
                                                    
CITY AVERAGE                                  195900

Beispiel 5 − WRITE-Statement mit '=' und Parametern auf Statement/Element-Ebene

** Example 'WRTEX5': WRITE (using '=', statement/element parameters)    
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
  2 PERSONNEL-ID                                                        
  2 PHONE                                                               
END-DEFINE                                                              
*                                                                       
LIMIT 2                                                                 
READ EMPL-VIEW BY NAME                                                  
  WRITE NOTITLE (AL=16 NL=8)                                            
        '=' PERSONNEL-ID '=' NAME '=' PHONE (AL=10 EM=XXX-XXXXXXX) 
END-READ                                                                
END                                                                    

Ausgabe des Programms WRTEX5:

PERSONNEL ID: 60008339         NAME: ABELLAN          TELEPHONE: 435-6726
PERSONNEL ID: 30000231         NAME: ACHIESON         TELEPHONE: 523-341

Beispiel 6 − Report-Spezifikation mit für Natural als PC definierter Ausgabedatei

** Example 'PCDIEX1': DISPLAY and WRITE to PC                           
**                                                                      
** NOTE: Example requires that Natural Connection is installed.         
************************************************************************
DEFINE DATA LOCAL                                                       
01 PERS VIEW OF EMPLOYEES                                               
  02 PERSONNEL-ID                                                       
  02 NAME                                                               
  02 CITY                                                               
END-DEFINE                                                              
*                                                                       
FIND PERS WITH CITY = 'NEW YORK'               /* Data selection        
  WRITE (7) TITLE LEFT 'List of employees in New York' /                
  DISPLAY (7)          /* (7) designates the output file (here the PC).
    'Location'  CITY                                                    
    'Surname'   NAME                                                    
    'ID'        PERSONNEL-ID                                            
END-FIND                                                                
END