Dieser Abschnitt 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
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.
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.
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).
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:
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.
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.
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 |
| 1234 | 1.234,000EUR | 1234567 | 1.234.567,000EUR |
1234567 |
| 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.
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 |
1EUR |
| 1234567 |
1234567 |
1.234.567EUR |
| 1,234 |
1,234 |
1,234EU |
Anmerkung
Der Editiermasken-Freimodus gilt nur für das INPUT-Statement, wird
aber bei einem MOVE
EDITED-Statement ignoriert.
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 können keine Auswahlfenster definiert werden. Auswahlfenster, die aus einer
Großrechner- oder Windows-Umgebung importiert wurden, werden unter UNIX 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.
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.
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.
Zu Informationen über die relevanten Systemvariablen siehe Abschnitt Eingabe/Ausgabebezogene Systemvariablen in der Systemvariablen-Dokumentation.