Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Formate

&pagelevel(3)&pagelevel

Ein Feld ist ein Teil des Ein- oder Ausgabesatzes, das charakterisiert ist durch

  • seine Anfangsposition im Satz,

  • seine Länge,

  • sein Format.

Das Format gibt an, wie das Feld im Eingabesatz zu interpretieren bzw. wie es bei seiner Übertragung in den Ausgabesatz umzuformen ist. Kennwörter und Literale besitzen ein implizit festgelegtes Format. PERCON kann folgende Formate bearbeiten:

CHARACTER

Das bezeichnete Feld enthält Zeichen oder soll Zeichen aufnehmen.
Unter ’Zeichen’ sind Buchstaben, Ziffern und Sonderzeichen zu verstehen.

Beispiel


Inhalt vom Eingabefeld
Eingabeformat CHARACTER

Inhalt vom Ausgabefeld
Ausgabeformat CHARACTER

X'C1C2F1F2F3F4' (6 Byte lang)

C'AB1234' (6 Byte lang)


HEXADECIMAL

Nur Ausgabeformat. Das Eingabefeld wird sedezimal aufbereitet und in das bezeichnete Ausgabefeld ausgegeben, d.h. jedes Zeichen des Eingabefeldes wird in den entsprechenden Sedezimal-Code umgewandelt und nimmt im Ausgabefeld 2 Byte ein.

Beispiel


Inhalt vom Eingabefeld
Eingabeformat CHARACTER

Inhalt vom Ausgabefeld
Ausgabeformat HEXADECIMAL

X'C1C2F1F2F3F4' (6 Byte lang)

C'C1C2F1F2F3F4' (12 Byte lang)


BINARY

Nur Ausgabeformat. Das Eingabefeld wird binär aufbereitet und in das bezeichnete Ausgabefeld ausgegeben, d.h. jedes Zeichen des Eingabefeldes wird in den entsprechenden Binär-Code umgewandelt und nimmt im Ausgabefeld 8 Byte ein.

Beispiel


Inhalt vom Eingabefeld
Eingabeformat CHARACTER

Inhalt vom Ausgabefeld
Ausgabeformat BINARY

X'C1C2' (2 Byte lang)

C'1100000111000010' (16 Byte lang)


ZONED-DECIMAL

Das bezeichnete Feld enthält eine entpackte Dezimalzahl im EBCDI-Code oder soll eine solche aufnehmen. Das Vorzeichen der Zahl wird nicht berücksichtigt.

Beispiel


Inhalt vom Eingabefeld
Eingabeformat ZONED-DECIMAL

Inhalt vom Ausgabefeld
Ausgabeformat ZONED-DECIMAL

X'F1F2F3F4' (4 Byte lang)

C'1234' (4 Byte lang)



Inhalt vom Eingabefeld
Eingabeformat PACKED-DECIMAL

Inhalt vom Ausgabefeld
Ausgabeformat ZONED-DECIMAL

X'123F' (2 Byte lang)

C'123' (3 Byte lang)


SIGNED-DECIMAL

Nur Ausgabeformat. Das Ausgabefeld soll eine entpackte Dezimalzahl aufnehmen, bei der das Vorzeichen (+ oder –) in jedem Fall im ersten Byte des Feldes enthalten ist.

Dies ist für die Längenangabe des Feldes zu berücksichtigen.

Beispiel


Inhalt vom Eingabefeld
Eingabeformat ZONED-DECIMAL

Inhalt vom Ausgabefeld
Ausgabeformat SIGNED-DECIMAL

X'F1F2F3F4' (4 Byte lang)

C'+1234' (5 Byte lang)



Inhalt vom Eingabefeld
Eingabeformat PACKED-DECIMAL

Inhalt vom Ausgabefeld
Ausgabeformat SIGNED-DECIMAL

X'123F' (2 Byte lang)

C'+123' (4 Byte lang)


DECIMAL

Nur Ausgabeformat. Das Ausgabefeld soll eine entpackte Dezimalzahl enthalten, bei der das Vorzeichen nur bei negativem Wert der Zahl ausgegeben wird. Bei positivem Wert wird an Stelle des Vorzeichens ein Leerzeichen ausgegeben. Dies ist bei der Längenangabe zu berücksichtigen.

