INPUT

Dieses Dokument behandelt folgende Themen:

Die Syntax des INPUT-Statements wird in den folgenden Abschnitten beschrieben:

Siehe auch Bildschirmgestaltung / Fenster im Leitfaden zur Programmierung.

Verwandte Statements: DEFINE WINDOW | REINPUT | SET WINDOW

Gehört zur Funktionsgruppe: Bildschirmgenerierung für interaktive Verarbeitung


Funktion

Das INPUT-Statement dient bei der interaktiven Verarbeitung dazu, formatierte Schirme oder Maps auszugeben oder zu generieren, die zur Eingabe von Daten verwendet werden.

Das Statement kann auch in Verbindung mit dem Natural-Stack (siehe STACK-Statement) verwendet werden, sowie zur Eingabe von Benutzerdaten bei Programmen, die im Batch-Betrieb ausgeführt werden.

Für den Natural RPC: Siehe Notes on Natural Statements on the Server in der Natural RPC (Remote Procedure Call)-Dokumentation.

Eingabe-Modi

Das INPUT-Statement kann unter drei verschiedenen Eingabe-Modi verwendet werden: Screen-Modus, Forms-Modus oder Keyword/Delimiter-Modus. Im Falle von Videoterminals/ Videobildschirmen wird in der Regel der Screen-Modus verwendet. Forms-Modus kann bei TTY-Terminals verwendet werden. Keyword/Delimiter-Modus kann bei TTY-Terminals oder im Batch-Betrieb benutzt werden (auf Großrechnern). Standardmäßig gilt Screen-Modus.

Sie können den Eingabemodus mit dem Session-Parameter IM oder den Terminalkommandos %F und %D ändern.

Screen-Modus

Im Screen-Modus bewirkt die Ausführung eines INPUT-Statements die Anzeige eines Schirms (Screen) entsprechend der angegebenen Felder und ihrer Positionen. Die Meldungszeile des Schirms wird von Natural zur Ausgabe von Fehlermeldungen benutzt. Die Position dieser Zeile (Kopf- oder Fußzeile) kann mit dem Terminalkommando %M beeinflusst werden. Der Terminal-Benutzer kann über die verschiedenen Tabulator-Tasten bestimmte Felder ansteuern.

Da Natural die sogenannte Bildschirmfenster- oder "Window"-Technik unterstützt, ist es erlaubt, dass die Größe einer logischen vom Programm ausgegebenen Map (Bildschirmmaske, theoretisch maximal 250 Stellen breit und 250 Zeilen lang, aber begrenzt durch den internen Bildschirm-Puffer) über die Größe des physischen Bildschirms hinausgeht.

Um ein Bildschirmfenster, d.h. den auf dem physischen Schirm sichtbaren Ausschnitt einer logischen Programmseite, zu beeinflussen und auf der logischen Seite zu verschieben, kann das Terminalkommando %W verwendet werden (Näheres zur Fenster-Verarbeitung siehe Terminalkommando %W).

Für Eingabefelder (definiert mit Session-Parameter AD=A oder AD=M), die auf dem physischen Bildschirm nicht vollständig angezeigt werden, gilt folgendes:

  • Ein Eingabefeld, dessen Anfang außerhalb des Fensters liegt, wird immer zu einem geschützten Feld gemacht.

  • Ein Eingabefeld, das im Fenster beginnt aber außerhalb des Fensters endet, wird nur dann geschützt, wenn der Wert, den es enthält, nicht vollständig innerhalb des Fensters sichtbar ist. Bitte beachten Sie, dass es hierbei darauf ankommt, ob die Wertlänge, nicht die Feldlänge, über das Fenster hinausgeht. Füllzeichen (wie mit dem Profilparameter FC oder dem Session-Parameter AD angegeben) zählen nicht als Teil des Wertes.

  • Falls Sie in ein derart geschütztes Eingabefeld Eingaben machen möchten, müssen Sie zunächst die Fenstergröße so ändern, dass sich der Anfang des Feldes bzw. das Ende des Feldwertes innerhalb des Fensters befindet (siehe Terminalkommando %W).

Andere Eingabe-Modi

Das INPUT-Statement kann sowohl für Operationen auf zeilenorientierten Geräten wie zur Verarbeitung von Batch-Eingaben aus sequentiellen Dateien verwendet werden.