Beispiel


Inhalt vom Eingabefeld
Eingabeformat ZONED-DECIMAL

Inhalt vom Ausgabefeld
Ausgabeformat DECIMAL

X'F1F2F3F4' (4 Byte lang)

C' 1234' (5 Byte lang)



Inhalt vom Eingabefeld
Eingabeformat PACKED-DECIMAL

Inhalt vom Ausgabefeld
Ausgabeformat DECIMAL

X'123F' (2 Byte lang)

C' 1234' (4 Byte lang)


PACKED-DECIMAL

Das bezeichnete Feld enthält eine gepackte Dezimalzahl bzw. soll eine solche aufnehmen. Die Länge einer gepackten Zahl darf maximal 16 Byte betragen.

Beispiel


Inhalt vom Eingabefeld
Eingabeformat ZONED-DECIMAL

Inhalt vom Ausgabefeld
Ausgabeformat PACKED-DECIMAL

X'F1F2F3F4' (4 Byte lang)

X'01234F' (3 Byte lang)



Inhalt vom Eingabefeld
Eingabeformat PACKED-DECIMAL

Inhalt vom Ausgabefeld
Ausgabeformat PACKED-DECIMAL

X'123F' (2 Byte lang)

X'123F' (2 Byte lang)


ZONED-DECIMAL-LEFT

Nur Ausgabeformat für Kennwörter. Das Ausgabefeld soll eine linksbündige Dezimalzahl aufnehmen. Der rechte Teil des Ausgabefeldes wird mit Leerzeichen aufgefüllt.

Beispiel


Inhalt vom

Ausgabeformat ZONED-DECIMAL-LEFT

RECORD-COUNTER

C'82579   ' (8 Byte lang)


TRANSLATION

Diese Angabe ist nur zulässig innerhalb der Feldbeschreibung des Operanden OUTPUT-FIELDS in der SET-RECORD-MAPPING-Anweisung. Die einzelnen Zeichen werden entsprechend einer Code-Tabelle umgesetzt.

NO-TRANSLATION

Diese Angabe ist nur zulässig innerhalb der Feldbeschreibung des Operanden OUTPUT-FIELDS in der SET-RECORD-MAPPING-Anweisung. NO-TRANSLATION ist zu verwenden, wenn das Eingabefeld nicht in den Ausgabezeichensatz umgesetzt werden soll, z.B. bei gepackten Zahlen.

UNICODE-TRANSLATION

Diese Angabe ist nur zulässig innerhalb der Feldbeschreibung des Operanden OUTPUT-FORMAT in der SET-RECORD-MAPPING-Anweisung. Der Eingabedatei und/oder der Ausgabedatei muss ein Unicode-Format zugeordnet sein. Mit Hilfe dieser Anweisung werden einzelne Bereiche eines Satzes konvertiert und/oder, falls die Unicode-Variante UTF-16 verwendet wird, normalisiert. Fehlt die Angabe OUTPUT-FORMAT=*UNICODE-TRANSLATION findet keine Konvertierung bzw. Normalisierung des betroffenen Bereichs statt.

Bei der Konvertierung von einem Nicht-Unicode-Format in ein Unicode-Format oder umgekehrt ist zu beachten, dass sich die Länge das auszugebenden Bereichs ändern kann (siehe "Verwendung von UNICODE-Zeichensätzen in PERCON ").

Formatierte Zahlen mit einer Aufbereitungsmaske

Nur Ausgabeformat für numerische Ausgabefelder. Neben den Ausgabeformaten ZONED-DECIMAL, SIGNED-DECIMAL und ZONED-DECIMAL-LEFT kann für numerische Ausgabefelder auch eine Aufbereitungsmaske angegeben werden. In einer Maske können führende Nullen unterdrückt, Nachkommastellen angezeigt oder eine Zifferngruppierung durchgeführt werden.

Eine Maske wird in den Anweisungen SET-GROUP-ATTRIBUTES oder SET-RECORD-MAPPING mit dem Operanden OUTPUT-FORMAT=<c-string> vereinbart. Zudem muss der Operand OUTPUT-LENGTH den Wert *STD haben.

In einer Maske können folgende Zeichen stehen:

Füllzeichen     :  alle abdruckbaren Zeichen
Ziffernzeichen  :  Ziffernselektor ('Z')
                   Signifikanzstarter ('N')
Einfügungen     :  Zeichen ungleich 'Z' und 'N'
  • Maskenaufbau

    Das 1. Zeichen der Maske wird als Füllzeichen interpretiert. Für Maskenzeichen rechts vom Füllzeichen gilt, dass die Anzahl der Ziffernzeichen ungerade sein muss und nur ein oder kein Signifikanzstarter vorhanden sein darf. Ist dies nicht der Fall, so wird die Maske mit einem Syntaxfehler als fehlerhaft zurückgewiesen. Zwischen den Ziffernzeichen können Einfügungen vorhanden sein.

  • Maskengröße

    Enthält die Maske mehr Ziffernzeichen als in der aufbereitenden Zahl Ziffern vorhanden sind, so wird die aufzubereitende Zahl linksbündig mit Nullen erweitert.

    Ist die Anzahl der Ziffern der aufzubereitenden Zahl größer als die der Ziffernzeichen in der Maske, so wird die aufzubereitende Zahl (von links beginnend) gekürzt. Werden bei diesem Kürzungsvorgang relevante Ziffern (!= führende Nullen) abgeschnitten, so wird der Konvertierungsschritt sofort fehlerhaft abgebrochen (siehe Meldung PER0042).

    Bei den bisherigen Ausgabeformaten von PERCON gilt weiterhin die Einschränkung, dass die Anzahl der Ziffernstellen des Ausgabefeldes größer gleich der des Eingabefeldes sein muss.

  • Maskenverarbeitung

    Die Maske wird von links nach rechts abgearbeitet. Alle Zeichen vor dem ersten Ziffernzeichen (’Z’, ’N’) werden durch das Füllzeichen ersetzt.

    In weiterer Folge werden alle Zeichen, auch die Einfügungszeichen, solange durch das Füllzeichen ersetzt, bis entweder ein Ziffernselektor durch eine Ziffer != 0 ersetzt wird oder in der Maske ein Signifikanzstarter auftritt.

    Danach werden die Ziffernzeichen durch die entsprechenden Ziffern ersetzt, einzufügende Zeichen bleiben unverändert.

    Einzufügende Zeichen hinter dem letzten Ziffernzeichen bleiben unverändert, wenn die aufzubereitende Zahl negativ ist, sonst werden sie durch das Füllzeichen ersetzt.

Beispiel 1

FIELD (INPUT-POSITION=...,- 
       INPUT-LENGTH=5,- 
       INPUT-FORMAT=*PACKED-DECIMAL,- 
       OUTPUT-POSITION=...,- 
       OUTPUT-LENGTH=*STD,- 
       OUTPUT-FORMAT='*ZZNZ.ZZZ-') 

Es ergibt sich folgender Umsetzvorgang:


Aufzubereitendes Feld:      0 0 0 0 0 0 0 3 8 C 
Angegebene Maske:           * Z Z N Z . Z Z Z - 
Ausgabefeld:                * * * * 0 . 0 3 8 * 


Die gepackte Zahl ist positiv, deshalb wird das Minuszeichen hinter der Zahl durch das Füllzeichen ersetzt. Beim aufzubereitenden Feld wird wegen der Anpassung an die Maske das führende Byte, das Null enthält, weggeschnitten. Das Abschneiden von Feldteilen ungleich Null würde zu einem Abbruch mit Fehlermeldung PER0042 führen.

Beispiel 2

FIELD (INPUT-POSITION=...,- 
       INPUT-LENGTH=4,- 
       INPUT-FORMAT=*ZONED-DECIMAL,- 
       OUTPUT-POSITION=...,- 
       OUTPUT-LENGTH=*STD,- 
       OUTPUT-FORMAT='xZ ZNZ,ZZZ -') 

Es ergibt sich folgender Umsetzvorgang:


Aufzubereitendes Feld:                  F 3 F 9 F 7 D 1 
Angegebene Maske:             x Z   Z N Z , Z Z Z   - 
Ausgabefeld:                  x x x x x 3 , 9 7 1   - 


Da die gezonte Zahl negativ ist, wird das Leer- und Minuszeichen hinter der Zahl in das Ausgabefeld übernommen.