Dieselben Maps, die im interaktiven Screen-Modus verwendet werden, können auch in einem der anderen Eingabe-Modi verarbeitet werden.

Im Forms- oder Keyword/Delimiter-Modus werden die Eingaben entweder ohne Maps verarbeitet oder durch Map-Simulation im Line-Modus.

Siehe auch:

Eingabe von Daten als Reaktion auf ein INPUT-Statement

Bei alphanumerischen Feldern müssen die Daten linksbündig eingegeben werden; jedes eingegebene Zeichen (auch Leerzeichen) hat eine Bedeutung. Die Daten werden ein Zeichen pro Byte dem internen Feld zugeordnet. In ein alphanumerisches Feld eingegebene Daten werden nicht auf Gültigkeit überprüft.

Die Umsetzung von Klein- in Großbuchstaben kann über die Terminalkommandos %L und %U sowie die Feldattribute AD=T und AD=W gesteuert werden.

In numerische Felder können Daten an beliebiger Stelle eingegeben werden, wobei Leerzeichen und Nullen vor und Leerzeichen nach dem eingegebenen Wert erlaubt sind; darüber hinaus dürfen ein Vorzeichen und ein Komma (Dezimalpunkt) eingegeben werden. Natural richtet den Feldwert entsprechend der internen Definition des Feldes aus.

Gilt SG=OFF, so reserviert oder vergibt Natural keine Stelle für das Vorzeichen. Bei Feldern mit Format P müssen Daten in Dezimalform eingegeben werden; falls nötig, setzt Natural dezimale Daten automatisch in gepackte um. Ein Feld, das nur Leerzeichen enthält, wird als Nullwert interpretiert.

Bei in ein numerisches Feld eingegebenen Daten überprüft Natural, ob es sich um keine anderen Zeichen als Zahlenzeichen, Komma (Dezimalpunkt, optional), Vorzeichen (optional) und vor- oder nachgestellte Leerzeichen handelt. Wird kein Komma eingegeben, so wird angenommen, dass es sich rechts neben dem eingegebenen Wert befindet.

Daten für binäre Felder müssen für alle Byte-Positionen eingegeben werden (zwei Zeichen pro Byte); es dürfen nur Hexadezimalzeichen (0 − 9, A − F) eingegeben werden. Ein Leerzeichen (H'20' in ASCII bzw. H'40' in EBCDIC) ist erlaubt und wird in binäre Nullen umgesetzt. Natural überprüft, ob keine anderen außer den gültigen Hexadezimalzeichen eingegeben wurden.

Bei logischen Feldern (Format L) kann entweder ein Leerzeichen (für falsch) oder ein anderes Zeichen (für wahr) eingegeben werden.

Bei Feldern der Formate F, D und T müssen die Daten entsprechend den für Gleitkomma-, Datums- bzw. Zeitkonstanten gültigen Regeln eingegeben werden.

Numerischer Editiermasken-Freimodus

Innerhalb eines Feldelements können Sie die Darstellung des Feldinhalts mit einer Editiermaske formatieren. Die Editiermaske dient zwei verschiedenen Zwecken:

  • zum Erstellen des Layouts zur Anzeige des Feldes auf dem Bildschirm;

  • zum Extrahieren der Felddaten aus der eingegebenen Zeichenkette nach dem Ändern einer Zeichenkette und dem Drücken von FREIG.

Der Vorteil der Verbesserung des Formats der mit zusätzlichen Einfügungszeichen angezeigten Felddaten kann sich als ein Nachteil herausstellen, weil ein neu eingegebener Datenwert genau dem Format der Editiermaske entsprechen muss.

Beispiel:

SET GLOBALS ID=; DC=,
RESET N (N7,3)
INPUT N (AD=M EM=Z'.'ZZZ'.'ZZZ,999EUR)
END
Ausgabewert angezeigt als: Eingabewert einzugeben als: −−>Eingabefehler, wenn eingegeben als:
0 ,000EUR 1 1,000EUR

1
1EUR
01,000EUR

1234 1.234,000EUR 1234567 1.234.567,000EUR

1234567
1.234.567
1.234.567EUR

0,123 ,123EUR 1,234 1,234EUR 1,234

Eine andere Möglichkeit zur Eingabe von numerischen Feldern in die Editiermaske besteht in der Benutzung eines anderen INPUT-Modus, der Editiermasken-Freimodus genannt wird. Wenn sie aktiviert sind (entweder beim Session-Start über den Profilparameter EMFM oder in einer laufenden Natural-Session über das Terminalkommando %FM+), können alle oder einige der Einfügungszeichen der Editiermaske beim INPUT-Statement weggelassen werden.

Erscheint aber eine benachbarte Zeichenkette mit Einfügungszeichen in der Editiermaske (wie EUR im folgenden Beispiel), dürfen Sie nur die Zeichenkette angeben oder sie vollständig weglassen. Die Anzahl der optionalen oder zwingenden Ziffern (Editiermasken-Zeichen Z und 9), die angegeben werden müssen, wird nicht beeinflusst.

Beispiel mit aktiviertem Editiermasken-Freimodus:

SET GLOBALS ID=; DC=,
SET CONTROL 'FM+'         /* activate numeric Edit Mask Free Mode
RESET N (N7,3)
INPUT N (AD=M EM=Z'.'ZZZ'.'ZZZ,999EUR)
END
Eingabewert kann eingegeben werden als: führt zu einem Fehler, wenn eingegeben als:
1

1
1,0
001
1,00EUR
0.001
1,EUR

1EUR
1234567

1234567
1.234.567
1234.567
1234567,0
1.234.567,0
1.234.567,EUR
1.234.567,0EUR
1.234.567,000EUR

1.234.567EUR
1,234

1,234
1,234EUR
001,234
0.001,234EUR
00001,234EUR

1,234EU

Anmerkung:
Der Editiermasken-Freimodus gilt nur für das INPUT-Statement, wird aber bei einem MOVE EDITED-Statement ignoriert.

SB − Auswahlfenster (Selection Box)

Auswahlfenster (Selection Boxes) in einem INPUT-Statement stehen nur auf Großrechnern zur Verfügung. Bei anderen Plattformen können Auswahlfenster nur im Masken-Editor (Map Editor) definiert werden.

Anmerkung:
Unter UNIX und OpenVMS können keine Auswahlfenster definiert werden. Auswahlfenster, die aus einer Großrechner- oder Windows-Umgebung importiert wurden, werden unter UNIX und OpenVMS ignoriert.

Auswahlfenster können an Eingabefelder angehängt werden. Sie sind eine komfortable Alternative zu an Feldern angehängte Helproutinen, da Sie ja ein Auswahlfenster direkt in Ihrem Programm kodieren können. Sie brauchen kein zusätzliches Programm wie bei Helproutinen.

Weitere Informationen entnehmen Sie der Beschreibung des Session-Parameters SB in der Parameter-Referenz.

Eingabefehler

Entsprechen die in ein Eingabefeld eingegebenen Daten nicht dem Format bzw. der Editiermaske des Feldes, gibt Natural eine entsprechende Fehlermeldung aus (ohne die Programmausführung abzubrechen) und platziert den Cursor in das betreffende Feld; der Benutzer kann dann den Fehler berichtigen und gültige Daten eingeben, woraufhin die Verarbeitung fortgesetzt wird.

Geteilter Schirm (Split Screen)

In der Regel erzeugt jedes INPUT-Statement eine neue Ausgabeseite (bzw. einen neuen Schirm).

Ein an ein AT END OF PAGE-Statement geknüpftes INPUT-Statement erzeugt keinen neuen Schirm. Dadurch besteht die Möglichkeit, einen geteilten Schirm (Split Screen) zu erhalten, dessen obere Hälfte mehrere Zeilen anzeigt, während in der unteren Hälfte eine Eingabe-Map erstellt werden kann.

Damit die Eingabe-Map auf denselben physischen Schirm passt, muss die logische Seitenlänge mit dem Profilparameter PS in einem SET GLOBALS- oder FORMAT-Statement entsprechend gesetzt werden.

Die erste INPUT-Zeile wird unter die letzte angezeigte Zeile platziert. Falls die NO ERASE-Option verwendet wird, wird die erste INPUT-Zeile an den Anfang der Seite platziert.

Systemvariablen beim INPUT-Statement

Zu Informationen über die relevanten Systemvariablen siehe Abschnitt Eingabe/Ausgabebezogene Systemvariablen in der Systemvariablen-Dokumentation.