Rexx - Kurzanleitung
Rexx (Restructured Extended Executor)ist als Skriptsprache konzipiert. Ziel ist es, die Skripterstellung so einfach, schnell, zuverlässig und fehlerfrei wie möglich zu gestalten. Viele Programmiersprachen sind auf Kompatibilität mit älteren Sprachen ausgelegt und für bestimmte Zielgruppen oder Plattformen geschrieben. Rexx ignoriert fremde Ziele. Es wurde vom ersten Tag an so konzipiert, dass es leistungsstark und dennoch einfach zu bedienen ist.
Rexx wurde entwickelt und erste Implementierung in Assembler - Sprache als ‚Eigenzeit‘ Projekt zwischen 20 th März 1979 und Mitte 1982 von Mike Cowlishaw von IBM, die ursprünglich als Skript Programmiersprache um die Sprachen zu ersetzenEXEC and EXEC 2. Es wurde entworfen, um ein zu seinmacro or scripting languagefür jedes System. Als solches gilt Rexx als Vorläufer von Tcl und Python. Rexx sollte von seinem Entwickler auch eine vereinfachte und leichter zu erlernende Version der PL / I-Programmiersprache sein.
Eigenschaften von Rexx
Rexx als Programmiersprache verfügt über folgende Hauptmerkmale:
Einfache Syntax
Die Möglichkeit, Befehle an mehrere Umgebungen weiterzuleiten
Die Fähigkeit, Funktionen, Prozeduren und Befehle zu unterstützen, die einer bestimmten aufrufenden Umgebung zugeordnet sind.
Ein integrierter Stack mit der Möglichkeit, mit dem Host-Stack zusammenzuarbeiten, falls vorhanden.
Kleiner Befehlssatz mit nur zwei Dutzend Anweisungen
Freiform-Syntax
Token ohne Berücksichtigung der Groß- und Kleinschreibung, einschließlich Variablennamen
Zeichenkettenbasis
Dynamische Datentypisierung, keine Deklarationen
Keine reservierten Schlüsselwörter, außer im lokalen Kontext
Keine Include-Datei-Funktionen
Beliebige numerische Genauigkeit
Dezimalarithmetik, Gleitkomma
Eine reichhaltige Auswahl an integrierten Funktionen, insbesondere Zeichenfolgen- und Textverarbeitung
Automatische Speicherverwaltung
Absturzsicherung
Inhaltsadressierbare Datenstrukturen
Assoziative Arrays
Einfacher Zugriff auf Systembefehle und -einrichtungen
Einfache Fehlerbehandlung sowie integrierter Tracing- und Debugger
Nur wenige künstliche Einschränkungen
Vereinfachte E / A-Funktionen
Die offizielle Website für Rexx ist www.oorexx.org
Bevor Sie mit der Arbeit an Rexx beginnen können, müssen Sie sicherstellen, dass auf Ihrem System eine voll funktionsfähige Version von Rexx ausgeführt wird. In diesem Kapitel wird die Installation von Rexx und die nachfolgende Konfiguration auf einem Windows-Computer erläutert, um mit Rexx zu beginnen.
Stellen Sie sicher, dass die folgenden Systemanforderungen erfüllt sind, bevor Sie mit der Installation fortfahren.
System Anforderungen
Erinnerung | 2 GB RAM (empfohlen) |
Festplattenplatz | Keine Mindestanforderung. Am besten genug Speicherplatz, um die Programme zu speichern, die mit Rexx erstellt werden. |
Betriebssystemversion | Rexx kann unter Windows, Ubuntu / Debian und Mac OS X installiert werden. |
Rexx herunterladen
Um Rexx herunterzuladen, sollten Sie die folgende URL verwenden: https://www.oorexx.org/download.html
Diese Seite bietet eine Vielzahl von Downloads für verschiedene Versionen von Rexx, wie im folgenden Screenshot gezeigt.
Klicken Sie in der Tabelle mit dem Header von Release 4.2.0 auf die 'ooRexx-Installationsdateien'.
Danach werden Sie auf die folgende Seite weitergeleitet.
Klick auf das ooRexx-4.2.0.windows.x86_64.exe um die 64-bitVersion der Software. Wir werden die Installation der Software im folgenden Kapitel diskutieren.
In den folgenden Schritten wird ausführlich erläutert, wie Rexx auf einem Windows-System installiert werden kann.
Step 1- Starten Sie das im vorherigen Abschnitt heruntergeladene Installationsprogramm. Klicken Sie nach dem Start des Installationsprogramms auf die Schaltfläche Ausführen.
Step 2 - Klicken Sie im folgenden Bildschirm auf die Schaltfläche Weiter, um mit der Installation fortzufahren.
Step 3 - Klicken Sie auf die I Agree Taste, um fortzufahren.
Step 4 - Akzeptiere die default components und klicken Sie dann auf die Schaltfläche Weiter.
Step 5 - Wählen Sie den Installationsort und klicken Sie auf die Schaltfläche Weiter.
Step 6 - Akzeptieren Sie die Standardprozesse, die installiert werden, und klicken Sie auf die Schaltfläche Weiter.
Step 7 - Wählen Sie die Standarddateizuordnungen und klicken Sie auf die Schaltfläche Weiter.
Step 8 - Aktivieren Sie die Kontrollkästchen zum Senden von Rexx-Elementen an die ausführbaren Dateien und klicken Sie dann auf die Schaltfläche Weiter (siehe folgenden Screenshot).
Step 9- Wählen Sie im nächsten Bildschirm den Editor für die Arbeit mit Rexx-Dateien. Behalten Sie den Notizblock als Standardoption bei. Akzeptieren Sie auch die Standarderweiterung für jede Rexx-Datei.
Step 10 - Übernehmen Sie die Standardeinstellungen auf dem folgenden Bildschirm und klicken Sie auf die Schaltfläche Weiter, um mit der Installation fortzufahren.
Step 11 - Klicken Sie abschließend auf die Schaltfläche Installieren, um mit der Installation fortzufahren.
Step 12 - Nach Abschluss der Installation müssen Sie auf die Schaltfläche Weiter klicken, um fortzufahren.
Step 13 - Klicken Sie auf die Schaltfläche Fertig stellen, um die Installation abzuschließen.
In diesem Kapitel wird erläutert, wie Plug-Ins installiert werden popular IDE’s (Integrated Development Environment). Rexx als Programmiersprache ist auch in gängigen IDEs wie verfügbarEclipse. Schauen wir uns an, wie wir die erforderlichen Plugins in diesen IDEs erhalten können, damit Sie mehr Auswahlmöglichkeiten bei der Arbeit mit Rexx haben.
Installation in Eclipse
Um Rexx problemlos in Eclipse zu installieren, müssen Sie die folgenden Schritte ausführen.
Step 1 - Öffnen Sie Eclipse und klicken Sie auf den Menüpunkt. Help → Eclipse Marketplace wie im folgenden Screenshot gezeigt.
Step 2 - Geben Sie im nächsten Dialogfeld Rexx in die Suchkriterien ein und klicken Sie auf die Schaltfläche Suchen.
Klicken Sie anschließend auf die Schaltfläche Installieren.
Step 3 - Klicken Sie auf die Schaltfläche Bestätigen, um mit der Installation der Funktionen fortzufahren.
Step 4- Eclipse lädt dann die erforderlichen Dateien herunter, um mit der Installation zu beginnen. Sobald dies erledigt ist, fordert Eclipse Sie auf, die Lizenzvereinbarungen zu akzeptieren. Klicken Sie auf Akzeptieren der Lizenzvereinbarungen und dann auf die Schaltfläche Fertig stellen (siehe folgenden Screenshot).
Eclipse beginnt dann mit der Installation der Software im Hintergrund.
Step 5- Sie erhalten wahrscheinlich eine Sicherheitswarnung (wie im folgenden Screenshot gezeigt). Klicken Sie auf die Schaltfläche OK, um fortzufahren.
Step 6- Sie werden aufgefordert, Eclipse neu zu starten, sobald die Updates installiert sind. Klicken Sie auf Ja, um Eclipse neu zu starten.
Um die grundlegende Syntax von Rexx zu verstehen, schauen wir uns zunächst ein einfaches Hello World-Programm an.
Beispiel
/* Main program */
say "Hello World"
Man kann sehen, wie einfach das Hallo-Welt-Programm ist. Es ist eine einfache Skriptzeile, mit der das Hello World-Programm ausgeführt wird.
Die folgenden Dinge müssen über das obige Programm beachtet werden -
Das say command wird verwendet, um einen Wert an die Konsole auszugeben.
Das /* */ wird für Kommentare in Rexx verwendet.
Die Ausgabe des obigen Programms ist -
Hello World
Allgemeine Form einer Erklärung
Sehen wir uns in Rexx eine allgemeine Form eines Programms an. Schauen Sie sich das folgende Beispiel an.
/* Main program */
say add(5,6)
exit
add:
parse arg a,b
return a + b
Die Ausgabe des obigen Programms ist -
11
Lassen Sie uns durchgehen, was wir aus dem obigen Programm verstanden haben -
Hinzufügen ist eine Funktion zum Hinzufügen von 2 Zahlen.
Im Hauptprogramm werden die Werte 5 und 6 als Parameter für die Add-Funktion verwendet.
Das Schlüsselwort exit wird zum Beenden des Hauptprogramms verwendet. Dies wird verwendet, um das Hauptprogramm von der Add-Funktion zu unterscheiden.
Die Add-Funktion wird durch das Symbol ':' unterschieden.
Die parse-Anweisung wird verwendet, um die eingehenden Argumente zu analysieren.
Schließlich wird die return-Anweisung verwendet, um die Summe der numerischen Werte zurückzugeben.
Unterprogramme und Funktionen
In Rexx ist der Code normalerweise in Unterprogramme und Funktionen unterteilt. Unterprogramme und Funktionen werden verwendet, um den Code in verschiedene logische Einheiten zu unterscheiden. Der Hauptunterschied zwischen Unterprogrammen und Funktionen besteht darin, dass Funktionen einen Wert zurückgeben, während Unterprogramme dies nicht tun.
Nachfolgend finden Sie ein Beispiel für einen wesentlichen Unterschied zwischen einem Unterprogramm und einer Funktion für eine Additionsimplementierung.
Funktionsimplementierung
/* Main program */
say add(5,6)
exit
add:
parse arg a,b
return a + b
Implementierung des Unterprogramms
/* Main program */
add(5,6)
exit
add:
parse arg a,b
say a + b
Die Ausgabe beider Programme ist der Wert 11.
Befehle ausführen
Rexx kann als Steuerungssprache für eine Vielzahl befehlsbasierter Systeme verwendet werden. Rexx führt Befehle in diesen Systemen folgendermaßen aus. Wenn Rexx auf eine Programmzeile stößt, die weder eine Anweisung noch eine Zuweisung ist, behandelt es diese Zeile als Zeichenfolgenausdruck, der ausgewertet und dann an die Umgebung übergeben werden soll.
Ein Beispiel ist wie folgt:
Beispiel
/* Main program */
parse arg command
command "file1"
command "file2"
command "file3"
exit
Jede der drei ähnlichen Zeilen in diesem Programm ist ein Zeichenfolgenausdruck, der den Namen einer Datei (in den Zeichenfolgenkonstanten enthalten) zum Namen eines Befehls (als Parameter angegeben) hinzufügt. Die resultierende Zeichenfolge wird an die Umgebung übergeben, um als Befehl ausgeführt zu werden. Wenn der Befehl beendet ist, wird die Variable "rc" auf den Exit-Code des Befehls gesetzt.
Die Ausgabe des obigen Programms ist wie folgt:
sh: file1: command not found
3 *-* command "file1"
>>> " file1"
+++ "RC(127)"
sh: file2: command not found
4 *-* command "file2"
>>> " file2"
+++ "RC(127)"
sh: file3: command not found
5 *-* command "file3"
>>> " file3"
+++ "RC(127)"
Schlüsselwörter in Rexx
Die freie Syntax von REXX impliziert, dass einige Symbole für die Verwendung durch den Sprachprozessor in bestimmten Kontexten reserviert sind.
Innerhalb bestimmter Anweisungen können einige Symbole reserviert sein, um die Teile der Anweisung zu trennen. Diese Symbole werden als Schlüsselwörter bezeichnet. Beispiele für REXX-Schlüsselwörter sind dieWHILE in a DO instruction, und die THEN (die in diesem Fall als Klauselabschluss fungiert) nach einem IF or WHEN clause.
Abgesehen von diesen Fällen werden nur einfache Symbole, die das erste Token in einer Klausel sind und denen kein "=" oder ":" folgt, überprüft, um festzustellen, ob es sich um Anweisungsschlüsselwörter handelt. Sie können die Symbole an anderer Stelle in Klauseln frei verwenden, ohne dass sie als Schlüsselwörter angesehen werden.
Kommentare in Rexx
Kommentare werden verwendet, um Ihren Code zu dokumentieren. Einzeilige Kommentare werden mit / * * / an einer beliebigen Position in der Zeile identifiziert.
Ein Beispiel ist wie folgt:
/* Main program */
/* Call the add function */
add(5,6)
/* Exit the main program */
exit add:
/* Parse the arguments passed to the add function */ parse arg a,b
/* Display the added numeric values */
say a + b
Kommentare können auch zwischen eine Codezeile geschrieben werden, wie im folgenden Programm gezeigt -
/* Main program */
/* Call the add function */
add(5,6)
/* Exit the main program */
exit
add:
parse /* Parse the arguments passed to the add function */
arg a,b
/* Display the added numeric values */
say a + b
Die Ausgabe des obigen Programms ist -
11
Sie können auch mehrere Zeilen in einem Kommentar haben, wie im folgenden Programm gezeigt -
/* Main program
The below program is used to add numbers
Call the add function */
add(5,6)
exit
add:
parse arg a,b
say a + b
Die Ausgabe des obigen Programms ist -
11
In jeder Programmiersprache müssen Sie verschiedene Variablen verwenden, um verschiedene Arten von Informationen zu speichern. Variablen sind nichts anderes als reservierte Speicherplätze zum Speichern von Werten. Dies bedeutet, dass Sie beim Erstellen einer Variablen Speicherplatz im Speicher reservieren, um den dieser Variablen zugeordneten Wert zu speichern.
Möglicherweise möchten Sie Informationen verschiedener Datentypen wie Zeichenfolge, Zeichen, Breites Zeichen, Ganzzahl, Gleitkomma, Boolescher Wert usw. speichern. Basierend auf dem Datentyp einer Variablen weist das Betriebssystem Speicher zu und entscheidet, was im reservierten Bereich gespeichert werden kann Erinnerung.
Integrierte Datentypen
Rexx bietet eine Vielzahl integrierter Datentypen. Es folgt eine Liste der Datentypen, die in Rexx definiert sind.
Integer- Eine numerische Zeichenfolge, die keinen Dezimalpunkt oder Exponentenbezeichner enthält. Das erste Zeichen kann seina plus (+) or minus (-) sign. Die dargestellte Nummer muss zwischen -2147483648 und 2147483647 einschließlich liegen.
Big Integer- Eine Zahlenfolge, die keinen Dezimalpunkt oder Exponentenbezeichner enthält. Das erste Zeichen kann ein Pluszeichen (+) oder ein Minuszeichen (-) sein. Die dargestellte Nummer muss zwischen -9223372036854775808 und 2147483648 einschließlich oder zwischen 2147483648 und 9223372036854775807 liegen.
Decimal - Es wird aus einem der folgenden Formate sein -
Eine numerische Zeichenfolge, die einen Dezimalpunkt, aber keine Exponenten-ID enthält. Dasp repräsentiert die Präzision und sstellt die Skala der Dezimalzahl dar, die die Zeichenfolge darstellt. Das erste Zeichen kann ein Pluszeichen (+) oder ein Minuszeichen (-) sein.
Eine Folge von Zahlen, die does not contain a decimal pointoder eine Exponenten-ID. Das erste Zeichen kann ein Pluszeichen (+) oder ein Minuszeichen (-) sein. Die dargestellte Zahl ist kleiner als -9223372036854775808 oder größer als 9223372036854775807.
Float- Eine Zeichenfolge, die eine Zahl in wissenschaftlicher Notation darstellt. Die Zeichenfolge besteht aus einer Reihe von Zahlen, gefolgt von einer Exponenten-ID (einem E oder e, gefolgt von einem optionalen Plus- (+) oder Minuszeichen (-) und einer Reihe von Zahlen). Die Zeichenfolge kann mit einem Pluszeichen (+) oder Minuszeichen (-) beginnen.
String - Eine normale Zeichenfolge.
Im Folgenden finden Sie einige Beispiele, wie jeder Datentyp verwendet werden kann. Wieder wird jeder Datentyp in den folgenden Kapiteln ausführlich besprochen. Dies dient nur dazu, Sie mit einer kurzen Beschreibung der oben genannten Datentypen auf den neuesten Stand zu bringen.
Ganze Zahl
Ein Beispiel für die Verwendung des Nummerndatentyps ist im folgenden Programm dargestellt. Dieses Programm zeigt das Hinzufügen von 2 Ganzzahlen.
Example
/* Main program
The below program is used to add numbers
Call the add function */
add(5,6)
exit
add:
parse arg a,b
say a + b
Die Ausgabe des obigen Programms ist -
11
Big Integer
Das folgende Programm zeigt die Fähigkeit von Rexx, große ganze Zahlen zu verarbeiten. Dieses Programm zeigt, wie Sie 2 große Ganzzahlen hinzufügen.
Example
/* Main program
The below program is used to add numbers
Call the add function */
add(500000000000,6000000000000000000000)
exit
add:
parse arg a,b
say a + b
Die Ausgabe des obigen Programms ist -
6.00000000E+21
Dezimal
Das folgende Programm zeigt die Fähigkeit von Rexx, Dezimalzahlen zu verarbeiten. Dieses Programm zeigt, wie 2 Dezimalzahlen hinzugefügt werden.
Example
/* Main program
The below program is used to add numbers
Call the add function */
add(5.5,6.6)
exit
add:
parse arg a,b
say a + b
Die Ausgabe des obigen Programms ist -
12.1
Schweben
Das folgende Beispiel zeigt Fälle, wie eine Zahl als Float fungieren kann.
Example
/* Main program
The below program is used to add numbers
Call the add function */
add(12E2,14E4)
exit
add:
parse arg a,b
say a + b
Die Ausgabe des obigen Programms ist -
141200
String
Ein Beispiel für die Verwendung des Tupel-Datentyps ist im folgenden Programm dargestellt.
Hier definieren wir a Tuple PDas hat 3 Begriffe. Dastuple_size ist eine in Rexx definierte integrierte Funktion, mit der die Größe des Tupels bestimmt werden kann.
Example
/* Main program */
display("hello")
exit
display:
parse arg a
say a
Die Ausgabe des obigen Programms ist -
hello
In Rexx sind alle Variablen an die Anweisung '=' gebunden. Variablennamen werden manchmal als Symbole bezeichnet. Sie können aus Buchstaben, Ziffern und Zeichen wie '. ! ? _'. Ein von Ihnen erstellter Variablenname darf nicht mit einer Ziffer oder einem Punkt beginnen. Ein einfacher Variablenname enthält keinen Punkt. Ein Variablenname, der einen Punkt enthält, wird als zusammengesetzte Variable bezeichnet und repräsentiert ein Array oder eine Tabelle.
Im Folgenden sind die grundlegenden Variablentypen in Rexx aufgeführt, die auch im vorherigen Kapitel erläutert wurden:
Integers- Dies wird verwendet, um eine Ganzzahl oder einen Gleitkommawert darzustellen. Ein Beispiel hierfür ist 10.
Big integers - Dies ist ein großer ganzzahliger Wert.
Decimal - Ein Dezimalwert ist eine numerische Zeichenfolge, die einen Dezimalpunkt, aber keine Exponenten-ID enthält.
Float - Ein Gleitkommawert ist eine Zeichenfolge, die eine Zahl in der wissenschaftlichen Notation darstellt.
String - Eine Reihe von Zeichen definiert eine Zeichenfolge in Rexx.
Verschiedene Arten von variablen Funktionen
In diesem Abschnitt werden die verschiedenen Funktionen erläutert, die eine Variable ausführen kann.
Variable Deklarationen
Die allgemeine Syntax zum Definieren einer Variablen wird wie folgt dargestellt:
var-name = var-value
wo
var-name - Dies ist der Name der Variablen.
var-value - Dies ist der an die Variable gebundene Wert.
Das folgende Programm ist ein Beispiel für die Variablendeklaration -
Example
/* Main program */
X = 40
Y = 50
Result = X + Y
say Result
Im obigen Beispiel haben wir 2 Variablen, eine davon ist X welches an den Wert gebunden ist 40 und der nächste ist Y welches an den Wert von gebunden ist 50. Eine andere Variable namens Result ist an das Hinzufügen von gebundenX and Y.
Die Ausgabe des obigen Programms wird wie folgt sein:
90
Variablen benennen
Variablennamen werden manchmal als Symbole bezeichnet. Sie können aus Buchstaben, Ziffern und Zeichen wie 'bestehen. ! ? _ '. Ein von Ihnen erstellter Variablenname darf nicht mit einer Ziffer oder einem Punkt beginnen.
Wenn einer Variablen noch kein Wert zugewiesen wurde, wird sie als nicht initialisiert bezeichnet. Der Wert einer nicht initialisierten Variablen ist der Name der Variablen selbst in Großbuchstaben.
Ein Beispiel für eine nicht zugewiesene Variable lautet wie folgt:
Example
/* Main program */
unassignedvalue
say unassignedvalue
Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe:
UNASSIGNEDVALUE
sh: UNASSIGNEDVALUE: command not found
2 *-* unassignedvalue
>>> "UNASSIGNEDVALUE"
+++ "RC(127)"
Variablen können mehrmals Werte zugewiesen werden. Das folgende Programm zeigt, wie dem Wert von X ein Wert mehrfach zugewiesen werden kann.
Example
/* Main program */
X = 40
X = 50
say X
Die Ausgabe des obigen Programms wird wie folgt sein:
50
Variablen drucken
Die Werte von Variablen werden mit dem gedruckt sayBefehl. Im Folgenden finden Sie ein Beispiel für das Drucken einer Vielzahl von Variablen.
Example
/* Main program */
X = 40
/* Display an Integer */
say X
Y = 50.5
/* Display a Float */
say Y
Z = "hello"
/* Display a string */
say Z
Die Ausgabe des obigen Programms wird wie folgt sein:
40
50.5
hello
Ein Operator ist ein Symbol, das den Compiler anweist, bestimmte mathematische oder logische Manipulationen durchzuführen.
Rexx verfügt über verschiedene Arten von Operatoren, die ebenfalls wie folgt ausführlich erläutert werden:
- Rechenzeichen
- Vergleichsoperatoren
- Logische Operatoren
- Bitweise Operatoren
Rechenzeichen
Die Rexx-Sprache unterstützt die normalen arithmetischen Operatoren wie jede andere Sprache. Im Folgenden sind die in Rexx verfügbaren arithmetischen Operatoren aufgeführt.
Beispiel zeigen
Operator | Beschreibung | Beispiel |
---|---|---|
+ | Addition von zwei Operanden | 1 + 2 ergibt 3 |
- - | Subtrahiert den zweiten Operanden vom ersten | 1 - 2 ergibt -1 |
∗ | Multiplikation beider Operanden | 2 ∗ 2 ergibt 4 |
/. | Division des Zählers durch Nenner | 2/2 ergibt 1 |
// // | Rest der Division der ersten Zahl durch die zweite | 3 // 2 ergibt 1 |
%. | Die div-Komponente führt die Division durch und gibt die ganzzahlige Komponente zurück. | 3% 2 ergeben 1 |
Vergleichsoperatoren
Vergleichsoperatoren ermöglichen den Vergleich von Objekten. Im Folgenden sind die in Rexx verfügbaren Vergleichsoperatoren aufgeführt. In Rexx wird der wahre Wert mit 1 und der falsche Wert mit 0 bezeichnet.
Beispiel zeigen
Operator | Beschreibung | Beispiel |
---|---|---|
== | Testet die Gleichheit zwischen zwei Objekten | 2 = 2 ergibt 1 |
< | Überprüft, ob das linke Objekt kleiner als der rechte Operand ist. | 2 <3 ergibt 1 |
= < | Überprüft, ob das linke Objekt kleiner oder gleich dem rechten Operanden ist. | 2 = <3 ergibt 1 |
> | Überprüft, ob das linke Objekt größer als der rechte Operand ist. | 3> 2 ergibt 1 |
> = | Überprüft, ob das linke Objekt größer oder gleich dem rechten Operanden ist. | 3> 2 ergibt 1 |
Logische Operatoren
Logische Operatoren werden verwendet, um boolesche Ausdrücke auszuwerten. Im Folgenden sind die in Rexx verfügbaren logischen Operatoren aufgeführt.
Beispiel zeigen
Operator | Beschreibung | Beispiel |
---|---|---|
& | Dies ist der logische Operator "und" | 1 oder 1 ergibt 1 |
| | Dies ist der logische "oder" -Operator | 1 oder 0 ergibt 1 |
\. | Dies ist der logische "Nicht" -Operator | \ 0 ergibt 1 |
&& | Dies ist der logische exklusive "oder" -Operator | 1 && 0 ergibt 1 |
Bitweise Operatoren
Groovy bietet vier bitweise Operatoren. Nachfolgend finden Sie die in Groovy verfügbaren bitweisen Operatoren.
Beispiel zeigen
Sr.Nr. | Betreiber & Beschreibung |
---|---|
1 | bitand Dies ist der bitweise "und" -Operator |
2 | bitor Dies ist der bitweise "oder" -Operator |
3 | bitxor Dies ist der bitweise "xor" oder Exclusive oder Operator |
Vorrang des Bedieners
Die folgende Tabelle zeigt die Operator-Priorität für die Rexx-Operatoren in der Reihenfolge der absteigenden Priorität ihrer Priorität.
Betreiber | Vorrang |
---|---|
Präfixoperatoren | + - \ |
Addition und Subtraktion | + - |
Vergleichsoperatoren | = ==> <> = <= |
Logisches UND | & |
Logisches ODER | | |
EXKLUSIV ODER | && |
Mit Arrays in einer beliebigen Programmiersprache können Sie eine Liste von Werten desselben Typs gruppieren. Die Verwendung von Arrays besteht darin, dass Sie eine Liste ähnlicher Wertetypen erstellen könnensortable, searchable und kann sein easily manipulated. Mit Rexx können auch Arrays definiert werden. Diese Arrays können eindimensional oder mehrdimensional sein.
Rexx-Arrays können spärlich sein. Das heißt, nicht jede Array-Position muss einen Wert haben oder sogar initialisiert werden. Zwischen denen, die Datenelemente enthalten, können leere Array-Positionen oder Slots stehen. Oder Arrays können dicht sein, in denen aufeinanderfolgende Array-Slots alle Datenelemente enthalten.
In vielen Programmiersprachen müssen Sie sich mit dem Index des ersten Eintrags in einer Tabelle befassen. Ist der erste numerische Index 0 oder 1? In Rexx ist der erste Index das, was Sie verwenden! Geben Sie also das erste Array-Element nach Belieben an Position 0 oder 1 ein.
array_name.0 = ‘first element’
oder
array_name.1 = ‘first element’
Schauen wir uns die verschiedenen Operationen an, die für Arrays verfügbar sind.
Arrays erstellen
Arrays werden mit derselben Namenskonvention erstellt, die für Variablen in Rexx verwendet wird.
Die allgemeine Syntax zum Erstellen von Arrays lautet wie folgt:
Arrayname.index = value
wo
Arrayname - Dies ist der Name des Arrays.
Index - Dies ist die Indexposition im Array, die auf ein bestimmtes Element verweist.
Value - Dies ist der Wert, der dem Indexelement im Array zugewiesen ist.
Ein Beispiel für eine Array-Deklaration lautet wie folgt:
Example
/* Main program */
list.1 = 0
list.2 = 0
list.3 = 0
Die folgenden Punkte müssen zum obigen Programm beachtet werden:
- Der Name des Arrays wird als Liste angegeben
- Es gibt 3 Elemente des Arrays, die auf den Wert 0 initialisiert werden.
Zuweisen von Werten zu einem Array-Element
Werte können Array-Elementen auf die gleiche Weise neu zugewiesen werden, wie Array-Elemente initialisiert werden.
Das folgende Programm ist ein Beispiel für Werte, die verschiedenen Indexwerten eines vorhandenen Arrays zugewiesen werden können.
/* Main program */
list.1 = 0
list.2 = 0
list.3 = 0
/* Assigning new values to the array*/
list.1 = 10
list.3 = 30
Anzeigen der Werte eines Arrays
Die Werte eines Arrays können unter Bezugnahme auf die Indexposition des Array-Elements angezeigt werden. Das folgende Beispiel zeigt den Zugriff auf verschiedene Elemente des Arrays.
Example
/* Main program */
list.1 = 0
list.2 = 0
list.3 = 0
/* Assigning new values to the array*/
list.1 = 10
list.3 = 30
say list.1
say list.2
say list.3
Die Ausgabe des obigen Programms wird wie folgt sein:
10
0
30
Arrays kopieren
Alle Elemente eines Arrays können auf ein anderes Array kopiert werden. Die allgemeine Syntax hierfür lautet wie folgt:
Newarray. = sourcearray.
wo
Newarray - Dies ist das neue Array, in das die Elemente kopiert werden müssen.
Sourcearray - Dies ist das Quellarray, aus dem die Elemente kopiert werden müssen.
Ein Beispiel dafür, wie die Kopiervorgänge für Arrays ausgeführt werden können, ist im folgenden Programm dargestellt:
Example
/* Main program */
list.1 = 0
list.2 = 0
list.3 = 0
/* Assigning new values to the array*/
list.1 = 10
list.3 = 30
listnew. = list.
say listnew.1
say listnew.2
say listnew.3
Die Ausgabe des obigen Programms ist -
10
0
30
Durch Array-Elemente iterieren
Elemente eines Arrays können auch mithilfe der in Rexx verfügbaren iterativen Anweisungen iteriert werden. Ein Beispiel dafür ist wie folgt:
Example
/* Main program */
list.1 = 10
list.2 = 20
list.3 = 30
number_of_elements = 3
do j = 1 to number_of_elements
say list.j
end
Die folgenden Hinweise müssen zum obigen Programm beachtet werden:
Das do loop wird verwendet, um die Array-Elemente zu durchlaufen.
Die Variable number_of_elements wird verwendet, um die Anzahl der Elemente im Array zu speichern.
Das variable j wird verwendet, um jedes Element des Arrays zu durchlaufen.
Die Ausgabe des obigen Programms ist -
10
20
30
Zweidimensionale Arrays
Es wurde auch erwähnt, dass wir in Rexx mehrdimensionale Arrays erstellen können. Schauen wir uns ein Beispiel an, wie wir ein zweidimensionales Array implementieren können.
Example
/* Main program */
list.1 = 10
list.1.1 = 11
list.1.2 = 12
say list.1
say list.1.1
say list.1.2
Die Ausgabe des obigen Programms wird wie folgt angezeigt:
10
11
12
Der folgende Punkt muss über das obige Programm beachtet werden:
Um ein mehrdimensionales Array zu erstellen, können wir eine andere Indizierungsebene verwenden. Also haben wir in unserem Beispiel verwendetlist.1.1 um ein weiteres inneres Array für den Indexwert 1 des Listenarrays zu erstellen.
Bisher haben wir Anweisungen gesehen, die nacheinander nacheinander ausgeführt wurden. Zusätzlich werden in Rexx Anweisungen bereitgestellt, um den Kontrollfluss in der Logik eines Programms zu ändern. Sie werden dann in einen Fluss von Kontrollanweisungen eingeteilt, die wir im Detail untersuchen werden.
Mit einer Schleifenanweisung können wir eine Anweisung oder eine Gruppe von Anweisungen mehrmals ausführen. Die folgende Abbildung ist die allgemeine Form einer Schleifenanweisung in den meisten Programmiersprachen.
Lassen Sie uns verschiedene von Rexx unterstützte Schleifen diskutieren.
Sr.Nr. | Schleifentyp & Beschreibung |
---|---|
1 | do loop Das do loopwird verwendet, um eine Anzahl von Anweisungen für eine bestimmte Anzahl von Malen auszuführen. Die Häufigkeit, mit der die Anweisung ausgeführt werden muss, wird durch den an die do-Schleife übergebenen Wert bestimmt. |
2 | do-while-Schleife Die do-while-Anweisung wird verwendet, um die einfache while-Schleife zu simulieren, die in anderen Programmiersprachen vorhanden ist. |
3 | Do-Till-Schleife Die do-till-Schleife ist eine geringfügige Variation der do while-Schleife. Diese Schleife variiert in der Tatsache, dass sie beendet wird, wenn die zu bewertende Bedingung falsch ist. |
Kontrollierte Wiederholung
Die do-Schleifen können für eine kontrollierte Wiederholung von Anweisungen vorgesehen werden.
Syntax
Die allgemeine Syntax dieser Art von Anweisung lautet wie folgt.
do index = start [to limit] [by increment] [for count]
statement #1
statement #2
end
Der Unterschied in dieser Anweisung besteht darin, dass es einen Index gibt, mit dem gesteuert wird, wie oft die Schleife ausgeführt wird. Zweitens gibt es Parameter, die den Wert angeben, mit dem der Index beginnen soll, wo er enden soll und wie hoch der Inkrementwert ist.
Flussdiagramm
Schauen wir uns das Flussdiagramm dieser Schleife an -
Aus dem obigen Diagramm können Sie deutlich erkennen, dass die Schleife basierend auf dem Indexwert ausgeführt wird und wie der Indexwert erhöht wird.
Das folgende Programm ist ein Beispiel für die kontrollierte Wiederholungsanweisung.
Beispiel
/* Main program */
do i = 0 to 5 by 2
say "hello"
end
Im obigen Programm ist der Wert des count iwird zuerst auf 0 gesetzt. Dann wird es in Zählungen von 2 erhöht, bis der Wert nicht größer als 5 ist.
Die Ausgabe des obigen Codes lautet -
hello
hello
hello
Entscheidungsstrukturen erfordern, dass der Programmierer eine oder mehrere Bedingungen angibt, die vom Programm bewertet oder getestet werden sollen.
Das folgende Diagramm zeigt die allgemeine Form einer typischen Entscheidungsstruktur, die in den meisten Programmiersprachen zu finden ist.
Es gibt eine Anweisung oder Anweisungen, die ausgeführt werden müssen, wenn die Bedingung bestimmt wird trueund optional andere Anweisungen, die ausgeführt werden sollen, wenn die Bedingung bestimmt wird false.
Schauen wir uns die verschiedenen Entscheidungserklärungen an, die in Rexx verfügbar sind.
Sr.Nr. | Aussage & Beschreibung |
---|---|
1 | If-Anweisung Die erste Entscheidungserklärung ist die ifErklärung. Einif Anweisung besteht aus einem Booleschen Ausdruck, gefolgt von einer oder mehreren Anweisungen. |
2 | If-else-Anweisung Die nächste Entscheidungserklärung ist die if-else-Anweisung. Einif Auf die Anweisung kann eine optionale else-Anweisung folgen, die ausgeführt wird, wenn der Boolesche Ausdruck false ist. |
Verschachtelte If-Anweisungen
Manchmal gibt es eine Anforderung zu haben multiple if statementsineinander eingebettet, wie es in anderen Programmiersprachen möglich ist. In Rexx ist dies ebenfalls möglich.
Syntax
if (condition1) then
do
#statement1
end
else
if (condition2) then
do
#statement2
end
Flussdiagramm
Das Flussdiagramm von verschachtelt if Aussagen ist wie folgt -
Nehmen wir ein Beispiel für verschachtelt if Aussage -
Beispiel
/* Main program */
i = 50
if (i < 10) then
do
say "i is less than 10"
end
else
if (i < 7) then
do
say "i is less than 7"
end
else
do
say "i is greater than 10"
end
Die Ausgabe des obigen Programms ist -
i is greater than 10
Wählen Sie Anweisungen
Rexx bietet die select-Anweisung an, mit der Ausdrücke basierend auf der Ausgabe der select-Anweisung ausgeführt werden können.
Syntax
Die allgemeine Form dieser Aussage ist -
select
when (condition#1) then
statement#1
when (condition#2) then
statement#2
otherwise
defaultstatement
end
Die allgemeine Funktionsweise dieser Aussage ist wie folgt:
Die select-Anweisung enthält eine Reihe von when-Anweisungen, um verschiedene Bedingungen zu bewerten.
Jeder when clause hat eine andere Bedingung, die ausgewertet werden muss und die nachfolgende Anweisung wird ausgeführt.
Die else-Anweisung wird verwendet, um eine Standardanweisung auszuführen, wenn die vorherigen Bedingungen dies nicht tun evaluate to true.
Flussdiagramm
Das Flussdiagramm der select Aussage ist wie folgt
Das folgende Programm ist ein Beispiel für die case-Anweisung in Rexx.
Beispiel
/* Main program */
i = 50
select
when(i <= 5) then
say "i is less than 5"
when(i <= 10) then
say "i is less than 10"
otherwise
say "i is greater than 10"
end
Die Ausgabe des obigen Programms wäre -
i is greater than 10
Rexx hat die folgenden Datentypen, wenn es um Zahlen geht.
Integer- Eine numerische Zeichenfolge, die keinen Dezimalpunkt oder Exponentenbezeichner enthält. Das erste Zeichen kann ein Pluszeichen (+) oder ein Minuszeichen (-) sein. Die dargestellte Nummer muss zwischen -2147483648 und 2147483647 einschließlich liegen.
Big Integer- Eine Zahlenfolge, die keinen Dezimalpunkt oder Exponentenbezeichner enthält. Das erste Zeichen kann ein Pluszeichen (+) oder ein Minuszeichen (-) sein. Die dargestellte Nummer muss zwischen -9223372036854775808 und 2147483648 einschließlich oder zwischen 2147483648 und 9223372036854775807 liegen.
Decimal - Eines der folgenden Formate -
Eine numerische Zeichenfolge, die einen Dezimalpunkt, aber keine Exponenten-ID enthält p repräsentiert die Präzision und sstellt die Skala der Dezimalzahl dar, die die Zeichenfolge darstellt. Das erste Zeichen kann ein Pluszeichen (+) oder ein Minuszeichen (-) sein.
Eine numerische Zeichenfolge, die keinen Dezimalpunkt oder Exponentenbezeichner enthält. Das erste Zeichen kann ein Pluszeichen (+) oder ein Minuszeichen (-) sein. Die dargestellte Zahl ist kleiner als -9223372036854775808 oder größer als 9223372036854775807.
Float- Eine Zeichenfolge, die eine Zahl in wissenschaftlicher Notation darstellt. Die Zeichenfolge besteht aus einer Reihe von Zahlen, gefolgt von einer Exponenten-ID (einem E oder e, gefolgt von einem optionalen Plus- (+) oder Minuszeichen (-) und einer Reihe von Zahlen). Die Zeichenfolge kann mit einem Pluszeichen (+) oder Minuszeichen (-) beginnen.
Schauen wir uns nun die verschiedenen an methods available for numbers.
Sr.Nr. | Für Zahlen verfügbare Methoden |
---|---|
1 | Abs Diese Methode gibt den absoluten Wert einer eingegebenen Nummer zurück. |
2 | MAX Diese Methode gibt den Maximalwert aus einer Liste von Zahlen zurück. |
3 | MINDEST Diese Methode gibt den Mindestwert aus einer Liste von Zahlen zurück. |
4 | ZUFÄLLIG Diese Methode gibt eine zufällig generierte Zahl zurück. |
5 | ZEICHEN Gibt 1 zurück, wenn die Zahl größer als 0 ist, oder 0, wenn die Zahl 0 ist, oder -1, wenn die Zahl kleiner als 0 ist. |
6 | TRUNC Diese Methode schneidet eine Zahl ab. |
Zeichenfolgen in Rexx werden durch eine Folge von Zeichen gekennzeichnet. Das folgende Programm ist ein Beispiel für Zeichenfolgen -
/* Main program */
a = "This is a string"
say a
Die Ausgabe des obigen Programms ist wie folgt:
This is a string
Lassen Sie uns einige Methoden diskutieren, die in Rexx für Zeichenfolgen verfügbar sind.
Sr.Nr. | In Rexx für Strings verfügbare Methoden |
---|---|
1 | links Diese Methode gibt eine bestimmte Anzahl von Zeichen links von der Zeichenfolge zurück. |
2 | Recht Diese Methode gibt eine bestimmte Anzahl von Zeichen rechts von der Zeichenfolge zurück. |
3 | Länge Diese Methode gibt die Anzahl der Zeichen in der Zeichenfolge zurück. |
4 | umkehren Diese Methode gibt die Zeichen in einem umgekehrten Format zurück. |
5 | vergleichen Sie Diese Methode vergleicht 2 Zeichenfolgen. Gibt "0" zurück, wenn "string1" und "string2" identisch sind. Andernfalls wird die Position des ersten Zeichens zurückgegeben, die nicht übereinstimmt. |
6 | Kopien Diese Methode kopiert a string n Anzahl. |
7 | substr Diese Methode ruft eine Teilzeichenfolge aus einer bestimmten Zeichenfolge ab. |
8 | pos Diese Methode gibt die Position einer Zeichenfolge innerhalb einer anderen zurück. |
9 | delstr Diese Methode löscht einen Teilstring aus einem String. |
Der Code in Rexx ist normalerweise in Funktionen und Unterprogramme unterteilt. Die Verwendung von Funktionen hilft bei der Trennung des Codes in viel mehr logische Einheiten. Schauen wir uns diese Funktionen im Detail an.
Funktion definieren
Die Syntax einer Funktionsdeklaration lautet wie folgt:
FunctionName:
PARSE ARG arguement1, arguement2… arguementN
Return value
Wo,
FunctionName - Dies ist der der Funktion zugewiesene Name.
PARSE ARG - Dies sind Schlüsselwörter in Rexx, mit denen erwähnt wird, dass Parameter an die Funktion übergeben werden.
arguement1, arguement2… arguementN - Dies sind die Argumente, die an die Funktion übergeben werden.
Return value - Dies ist der von der Funktion zurückgegebene Wert.
Das folgende Programm ist ein einfaches Beispiel für die Verwendung von Funktionen in Rexx.
/* Main program */
say add(5,6)
exit
add:
PARSE ARG a,b
return a + b
Die folgenden Dinge sollten über das obige Programm beachtet werden -
Wir definieren eine Funktion namens add, die 2 Parameter a und b akzeptiert.
Die Funktion verwendet die return-Anweisung, um die Summe von a und b zurückzugeben.
Die exit-Anweisung muss verwendet werden, um das Ende des Hauptprogramms anzuzeigen.
Die Ausgabe des obigen Programms wäre wie folgt:
11
Mit Argumenten arbeiten
In Rexx gibt es bestimmte Funktionen, mit denen mit Argumenten gearbeitet werden kann. Schauen wir uns einige solcher Argumente an.
arg
Diese Methode wird verwendet, um die Anzahl der für die Funktion definierten Argumente zurückzugeben.
Syntax - -
arg()
Parameters - Keine
Return Value - Diese Methode gibt die Anzahl der für die Funktion definierten Argumente zurück.
Example - -
/* Main program */
say add(5,6)
exit
add:
PARSE ARG a,b
say arg()
return a + b
Output - Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
2
11
arg (Index)
Diese Methode wird verwendet, um den Wert des Arguments an der bestimmten Position zurückzugeben.
Syntax - -
arg(index)
Parameter - -
Index - Indexposition des zurückzugebenden Arguments.
Return Value - Diese Methode gibt den Wert des Arguments an der spezifischen Position zurück.
Example - -
/* Main program */
say add(5,6)
exit
add:
PARSE ARG a,b
say arg(1)
return a + b
Output - Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
5
11
Rekursive Funktionen
Eine rekursive Funktion oder Routine ruft sich selbst auf. Jede rekursive Funktion kann auf herkömmliche nicht rekursive Weise (oder iterativ) codiert werden, aber manchmal bietet die Rekursion eine bessere Problemlösung. Nicht alle Programmiersprachen unterstützen die Rekursion. Rexx tut es.
Sehen wir uns ein Beispiel für das berühmte Fakultätsprogramm mit rekursiven Funktionen in Rexx an.
/* Main program */
do n = 1 to 5
say 'The factorial of' n 'is:' factorial( n )
end
return
/* Function to get factorial */
factorial : procedure
n = arg(1)
if n = 1 then
return 1
return n * factorial( n - 1 )
Die Ausgabe des obigen Programms ist wie folgt:
The factorial of 1 is: 1
The factorial of 2 is: 2
The factorial of 3 is: 6
The factorial of 3 is: 24
The factorial of 3 is: 120
Der Stapel wird manchmal als externe Datenwarteschlange bezeichnet, aber wir folgen der allgemeinen Verwendung und bezeichnen ihn als Stapel. Es ist ein Speicherblock, der logisch außerhalb von Rexx liegt. Anweisungen wie Push und Queue platzieren Daten in den Stapel, und Anweisungen wie Pull und Parse Pull extrahieren Daten daraus. Die integrierte Funktion in der Warteschlange gibt an, wie viele Elemente sich im Stapel befinden.
Schauen wir uns ein Beispiel für einen Stapel an.
/* STACK: */
/* */
/* This program shows how to use the Rexx Stack as either a */
/* stack or a queue. */
do j = 1 to 3
push ‘Stack: line #’ || j
/* push 3 lines onto the stack */
end
do j = 1 to queued()
/* retrieve and display LIFO */
pull line
say line
end
do j = 1 to 3 queue ‘Queue: line #’ || j
/* queue 3 lines onto the stack */
end
do queued()
/* retrieve and display FIFO */
pull line
say line
end
exit 0
Die erste do-Schleife im Programm platziert drei Datenzeilen auf dem Stapel. Dazu wird die Push-Anweisung verwendet. Wir nummerieren die Zeilen so, dass ihre Reihenfolge beim Abrufen in der LIFO-Reihenfolge ersichtlich ist.
Die durch die Push-Anweisung in den Stapel eingelegten Elemente werden in der LIFO-Reihenfolge abgerufen.
do j = 1 to 3
push ‘Stack: line #’ || j /* push 3 lines onto the stack */
end
Der nächste Codeblock zeigt die Verwendung der integrierten Funktion in der Warteschlange, um die Anzahl der Zeilen auf dem Stapel zu ermitteln, sowie eine Schleife, um alle Zeilen vom Stapel abzurufen.
do j = 1 to queued() /* retrieve and display LIFO */
pull line
say line
end
Da die drei Elemente per Push auf den Stapel gelegt wurden, werden sie in der LIFO-Reihenfolge abgerufen.
Die Ausgabe des obigen Programms ist wie folgt.
STACK: LINE #3
STACK: LINE #2
STACK: LINE #1
Rexx bietet eine Reihe von Methoden für die Arbeit mit E / A. Rexx bietet einfachere Klassen, um die folgenden Funktionen für Dateien bereitzustellen.
- Dateien lesen
- Schreiben in Dateien
- Überprüfen, ob eine Datei eine Datei oder ein Verzeichnis ist
Die in Rexx für Datei-E / A verfügbaren Funktionen basieren sowohl auf der Zeileneingabe als auch auf der Zeicheneingabe, und wir werden uns die für beide verfügbaren Funktionen im Detail ansehen.
Lassen Sie uns einige der Dateivorgänge untersuchen, die Rexx zu bieten hat. Für die Zwecke dieser Beispiele wird angenommen, dass eine Datei mit dem Namen vorhanden istNewFile.txt welches die folgenden Textzeilen enthält -
Example1
Example2
Example3
Diese Datei wird in den folgenden Beispielen für die Lese- und Schreibvorgänge verwendet. Hier werden wir diskutieren, wie der Inhalt einer Datei auf verschiedene Arten gelesen werden kann.
Lesen des Inhalts einer Datei zeilenweise
Die allgemeinen Operationen an Dateien werden mit den in der Rexx-Bibliothek selbst verfügbaren Methoden ausgeführt. Das Lesen von Dateien ist die einfachste aller Operationen in Rexx.
Schauen wir uns die Funktion an, mit der dies erreicht wurde.
linein
Diese Methode gibt eine Zeile aus der Textdatei zurück. Die Textdatei ist der Dateiname, der als Eingabeparameter für die Funktion bereitgestellt wird.
Syntax - -
linein(filename)
Parameter - -
filename - Dies ist der Name der Datei, aus der die Zeile gelesen werden muss.
Return Value - Diese Methode gibt jeweils eine Zeile der Datei zurück.
Example - -
/* Main program */
line_str = linein(Example.txt)
say line_str
Der obige Code ist ziemlich einfach in der Tatsache, dass die Example.txtDer Dateiname wird der Linein-Funktion zur Verfügung gestellt. Diese Funktion liest dann eine Textzeile und liefert das Ergebnis an die Variableline_str.
Output - Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
Example1
Lesen des Inhalts einer Datei auf einmal
In Rexx kann das Lesen des gesamten Inhalts einer Datei mithilfe der while-Anweisung erreicht werden. Die while-Anweisung liest jede Zeile nacheinander, bis das Ende der Datei erreicht ist.
Ein Beispiel, wie dies erreicht werden kann, ist unten gezeigt.
/* Main program */
do while lines(Example.txt) > 0
line_str = linein(Example.txt)
say line_str
end
Im obigen Programm müssen die folgenden Dinge beachtet werden:
Die Linienfunktion liest die Example.txt Datei.
Mit der while-Funktion wird überprüft, ob weitere Zeilen in der Datei Example.txt vorhanden sind.
Für jede aus der Datei gelesene Zeile wird die line_strVariable enthält den Wert der aktuellen Zeile. Dies wird dann als Ausgabe an die Konsole gesendet.
Output - Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
Example1
Example2
Example3
Schreiben von Inhalten in eine Datei
Genau wie das Lesen von Dateien kann Rexx auch in Dateien schreiben. Schauen wir uns die Funktion an, mit der dies erreicht wird.
Lineout
Diese Methode schreibt eine Zeile in eine Datei. Die Datei, in die die Zeile geschrieben werden soll, wird als Parameter für die Lineout-Anweisung bereitgestellt.
Syntax - -
lineout(filename)
Parameter - -
filename - Dies ist der Name der Datei, in die die Zeile geschrieben werden soll.
Return Value- Diese Methode gibt den Status der Lineout-Funktion zurück. Der zurückgegebene Wert ist 0, wenn die Zeile erfolgreich geschrieben wurde. Andernfalls wird der Wert 1 zurückgegeben.
Example - -
/* Main program */
out = lineout(Example.txt,"Example4")
Output - Immer wenn der obige Code ausgeführt wird, wird die Zeile "Beispiel4" in die Datei geschrieben Example.txt.
In diesem Kapitel werden einige der anderen Funktionen erläutert, die für Dateien verfügbar sind.
Sr.Nr. | Funktionen für Dateien |
---|---|
1 | Linien Diese Funktion gibt entweder den Wert 1 oder die Anzahl der Zeilen zurück, die zum Einlesen eines Eingabestreams übrig sind. Der Dateiname wird als Eingabe für die Funktion angegeben. |
2 | Strom Mit dieser Funktion wird der Status einer Datei überprüft. Manchmal ist es erforderlich, den Status einer Datei zu überprüfen, bevor sie verwendet wird. Wenn die Datei beschädigt oder nicht verfügbar ist, können keine weiteren Vorgänge für die Datei ausgeführt werden. Daher ist es sinnvoller, zuerst den Status der Datei zu überprüfen. |
3 | charin Diese Funktion wird verwendet, um jeweils ein Zeichen aus einer Datei zu lesen. Manchmal müssen Programme Dateien zeichenweise lesen, und daher kann diese Funktion für diesen Zweck verwendet werden. |
4 | Zeichen Diese Funktion gibt entweder 1 oder die Anzahl der Zeichen zurück, die noch in die Datei selbst eingelesen werden müssen. Der Dateiname wird als Parameter für die Funktion angegeben. |
5 | charout Mit dieser Funktion wird jeweils ein Zeichen in eine Datei geschrieben. Der Dateiname wird als Parameter für die Funktion eingegeben. |
In jeder Programmiersprache ist das gesamte Programm in logische Module unterteilt. Dies erleichtert das Schreiben von Code, der einfach gewartet werden kann. Dies ist eine Grundvoraussetzung für jede Programmiersprache.
In Rexx können Module mithilfe von Unterprogrammen und Funktionen geschrieben werden. Schauen wir uns die Unterprogramme im Detail an.
Unterprogramm definieren
Die Syntax einer Funktionsdeklaration lautet wie folgt:
FunctionName:
Statement#1
Statement#2
….
Statement#N
Wo,
FunctionName - Dies ist der Name, der dem Unterprogramm zugewiesen ist.
Statement#1 .. Statement#N - Dies ist die Liste der Anweisungen, aus denen das Unterprogramm besteht.
Das folgende Programm ist ein einfaches Beispiel für die Verwendung von Unterprogrammen.
/* Main program */
call add
exit
add:
a = 5
b = 10
c = a + b
say c
Die folgenden Dinge sollten über das obige Programm beachtet werden -
Wir definieren eine Unterroutine namens add.
Das Unterprogramm führt eine einfache Funktion zum Hinzufügen aus.
Die exit-Anweisung muss verwendet werden, um das Ende des Hauptprogramms anzuzeigen.
Die Ausgabe des obigen Programms wäre wie folgt:
15
Mit Argumenten arbeiten
Es ist auch möglich, mit Argumenten in Rexx zu arbeiten. Das folgende Beispiel zeigt, wie dies erreicht werden kann.
/* Main program */
call add 1,2
exit
add:
PARSE ARG a,b
c = a + b
say c
Die folgenden Dinge sollten über das obige Programm beachtet werden -
Wir definieren eine Unterroutine namens add, die 2 Parameter annimmt.
In den Unterprogrammen werden die beiden Parameter mit den Schlüsselwörtern PARSE und ARG analysiert.
Die Ausgabe des obigen Programms wäre wie folgt:
3
Verschiedene Methoden für Argumente
Schauen wir uns einige andere Methoden an, die für Argumente verfügbar sind.
arg
Diese Methode wird verwendet, um die Anzahl der für das Unterprogramm definierten Argumente zurückzugeben.
Syntax - -
arg()
Parameters - Keine
Return Value - Diese Methode gibt die Anzahl der für das Unterprogramm definierten Argumente zurück.
Example - -
/* Main program */
call add 1,2
exit
add:
PARSE ARG a,b
say arg()
c = a + b
say c
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
2
3
arg (Index)
Diese Methode wird verwendet, um den Wert des Arguments an der bestimmten Position zurückzugeben.
Syntax - -
arg(index)
Parameters
Index - Indexposition des zurückzugebenden Arguments.
Return Value - Diese Methode gibt den Wert des Arguments an der spezifischen Position zurück.
Example - -
/* Main program */
call add 1,2
exit
add:
PARSE ARG a,b
say arg(1)
c = a + b
say c
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
1
3
Jede Programmiersprache verfügt über einige integrierte Funktionen, die dem Programmierer bei Routineaufgaben helfen. Rexx hat auch viele eingebaute Funktionen.
Schauen wir uns all diese Funktionen an, die in Rexx verfügbar sind.
Sr.Nr. | In Rexx verfügbare Funktionen |
---|---|
1 | ADRESSE Diese Methode gibt den Namen der Umgebung zurück, in der die Rexx-Befehle derzeit ausgeführt werden. |
2 | PIEP Diese Methode erzeugt einen Ton im System mit einer bestimmten Frequenz und Dauer. |
3 | Datentyp Diese Methode gibt den Wert von 'NUM' zurück, wenn die Eingabe eine gültige Zahl ist, andernfalls wird der Wert von 'CHAR' zurückgegeben. Sie können auch angeben, ob Sie den Eingabewert mit einem NUM- oder CHAR-Wert vergleichen möchten. In jedem Fall ist der zurückgegebene Wert je nach Ergebnis entweder 1 oder 0. |
4 | DATUM Diese Methode gibt das lokale Datum im folgenden Format zurück. |
5 | Ziffern Diese Methode gibt die aktuelle Einstellung von NUMERIC DIGITS zurück, wie sie im aktuellen System definiert ist. |
6 | FEHLERBEHEBUNG Diese Methode gibt die Rexx-Fehlermeldung zurück, die der Fehlernummer 'errorno' zugeordnet ist. Bitte beachten Sie, dass die Fehlernummer einen Wert zwischen 0 und 99 haben muss. Dies ist nützlich, wenn Ihr Programm einen Fehlercode zurückgegeben hat und Sie wissen möchten, was der Fehlercode bedeutet. |
7 | BILDEN Diese Methode gibt die aktuelle Einstellung von 'NUMERIC FORM' zurück, mit der mathematische Berechnungen auf dem System durchgeführt werden. |
8 | ZEIT Diese Methode gibt die Ortszeit im 24-Stunden-Format zurück, wie im folgenden Programm gezeigt. |
9 | BENUTZERIDENTIFIKATION Diese Methode gibt die aktuelle Benutzer-ID zurück, die im System angemeldet ist. |
10 | XRANGE Diese Methode gibt die Zeichen in dem durch das Start- und Endzeichen angegebenen Bereich zurück. |
11 | X2D Diese Methode gibt die Dezimalumrechnung von a zurück hexstring value. |
12 | X2C Diese Methode gibt die Zeichenkonvertierung eines Hexstring-Werts zurück. |
Einer der größten Vorteile von Rexx ist die Möglichkeit, wiederverwendbare Skripte zu erstellen. Heutzutage ist es in Unternehmen häufig ein großer Mehrwert, wiederverwendbare Skripte zu haben, um Zeit für häufig wiederkehrende Aufgaben zu sparen.
Beispielsweise müssen Technologieteams in einer IT-Organisation möglicherweise über Skripte verfügen, die allgemeine Alltagsaufgaben ausführen. Diese Aufgaben können die Interaktion mit den Betriebssystemen umfassen. Diese Skripte können dann so programmiert werden, dass sie fehlerhafte Rückkehrcodes oder Fehler behandeln.
Rexx bietet viele Systembefehle, mit denen sich wiederholende Aufgaben ausführen können. Schauen wir uns einige der in Rexx verfügbaren Systembefehle an.
dir
Dies ist der normale Verzeichnislistenbefehl, der in Windows verwendet wird.
Syntax
dir
Parameter
Keiner
Rückgabewert
Diese Methode gibt die aktuelle Verzeichnisliste auf dem System zurück.
Beispiel
/* Main program */
dir
Die Ausgabe hängt vom Verzeichnis im System ab.
Das folgende Programm ist nur ein Beispiel.
Ausgabe
Volume in drive D is LENOVO
Volume Serial Number is BAC9-9E3F
Directory of D:\
04/06/2016 12:52 AM 268,205 100008676689.pdf
10/20/2015 08:51 PM <DIR> data
06/01/2016 10:23 AM 31 Example.txt
10/28/2014 06:55 PM <DIR> Intel
06/02/2016 11:15 AM 23 main.rexx
12/22/2014 08:49 AM <DIR> PerfLogs
12/13/2015 11:45 PM <DIR> Program Files
12/24/2015 10:26 AM <DIR> Program Files (x86)
07/17/2015 01:21 AM <DIR> Users
12/23/2015 10:01 AM <DIR> Windows
3 File(s) 268,259 bytes
7 Dir(s) 202,567,680 bytes free
Ein weiteres Beispiel für die dir commandwird im folgenden Programm gezeigt. Nur dieses Mal nutzen wir diespecial rc variable. Diese Variable ist in Rexx speziell und gibt Ihnen den Status der Ausführung von Systembefehlen. Wenn der zurückgegebene Wert 0 ist, bedeutet dies, dass der Befehl erfolgreich ausgeführt wurde. Andernfalls wird die Fehlernummer im Namen der RC-Variablen angegeben.
Beispiel
/* Main program */
dir
if rc = 0 then
say 'The command executed successfully'
else
say 'The command failed, The error code is =' rc
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
Ausgabe
The command failed, The error code is = 127
Umleitungsbefehle
Rexx hat auch die Möglichkeit, Umleitungsbefehle zu verwenden. Die folgenden Umleitungsbefehle sind in Rexx verfügbar.
< - Mit diesem Befehl wird die Eingabe aufgenommen, die aus einer Datei stammt.
>- Mit diesem Befehl wird der Inhalt in eine Datei ausgegeben. Wenn die Datei vorhanden ist, wird sie überschrieben.
>>- Dies wird auch verwendet, um den Inhalt in eine Datei auszugeben. Die Ausgabe wird jedoch am Ende der Datei hinzugefügt, um den vorhandenen Inhalt der Datei beizubehalten.
Schauen wir uns ein Beispiel an, wie wir Umleitungsbefehle verwenden können. Im folgenden Beispiel verwenden wir den Befehl sort, um eine aufgerufene Datei zu sortierensortin.txt. Die Daten aus der Datei werden an den Sortierbefehl gesendet. Die Ausgabe des Befehls sort wird dann an die Datei sortout.txt gesendet.
Beispiel
/* Main program */
'sort <sortin.txt> sortout.txt'
Angenommen, die Datei sortin.txt enthält die folgenden Daten.
Ausgabe
b
c
a
Die Datei sortout.txt wird dann die folgenden Daten haben.
a
b
c
Die ADRESS-Funktion
Diese Methode wird verwendet, um herauszufinden, welche Standardumgebung für die Eingabe-, Fehler- und Ausgabestreams verwendet wird.
Syntax
ADDRESS(options)
Parameter
Optionen für die Adresse eines bestimmten Systems.
Rückgabewert
Diese Methode gibt den Namen der Umgebung für die Streams Input, Error und Output zurück.
Beispiel
/* Main program */
say ADDRESS('I')
say ADDRESS('O')
say ADDRESS('E')
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
Ausgabe
INPUT NORMAL
REPLACE NORMAL
REPLACE NORMAL
XML ist eine tragbare Open-Source-Sprache, mit der Programmierer Anwendungen entwickeln können, die von anderen Anwendungen gelesen werden können, unabhängig vom Betriebssystem und / oder der Entwicklungssprache. Dies ist eine der am häufigsten verwendeten Sprachen für den Datenaustausch zwischen Anwendungen.
Was ist XML?
Die XML-Erweiterungssprache ist eine Auszeichnungssprache, die HTML oder SGML sehr ähnlich ist. Dies wird vom World Wide Web Consortium empfohlen und ist als offener Standard verfügbar. XML ist äußerst nützlich, um kleine bis mittlere Datenmengen zu verfolgen, ohne ein SQL-basiertes Backbone zu benötigen.
Verwenden wir für alle unsere XML-Codebeispiele die folgende einfache XML-Datei movies.xml zum Erstellen der XML-Datei und zum anschließenden Lesen der Datei.
<collection shelf = "New Arrivals">
<movie title = "Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
<movie title = "Transformers">
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>8</stars>
<description>A schientific fiction</description>
</movie>
<movie title = "Trigun">
<type>Anime, Action</type>
<format>DVD</format>
<year>1986</year>
<rating>PG</rating>
<stars>10</stars>
<description>Vash the Stam pede!</description>
</movie>
<movie title = "Ishtar">
<type>Comedy</type>
<format>VHS</format>
<year>1987</year>
<rating>PG</rating>
<stars>2</stars>
<description>Viewable boredom </description>
</movie>
</collection>
Anfangen
Standardmäßig ist die XML-Funktionalität nicht im Rexx-Interpreter enthalten. Um mit XML in Rexx arbeiten zu können, müssen die folgenden Schritte ausgeführt werden.
Laden Sie die folgenden Dateien herunter -
Rexxxml - www.interlog.com/~ptjm/
Libxml2 - www.ctindustries.net/libxml/
iconv-1.9.2.win32 - www.xmlsoft.org/sources/win32/oldreleases/
libxslt-1.1.26.win32 - www.xmlsoft.org/sources/win32/oldreleases/
Extrahieren Sie alle Dateien und stellen Sie sicher, dass sie im Systempfad enthalten sind.
Laden von XML-Funktionen
Nachdem alle Dateien im obigen Abschnitt heruntergeladen und erfolgreich registriert wurden, besteht der nächste Schritt darin, den Code zum Laden der Rexx-XML-Funktionen zu schreiben. Dies erfolgt mit dem folgenden Code.
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
Die folgenden Dinge können über das obige Programm bemerkt werden -
Die Funktion rxfuncaddwird zum Laden externer Bibliotheken verwendet. Dasxmlloadfuncs Funktion wird verwendet, um alle Bibliotheken in der zu laden rexxxml Datei in den Speicher.
Wenn der Wert von rcc <> 0 ist, würde dies zu einem Fehler führen. Dafür können wir die anrufenrxfuncerrmsg um uns weitere Details zur Fehlermeldung zu geben.
Wir rufen endlich an xmlloadfuncs, sodass jetzt alle XML-bezogenen Funktionen im Rexx-Programm aktiviert werden können.
Schauen wir uns die verschiedenen an methods available for XML in Rexx.
xmlVersion
Diese Methode gibt die Version der auf dem System verwendeten XML- und XSLT-Bibliotheken zurück.
Syntax
xmlVersion()
Parameter
Keiner
Rückgabewert
Diese Methode gibt die Version der auf dem System verwendeten XML- und XSLT-Bibliotheken zurück.
Beispiel
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
say xmlVersion()
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis. Dies hängt wiederum von der Version der XML-Bibliotheken ab, die auf dem System verwendet werden.
Ausgabe
1.0.0 20631 10126
xmlParseXML
Diese Funktion wird verwendet, um die an die Funktion gesendeten XML-Daten zu analysieren. Der Dokumentbaum wird von der Funktion zurückgegeben.
Syntax
xmlParseXML(filename)
Parameter
Filename - Dies ist der Name der XML-Datei, die analysiert werden muss.
Rückgabewert
Der Dokumentbaum wird von der Funktion zurückgegeben. Andernfalls wird 0 zurückgegeben, wenn ein Fehler vorliegt.
Beispiel
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
say xmlVersion()
sw = xmlParseXML('test.xml')
Ausgabe
Keine allgemeine Ausgabe.
xmlFindNode
Diese Methode wertet die aus XPath expressionan ihn weitergegeben. Dies wird zum Parsen des Dokumentbaums verwendet, um a zu erhaltennodeset die weiter verarbeitet werden kann.
Syntax
xmlParseXML(XPath,document)
Parameter
XPath - Dies ist der Pfad des Knotens in der XML-Datei.
document - Dies ist das XML-Dokument
Rückgabewert
Wertet den XPath-Ausdruck aus und gibt das Ergebnis als Knotensatz zurück, der später verwendet werden kann.
Beispiel
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
say xmlVersion()
document = xmlParseXML('test.xml')
nodeset = xmlFindNode('//movie', document)
say xmlNodesetCount(nodeset)
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
Ausgabe
4
Die Ausgabe zeigt die Anzahl der Filmknoten in unserer XML-Liste
xmlEvalExpression
Die folgende Methode wird verwendet, um einen XPath-Ausdruck auszuwerten und als Ergebnis eine Zeichenfolge zurückzugeben.
Syntax
xmlParseXML(XPath,Node)
Parameter
XPath - Dies ist der Pfad des Knotens in der XML-Datei.
document - Das spezifische Knotenelement.
Rückgabewert
Eine Zeichenfolge wird basierend auf dem an sie gesendeten XPath-Ausdruck zurückgegeben.
Beispiel
rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs')
if rcc then do
say rxfuncerrmsg()
exit 1
end
call xmlloadfuncs
document = xmlParseXML('test.xml')
nodeset = xmlFindNode('//movie', document)
do j = 1 to xmlNodesetCount(nodeset)
value = xmlEvalExpression('type', xmlNodesetItem(nodeset, j))
say value
end
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
Ausgabe
War, Thriller
Anime, Science Fiction
Anime, Action
Comedy
Regina ist ein weiterer Rexx-Interpreter, mit dem Rexx-Programme kompiliert und ausgeführt werden können. Die offizielle Seite für Regina ist - www.regina-rexx.sourceforge.net/
Einige der Vorteile der Verwendung von Regina sind folgende:
Regina kann auf jeder Plattform ausgeführt werden, egal ob Windows, Linux oder Mac OS.
Regina arbeitet nach allen verfügbaren Standards.
Regina hat eine große Community und daher stehen Regina viele Foren und Lernmaterialien zur Verfügung.
Regina verfügt über viele Tools zum Schreiben und Testen von Rexx-Programmen.
In Regina können Sie Befehle ausführen, die im Standard-Rexx-Interpreter nicht möglich sind. Wenn Sie beispielsweise bestimmte Konfigurationseinstellungen angeben, können Sie grundlegende Befehle auf Systemebene ausführen, was in Rexx nicht möglich ist.
Wenn Sie Rexx über die in dokumentierte Installation installieren Chapter 2 – Rexx Environmentwird der Regina-Interpreter mit installiert.
Schauen wir uns nun einige der gängigen Methoden an, die bei der Verwendung von Regina verfügbar sind. Diese Funktionen sind die erweiterten Funktionen, die bei normalem Gebrauch nicht verfügbar sind.
Um die erweiterten Funktionen nutzen zu können, müssen Sie die folgende Codezeile einfügen. Dies ermöglicht die Verwendung erweiterter Regina-Funktionen.
options arexx_bifs
Verwenden Sie zweitens den folgenden Befehl, während Sie alle Rexx-Programme ausführen.
regina main.rexx
Where,
regina - Dies ist der Interpreter, der für Rexx-Programme verwendet wird.
main.rexx - Ihr Rexx-Programm.
Wir werden nun die verschiedenen im Detail diskutieren functions of Regina Rexx Interpreter.
Sr.Nr. | Funktionen von Regina Rexx Interpreter |
---|---|
1 | b2c Diese Methode wird verwendet, um einen Binärwert in einen Zeichenfolgenwert umzuwandeln. |
2 | bitcomp Die Methode wird verwendet, um 2-Bit-Zeichenfolgen Stück für Stück zu vergleichen. |
3 | bittst Diese Methode wird verwendet, um den Status des angegebenen Bits in der Bitfolge anzuzeigen. |
4 | finden Diese Methode wird verwendet, um nach dem ersten Auftreten einer Zeichenfolge in einer anderen Zeichenfolge zu suchen. |
5 | getenv Diese Methode gibt den Wert einer Umgebungsvariablen auf dem System zurück. |
6 | getpid Diese Methode wird verwendet, um den Wert der aktuell ausgeführten Prozess-ID abzurufen. |
7 | Hash Diese Methode gibt das Hash-Attribut einer Zeichenfolge als Dezimalzahl zurück. Außerdem wird der interne Hashwert der Zeichenfolge aktualisiert. |
8 | rechtfertigen Diese Methode wird verwendet, um den Wert einer Zeichenfolge basierend auf dem Längenwert zu begründen oder zu kürzen. |
9 | putenv Diese Methode wird verwendet, um den Wert einer Umgebungsvariablen festzulegen. |
10 | Verzeichnis Diese Methode ruft den Wert des aktuellen Verzeichnisses auf dem System ab. |
11 | chdir Diese Methode ändert den Wert des aktuellen Arbeitsverzeichnisses auf dem System. |
12 | Randu Diese Methode gibt eine Pseudozufallszahl zwischen 0 und 1 zurück. |
Eine der leistungsstärksten Funktionen von Rexx ist die Fähigkeit, Textwerte zu analysieren. Sie werden dies wahrscheinlich in keiner anderen Programmiersprache sehen.
Das allgemeine Format der Parse-Anweisung lautet wie folgt:
Syntax
PARSE {UPPER|LOWER|CASELESS} source {template}
Where,
UPPER - Die Quelle wird vor dem Parsen in Großbuchstaben konvertiert.
LOWER - Die Quelle wird vor dem Parsen in Kleinbuchstaben konvertiert.
CASELESS - Wenn dieser Parameter übergeben wird, wird das Gehäuse ignoriert.
source- Dies ist die Quelle, die analysiert werden muss. Hierfür stehen viele Optionen zur Verfügung, die eine der folgenden sein können:
ARG - Die Argumente für das Programm oder die Prozedur können als Quelle verwendet werden.
LINEIN - Der nächste Zeileneingang kann als Quelle verwendet werden.
SOURCE - Die Quellinformationen des Programms können als Quelle verwendet werden.
VAR name - Der Wert eines Variablennamens kann als Quelle verwendet werden.
template- Dieser Parameter gibt an, wie die Quelle analysiert werden soll. Hierfür stehen viele Optionen zur Verfügung. Einige von ihnen sind unten erwähnt.
variable name - Dies ist der der Variablen zugewiesene Wert.
literal string - Eine wörtliche Zeichenfolge, mit der ein Muster zum Teilen der Zeichenfolge verwendet werden kann.
#- Eine absolute Zeichenposition innerhalb der Quelle. Wenn Sie also einen Wert von 5 angeben, wird das 5 - ten Zeichen verwendet werden.
+#- Eine relative Zeichenposition innerhalb der Quelle. Wenn Sie also einen Wert von 5 angeben, die 5 th Charakter relativ verwendet werden.
Schauen wir uns ein einfaches Beispiel an, wie das Parsen in Rexx durchgeführt werden kann.
Beispiel
/* Main program */
parse value 'This is a Tutorial' with word1 word2 word3 word4
say "'"word1"'"
say "'"word2"'"
say "'"word3"'"
say "'"word4"'"
Das obige Programm analysiert die Wörter in der Phrase. Wenn ein Wert aus Wörtern besteht, die nur durch ein Leerzeichen getrennt sind und keine führenden oder nachfolgenden Leerzeichen vorhanden sind, kann der Wert wie folgt leicht in eine bekannte Anzahl von Wörtern analysiert werden.
Die Analysefunktion wird in Rexx verwendet, um einen Zeichenfolgenwert zu nehmen und ihn dann in Wörter zu zerlegen. Im obigen Beispiel werden die Wörter dann aufgeteilt und dann in den Wortvariablen gespeichert.
Die Ausgabe des obigen Programms wäre wie folgt:
'This'
'is'
'a'
'Tutorial'
Ein weiteres Beispiel für das Parsen wird im folgenden Programm gezeigt. Dieses Mal verwenden wir eine while-Klausel, um das Parsen durchzuführen.
Beispiel
/* Main program */
phrase = 'This is a Tutorial'
do while phrase <> ''
parse var phrase word phrase
say "'"word"'"
end
Das obige Programm gibt die folgende Ausgabe aus -
'This'
'is'
'a'
'Tutorial'
Positionsanalyse
Mit Rexx kann man auch mit Positionsanalyse arbeiten. Sehen wir uns ein Beispiel an, wie wir mit der parse-Anweisung eine Positionsanalyse erreichen können.
Beispiel
/* Main program */
testString = "Doe John M. 03/03/78 Mumbai India";
parse var testString name1 11 name2 21 birthday 31 town 51 country
say name1
say name2
say birthday
say town
say country
Aus dem obigen Beispiel können Sie ersehen, dass wir neben dem Variablennamen auch angeben, wo die Zeichenfolge enden soll. Für name1 sollten wir also mit dem 11. Zeichen enden und dann mit dem Parsen von name2 beginnen.
Die Ausgabe des obigen Programms wird wie folgt sein:
Doe
John M.
03/03/78
Mumbai
India
Sie können auch verwenden relative positional parsing in diesem Fall.
Beispiel
/* Main program */
testString = "Doe John M. 03/03/78 Mumbai India";
parse var testString name1 +10 name2 +10 birthday +10 town +20 country
say name1
say name2
say birthday
say town
say country
Die Ausgabe des obigen Programms erfolgt wie unten gezeigt.
Doe
John M.
03/03/78
Mumbai
India
In Rexx wird der Signalbefehl im Allgemeinen für zwei Zwecke verwendet:
Eine besteht darin, die Kontrolle auf einen anderen Teil des Programms zu übertragen. Dies entspricht normalerweise dem Go-to-Label, das in anderen Programmiersprachen verwendet wird.
Das andere ist, zu einem bestimmten Trap-Label zu gehen.
Wenn der Signalbefehl in einem der folgenden Befehlsbefehle verwendet wird, werden die anstehenden Steuerstrukturen automatisch deaktiviert.
wenn ... dann ... sonst ...
tun ... enden
do i = 1 bis n ... end [und ähnliche do-Schleifen]
Wählen Sie wann ... dann ... ... usw. sonst ... ende
Die allgemeine Syntax der Signalanweisung wird wie folgt angezeigt:
Syntax
signal labelName
signal [ VALUE ] labelExpression
Schauen wir uns ein Beispiel für die Verwendung der Signalanweisung an.
Beispiel
/* Main program */
n = 100.45
if \ datatype( n, wholenumber ) then
signal msg
say 'This is a whole number'
return 0
msg :
say 'This is an incorrect number'
Die Ausgabe des obigen Programms erfolgt wie unten gezeigt.
Ausgabe
This is an incorrect number.
Wenn Sie den Wert der Variablen n in eine ganze Zahl ändern, wie im folgenden Programm gezeigt -
/* Main program */
n = 100
if \ datatype( n, wholenumber ) then
signal msg
say ' This is a whole number '
return 0
msg :
say ' This is an incorrect number '
Sie erhalten folgende Ausgabe:
This is a whole number
Man kann auch auf den Wert des Etiketts übertragen, wie im folgenden Programm gezeigt -
/* Main program */
n = 1
if \ datatype( n, wholenumber ) then
signal msg
if n < 1 | n > 3 then
signal msg
signal value n
3 : say 'This is the number 3'
2 : say ' This is the number 2'
1 : say ' This is the number 1'
return n
msg :
say ' This is an incorrect number '
exit 99
Die Ausgabe des obigen Programms wird wie folgt angezeigt:
This is the number 1
Aktivierung / Deaktivierung der Trap-Label-Übertragung
Wie bereits erwähnt, kann der Signalbefehl auch verwendet werden, um die Steuerung auf ein Trap-Label zu übertragen.
Die allgemeine Syntax der Trap-Label-Übertragung lautet wie folgt:
Syntax
signal ON conditionName [ NAME Label ]
signal OFF conditionName
Wo,
conditionName - Dies ist der Zustand, für den das Signal entweder ein- oder ausgeschaltet werden soll.
Label - Die optionale Bezeichnung, auf die das Programm umgeleitet werden soll.
Sehen wir uns ein Beispiel für die Verwendung einer Trap-Label-Übertragung an.
Beispiel
/* Main program */
signal on error
signal on failure
signal on syntax
signal on novalue
beep(1)
signal off error
signal off failure
signal off syntax
signal off novalue
exit 0
error: failure: syntax: novalue:
say 'An error has occured'
Im obigen Beispiel schalten wir zuerst die Fehlersignale ein. Wir fügen dann eine Anweisung hinzu, die zu einem Fehler führt. Wir haben dann das Fehlerfallen-Label, um eine benutzerdefinierte Fehlermeldung anzuzeigen.
Die Ausgabe des obigen Programms erfolgt wie folgt:
An error has occurred.
Das Debuggen ist eine wichtige Funktion in jeder Programmiersprache. Es hilft dem Entwickler, Fehler zu diagnostizieren, die Grundursache zu finden und sie dann entsprechend zu beheben. In Rexx wird das Trace-Dienstprogramm zum Debuggen verwendet. Der Trace-Befehl kann auf zwei Arten implementiert werden: der Batch-Modus und der interaktive Modus. Schauen wir uns an, wie beide Optionen implementiert werden.
Trace im Batch-Modus
Der Befehl trace wird verwendet, um eine detaillierte Ebene jedes ausgeführten Rexx-Befehls anzugeben.
Die allgemeine Syntax der Trace-Anweisung wird wie folgt angezeigt:
Syntax
trace [setting]
Wo die Einstellung eine der folgenden Optionen sein kann -
A - Verfolgt alle Befehle.
C - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet werden.
E - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet wurden und zu einem Fehler geführt haben.
F - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet wurden und zu einem Fehler geführt haben.
I - Dies bietet eine Zwischenverfolgung von Rexx-Befehlen auf mittlerer Ebene.
L - Diese Option ist verfügbar, wenn Sie die Ablaufverfolgung während des Vorgangs kennzeichnen möchten.
N - Dies ist die Standardoption, bei der keine Ablaufverfolgung erfolgt.
Schauen wir uns ein Beispiel für den Befehl trace an.
Beispiel
/* Main program */
trace A
/* Main program */
n = 100.45 if datatype( n, wholenumber ) then signal msg
say 'This is a whole number'
return 0
msg :
say ' This is an incorrect number '
Die Ausgabe des obigen Programms wird wie folgt sein:
5 *-* n = 100.45 if datatype( n, wholenumber ) then signal msg
7 *-* say 'This is a whole number
This is a whole number
8 *-* return 0
An der Ausgabe können Sie erkennen, dass der Ausgabe des Programms eine zusätzliche Ablaufverfolgung hinzugefügt wurde. Die folgenden Dinge können über die Ausgabe bemerkt werden -
Die Zeilennummer wird zusammen mit der ausgeführten Anweisung zur Trace-Ausgabe hinzugefügt.
Jede Zeile, die ausgeführt wird, wird in der Trace-Ausgabe angezeigt.
Trace-Funktion
Trace kann auch mit Hilfe der Trace-Funktion aktiviert werden. Die allgemeine Syntax und das Beispiel sind unten aufgeführt.
Syntax
trace()
Die obige Funktion gibt den aktuellen Trace-Level zurück.
Parameter
Keiner
Rückgabewert
Die obige Funktion gibt den aktuellen Trace-Level an.
Beispiel
/* Main program */
say trace()
/* Main program */
n = 100.45 if datatype( n, wholenumber ) then signal msg
say 'This is a whole number'
return 0
msg :
say 'This is an incorrect number '
Die Ausgabe des obigen Programms ist wie folgt.
N
This is an incorrect number
Die erste Zeile von N zeigt an, dass die Kurve auf Normal gesetzt ist.
Trace-Wert einstellen
Der Trace-Level kann mit der Trace-Funktion eingestellt werden. Die allgemeine Syntax und das Beispiel sind unten aufgeführt.
Syntax
trace(travel_level)
Parameter
trace_level - Dies ähnelt den verfügbaren Optionen zum Einstellen der Ablaufverfolgungsstufe.
Rückgabewert
Die obige Funktion gibt den aktuellen Trace-Level an.
Beispiel
/* Main program */
say trace()
current_trace = trace('A')
say current_trace
/* Main program */
n = 100.45 if datatype( n, wholenumber ) then
signal msg say 'This is a whole number'
return 0
msg :
say ' This is an incorrect number '
Die Ausgabe des obigen Programms wird wie folgt sein:
N
4 *-* say current_trace
N
6 *-* n = 100.45
7 *-* if \ datatype( n, wholenumber ) then
8 *-* signal msg
12 *-* say 'This is an incorrect number'
'This is an incorrect number'
Interaktive Verfolgung
Bei der interaktiven Ablaufverfolgung wird die Ablaufverfolgung während der Programmausführung ausgeführt. Genau wie in einer IDE wie Visual Studio für .Net, in der Sie Haltepunkte hinzufügen und sehen können, wie jede Anweisung ausgeführt wird, können Sie auch hier das Programm sehen, während jede Codezeile ausgeführt wird.
Die allgemeine Syntax lautet wie folgt:
Syntax
trace ?options
Dabei sind die Optionen für den Trace-Befehl dieselben wie unten gezeigt.
A - Verfolgt alle Befehle
C - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet werden.
E - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet wurden und zu einem Fehler geführt haben.
F - Verfolgt nur die Host-Befehle, die an das Betriebssystem gesendet wurden und zu einem Fehler geführt haben.
I - Dies bietet eine Zwischenverfolgung von Rexx-Befehlen auf mittlerer Ebene.
L - Diese Option ist verfügbar, wenn Sie die Ablaufverfolgung während des Vorgangs kennzeichnen möchten.
N - Dies ist die Standardoption, bei der keine Ablaufverfolgung erfolgt.
Schauen wir uns ein Beispiel für die Implementierung der aktiven Ablaufverfolgung an.
Beispiel
/* Main program */
trace ?A
/* Main program */
n = 100.45 if datatype( n, wholenumber ) then
signal msg
say 'This is a whole number'
return 0
msg : say 'This is an incorrect number'
Die Ausgabe des obigen Programms erfolgt wie im folgenden Programm gezeigt. Die Ablaufverfolgung stoppt in jeder Codezeile. Dann müssen Sie die Eingabetaste drücken, um zur nächsten Codezeile zu gelangen.
This is an incorrect number
+++ "LINUX COMMAND /home/cg/root/5798511/main.rex"
5 *-* n = 100.45 if datatype( n, wholenumber ) then
+++ Interactive trace. "Trace Off" to end debug, ENTER to Continue. +++
6 *-* signal msg
10 *-* msg :
10 *-* say 'This is an incorrect number'
Rexx kann auch wie in anderen Programmiersprachen an der Fehlerbehandlung arbeiten.
Im Folgenden sind einige der verschiedenen Fehlerbedingungen aufgeführt, die in Rexx auftreten.
ERROR - Dies wird sogar ausgelöst, wenn ein Befehl, der an das Betriebssystem gesendet wird, zu einem Fehler führt.
FAILURE - Dies wird sogar ausgelöst, wenn ein Befehl, der an das Betriebssystem gesendet wird, zu einem Fehler führt.
HALT- Dies wird normalerweise ausgelöst, wenn eine Operation von einer anderen Operation abhängig ist. Ein Beispiel ist, wenn eine E / A-Operation aus irgendeinem Grund angehalten wird.
NOVALUE - Dieses Ereignis wird ausgelöst, wenn einer Variablen kein Wert zugewiesen wurde.
NOTREADY - Dies wird von jedem E / A-Gerät ausgelöst, das nicht bereit ist, eine Operation zu akzeptieren.
SYNTAX - Dieses Ereignis wird ausgelöst, wenn der Code einen Syntaxfehler enthält.
LOSTDIGITS - Dieses Ereignis wird ausgelöst, wenn eine arithmetische Operation zu einem Ziffernverlust während der Operation führt.
Fehler einfangen
Fehler werden mit Hilfe des Signalbefehls abgefangen. Schauen wir uns die Syntax und ein Beispiel dafür an.
Syntax
signal on [Errorcondition]
Wo,
Errorcondition - Dies ist die oben angegebene Fehlerbedingung.
Beispiel
Schauen wir uns dazu ein Beispiel an.
/* Main program */
signal on error
signal on failure
signal on syntax
signal on novalue beep(1)
signal off error
signal off failure
signal off syntax
signal off novalue
exit 0
error: failure: syntax: novalue:
say 'An error has occured'
Im obigen Beispiel schalten wir zuerst die Fehlersignale ein. Wir fügen dann eine Anweisung hinzu, die zu einem Fehler führt. Wir haben dann das Fehlerfallen-Label, um eine benutzerdefinierte Fehlermeldung anzuzeigen.
Die Ausgabe des obigen Programms erfolgt wie unten gezeigt.
An error has occurred.
Ein Beispiel für Fehlercodes wird im folgenden Programm gezeigt.
/* Main program */
signal on error
signal on failure
signal on syntax
signal on novalue beep(1)
exit 0
error: failure: syntax: novalue:
say 'An error has occured'
say rc
say sigl
Die Ausgabe des obigen Programms erfolgt wie unten gezeigt.
An error has occured
40
6
Wenn Sie ooRexx gemäß dem Kapitel "Umgebung" installieren, können Sie auch mit Klassen und Objekten arbeiten. Bitte beachten Sie, dass der gesamte folgende Code im ooRexx-Interpreter ausgeführt werden muss. Der normale Rexx-Interpreter kann diesen objektorientierten Code nicht ausführen.
Klassen- und Methodenerklärungen
Eine Klasse wird mit der folgenden Syntaxdeklaration definiert.
Syntax
::class classname
wo classname ist der Name der Klasse.
Eine Methode in einer Klasse wird mit der folgenden Syntaxdeklaration definiert.
Syntax
::method methodname
Wo methodname ist der Name der Methode.
Eine Eigenschaft in einer Klasse wird mit der folgenden Syntaxdeklaration definiert.
Syntax
::attribute propertyname
Wo propertyname ist der Name der Eigenschaft.
Beispiel
Das Folgende ist ein Beispiel für eine Klasse in Rexx.
::class student
::attribute StudentID
::attribute StudentName
Die folgenden Punkte müssen zum obigen Programm beachtet werden.
- Der Name der Klasse ist Student.
- Die Klasse hat zwei Eigenschaften, StudentID und StudentName.
Getter- und Setter-Methoden
Die Methoden Getter und Setter werden verwendet, um die Werte der Eigenschaften automatisch festzulegen und abzurufen. Wenn Sie in Rexx eine Eigenschaft mit dem Attributschlüsselwort deklarieren, sind die Methoden getter und setter bereits vorhanden.
Beispiel
::class student
::attribute StudentID
::attribute StudentName
Im obigen Beispiel gibt es Getter- und Setter-Methoden für StudentId und StudentName.
Ein Beispiel für ihre Verwendung finden Sie im folgenden Programm.
/* Main program */
value = .student~new
value~StudentID = 1
value~StudentName = 'Joe'
say value~StudentID
say value~StudentName
exit 0
::class student
::attribute StudentID
::attribute StudentName
Die Ausgabe des obigen Programms erfolgt wie unten gezeigt.
1
Joe
Instanzmethoden
Objekte können aus der Klasse über das erstellt werden ~new operator. Eine Methode aus der Klasse kann folgendermaßen aufgerufen werden.
Object~methodname
Wo methodname ist die Methode, die von der Klasse aufgerufen werden muss.
Beispiel
Das folgende Beispiel zeigt, wie ein Objekt aus einer Klasse erstellt und die jeweilige Methode aufgerufen werden kann.
/* Main program */
value = .student~new
value~StudentID = 1
value~StudentName = 'Joe'
value~Marks1 = 10
value~Marks2 = 20
value~Marks3 = 30
total = value~Total(value~Marks1,value~Marks2,value~Marks3)
say total
exit 0
::class student
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
Die Ausgabe des obigen Programms erfolgt wie unten gezeigt.
60
Mehrere Objekte erstellen
Man kann auch mehrere Objekte einer Klasse erstellen. Das folgende Beispiel zeigt, wie dies erreicht werden kann.
Hier erstellen wir 3 Objekte (st, st1 und st2) und rufen ihre Instanzmitglieder und Instanzmethoden entsprechend auf.
Schauen wir uns ein Beispiel an, wie mehrere Objekte erstellt werden können.
Beispiel
/* Main program */
st = .student~new
st~StudentID = 1
st~StudentName = 'Joe'
st~Marks1 = 10
st~Marks2 = 20
st~Marks3 = 30
total = st~Total(st~Marks1,st~Marks2,st~Marks3)
say total
st1 = .student~new
st1~StudentID = 2
st1~StudentName = 'John'
st1~Marks1 = 10
st1~Marks2 = 20
st1~Marks3 = 40
total = st1~Total(st1~Marks1,st1~Marks2,st1~Marks3)
say total
st2 = .student~new
st2~StudentID = 3
st2~StudentName = 'Mark'
st2~Marks1 = 10
st2~Marks2 = 20
st2~Marks3 = 30
total = st2~Total(st2~Marks1,st2~Marks2,st2~Marks3)
say total
exit 0
::class student
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
Die Ausgabe des obigen Programms erfolgt wie unten gezeigt.
60
70
60
Erbe
Vererbung kann als der Prozess definiert werden, bei dem eine Klasse die Eigenschaften (Methoden und Felder) einer anderen Klasse erhält. Durch die Verwendung der Vererbung werden die Informationen in einer hierarchischen Reihenfolge verwaltet.
Die Klasse, die die Eigenschaften anderer erbt, ist bekannt als subclass (abgeleitete Klasse, untergeordnete Klasse) und die Klasse, deren Eigenschaften vererbt werden, ist bekannt als superclass (Basisklasse, Elternklasse).
Sehen wir uns ein Beispiel für die Vererbung in Rexx an. Im folgenden Beispiel erstellen wir eine Klasse namensPerson. Von dort aus verwenden wir das Schlüsselwort subclass, um das zu erstellenStudent class Als ein sub-class of Person.
Beispiel
/* Main program */
st = .student~new
st~StudentID = 1
st~StudentName = 'Joe'
st~Marks1 = 10
st~Marks2 = 20
st~Marks3 = 30
say st~Total(st~Marks1,st~Marks2,st~Marks3)
exit 0
::class Person
::class student subclass Person
::attribute StudentID
::attribute StudentName
::attribute Marks1
::attribute Marks2
::attribute Marks3
::method 'Total'
use arg a,b,c
return (ABS(a) + ABS(b) + ABS(c))
Die Ausgabe des obigen Programms erfolgt wie unten gezeigt.
60
Portabilität ist ein wichtiger Aspekt in jeder Programmiersprache. Wie bekannt, ist Rexx in einer Vielzahl von Betriebssystemen wie Windows und Linux verfügbar. Es muss also sichergestellt werden, dass bei der Entwicklung eines Programms auf der Windows-Plattform die erforderlichen Vorsichtsmaßnahmen getroffen werden, wenn dieselben Programme auf einer Linux-Plattform ausgeführt werden.
Rexx kann Befehle auf Systemebene ausführen. Es gibt Befehle, mit denen Sie verstehen können, auf welchem Betriebssystem es ausgeführt wird. Basierend auf der Ausgabe kann es dann die entsprechenden Aktionen ausführen, um zu sehen, welche Befehle auf diesem Betriebssystem ausgeführt werden können.
Beispiel
Das folgende Beispiel zeigt, wie die Analysefunktionen verwendet werden, um die Details des Betriebssystems abzurufen, auf dem das Programm ausgeführt wird.
/* Main program */
parse version language level date month year.
parse source system invocation filename.
language = translate(language)
if pos('REGINA',language) = 0 then
say 'Error , the default interpreter is not Regina' language
say 'The Interpreter version/release date is:' date month year
say 'The Language level is: ' level say 'The Operating System is'
select
when system = 'WIN32' then
'ver'
when system = 'UNIX' | system = 'LINUX' then
'uname -a'
otherwise
say 'Unknown System:' system
end
if rc <> 0 then
say 'Error :' rc
Die Ausgabe variiert je nach Betriebssystem. Eine Beispielausgabe ist unten angegeben.
The Interpreter version/release date: 5 Apr 2015
The Language level is: 5.00
The Operating System is
Unknown System: WIN64
Bad return code: RC
Rexx bietet eine Reihe erweiterter Funktionen, die eine Vielzahl von Funktionen bieten, von denen die meisten die Interaktion mit dem Betriebssystem ermöglichen. Schauen wir uns einige davon im Detail an, wie unten erläutert.
Sr.Nr. | Erweiterte Funktionen |
---|---|
1 | b2c Diese Funktion konvertiert einen Binärwert in einen Zeichenfolgenwert. |
2 | bitclr Diese Funktion wird verwendet, um das angegebene Bit in der Binärzeichenfolge auf 0 umzuschalten. |
3 | bitcomp Diese Funktion wird verwendet, um 2 Binärzeichenfolgen zu vergleichen, die mit Bit 0 beginnen. |
4 | Buftyp Diese Funktion wird verwendet, um den Inhalt des Stapels anzuzeigen, der normalerweise für Debugging-Zwecke verwendet wird. |
5 | Krypta Diese Funktion wird zum Verschlüsseln einer Zeichenfolge verwendet. |
6 | Gabel Diese Funktion wird verwendet, um einen neuen untergeordneten Prozess auf dem System zu erzeugen. |
7 | getpid Diese Funktion ruft die ID des aktuell ausgeführten Prozesses ab. |
8 | Hash Diese Funktion gibt den Hashwert einer Zeichenfolge zurück. |
Rexx bietet eine Reihe von Anweisungen mit einer Vielzahl von Funktionen, von denen die meisten die Interaktion mit dem Betriebssystem ermöglichen. Schauen wir uns einige davon im Detail an.
Sr.Nr. | Rexx Anleitung |
---|---|
1 | Adresse Mit dieser Funktion wird die aktuelle Befehlsumgebung angezeigt. |
2 | fallen Diese Funktion wird verwendet, um die Zuordnung einer Variablen aufzuheben. |
3 | interpretieren Interpretiert oder führt die definierte Anweisung aus. |
4 | nein Diese Funktion bedeutet, keine Operation auszuführen. Dieser Befehl wird normalerweise in verwendetif statements. |
5 | ziehen Dies wird verwendet, um Eingaben vom Stapel oder vom Standard-Stream abzurufen. |
6 | drücken Dies wird verwendet, um einen Wert auf den Rexx-Stapel zu übertragen. |
Die Rexx-Sprache hat viele verschiedene Implementierungen, wie wir bereits in den vorherigen Kapiteln gesehen haben. Jede Implementierung hat ihre eigene Funktionalität. Schauen wir uns die verschiedenen für Rexx verfügbaren Implementierungen an.
OoRexx
Dies ist die objektorientierte Version von Rexx. Standardmäßig basiert die Rexx-Basisimplementierung auf Prozeduren. Mit ooRexx können Sie jedoch mehr Flexibilität bieten, indem Sie einen objektorientierten Ansatz für Rexx verfolgen. Mit ooRexx können Sie eine bessere Wiederverwendung erzielen, indem Sie wiederverwendbare Klassen und Objekte erstellen.
Das folgende Programm ist ein Beispiel für ein einfaches Rexx-Programm, das mit dem ooRexx-Implementierer ausgeführt werden kann.
Beispiel
/* Main program */
say ‘hello’
Führen Sie den folgenden Befehl aus, um dieses Programm auszuführen.
rexx main.rexx
Wenn Sie den obigen Befehl ausführen, erhalten Sie die folgende Ausgabe.
hello
Netrexx
Dies gilt für alle Java-basierten Entwickler, da es eine Java-basierte Alternative für die Rexx-Sprache bietet. Alle Objekte basieren also auf dem Java-Objektmodell. Der Vorteil dieses Frameworks besteht darin, dass es für Entwickler einfacher wird, dieses Framework zu verwenden, da Java eine weit verbreitete Sprache ist. In dieser Implementierung wird der Rexx-Code in ein Java-Programm konvertiert, das dann auf jeder virtuellen Java-Maschine ausgeführt werden kann.
Der folgende Code ist ein Beispiel für ein NetRexx-Programm.
Erstellen Sie eine Datei mit dem Namen main.nrx und platzieren Sie den folgenden Code in der Datei.
/* Main program */
say ‘hello’
Führen Sie den folgenden Befehl aus, um den Code zu kompilieren:
NetRexxC main.nrx
Sie erhalten dann die folgende Ausgabe. NetRexxC ist der Compiler, der das Rexx-Programm in sein Java-Äquivalent konvertiert.
java -cp ";;G:\NetRexx-3.04GA\lib\NetRexxF.jar;."
-Dnrx.compiler = ecj org.netrexx.process.NetRexxC main.nrx
NetRexx portable processor 3.04 GA build 4-20150630-1657
Copyright (c) RexxLA, 2011,2015. All rights reserved.
Parts Copyright (c) IBM Corporation, 1995,2008.
Program main.nrx
Compilation of 'main.nrx' successful
Sie können Ihr Java-Programm jetzt mit dem folgenden Java-Befehl ausführen.
java main
Wenn Sie den obigen Befehl ausführen, erhalten Sie die folgende Ausgabe.
Hello
Brexx
Dies ist eine leichte Implementierung von Rexx. Dies ist ein leichteres Paket als der Standard-Rexx-Implementierer. Aber es hat immer noch die volle Funktionalität von Rexx.
Der folgende Code ist ein Beispiel für ein BRexx-Programm.
/* Main program */
say ‘hello’
Führen Sie den folgenden Befehl aus, um das Programm auszuführen.
rexx32 main.rexx
Wenn Sie den obigen Befehl ausführen, erhalten Sie die folgende Ausgabe.
hello
NetRexx ist die Java-Implementierung von Rexx. In NetRexx wird der Implementierer verwendet, um das Rexx-Programm in ein Java-Programm zu konvertieren, das dann auf jeder virtuellen Java-Maschine ausgeführt werden kann.
NetRexx einrichten
Der erste Schritt in NetRexx besteht darin, es auf dem lokalen Computer einzurichten. Dazu müssen die folgenden Schritte ausgeführt werden:
Step 1 - Gehen Sie zur NetRexx-Download-Site - http://www.netrexx.org/downloads.nsp
Laden Sie die Datei NetRexx.3.04.GA herunter.
Step 2- Stellen Sie sicher, dass Java auf Ihrem System installiert ist und ausgeführt wird. Sie können überprüfen, ob Java ausgeführt wird, indem Sie den Befehl java - version verwenden.
Ein Beispiel für die Ausgabe ist unten dargestellt.
H:\>java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) Client VM (build 24.79-b02, mixed mode, sharing)
Step 3- Entpacken Sie den Inhalt der komprimierten Netrexx-Datei. Kopieren Sie die Dateien aus dem Ordner NetRexx3.04GA \ lib in Ihren Java-Installationsordner / lib / etc.
Step 4 - Fügen Sie der Pfadvariablen auf dem System den Pfad NetRexx-3.04GA \ bin hinzu.
Ausführen des ersten NetRexx-Programms
Erstellen Sie eine Datei mit dem Namen main.nrx und platzieren Sie den folgenden Code in der Datei.
/* Main program */
say ‘hello’
Führen Sie den folgenden Befehl aus, um den Code zu kompilieren.
NetRexxC main.nrx
Sie erhalten dann die folgende Ausgabe. NetRexxC ist der Compiler, der das rexx-Programm in sein Java-Äquivalent konvertiert.
java -cp ";;G:\NetRexx-3.04GA\lib\NetRexxF.jar;."
-Dnrx.compiler = ecj org.netrexx.process.NetRexxC main.nrx
NetRexx portable processor 3.04 GA build 4-20150630-1657
Copyright (c) RexxLA, 2011,2015. All rights reserved.
Parts Copyright (c) IBM Corporation, 1995,2008.
Program main.nrx
Compilation of 'main.nrx' successful
Sie können Ihr Java-Programm jetzt mit dem folgenden Java-Befehl ausführen.
java main
Wenn Sie den obigen Befehl ausführen, erhalten Sie die folgende Ausgabe.
Hello
Lassen Sie uns nun einige der special aspects of the Netrexx library.
Indizierte Zeichenfolgen
In NetRexx können Zeichenfolgen zu Indizes für Arrays werden. Ein Beispiel ist unten gezeigt.
Beispiel
/* Main program */
value = 'unknown'
value['a'] = 'b'
c = 'a'
say value[c]
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
Ausgabe
b
Mehrere Indizes
In NetRexx können Sie mehrere Indizes für Arrays haben. Ein Beispiel ist unten gezeigt.
Beispiel
/* Main program */
value = 'null'
value['a', 'b'] = 1
say value['a', 'b']
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
Ausgabe
1
Sr.Nr. | Befehl & Beschreibung |
---|---|
1 | Befehl fragen Mit diesem Befehl wird eine Zeile aus dem Standardeingabestream gelesen. |
2 | Ziffern Befehl Dieser Befehl wird verwendet, um den aktuellen Wert des Ziffernwerts anzuzeigen. |
3 | Formular Befehl Mit diesem Befehl wird der aktuelle Wert des Formularwerts angezeigt. |
4 | Länge Befehl Dieser Befehl wird verwendet, um die Länge eines Zeichenfolgenwerts anzuzeigen. |
5 | Versionsbefehl Dieser Befehl wird verwendet, um die aktuell verwendete Version von NetRexx zurückzugeben. |
6 | Trace-Befehl Dieser Befehl wird verwendet, um die aktuelle Traceeinstellung zurückzugeben, die von NetRexx verwendet wird. |
BRexx ist eine leichtere Implementierung von Rexx. Im Rahmen der Rexx-Implementierung bietet es noch viele Funktionen.
BRexx einrichten
Der erste Schritt in BRexx besteht darin, es auf dem lokalen Computer einzurichten. Dazu müssen die folgenden Schritte ausgeführt werden:
Step 1 - Gehen Sie zur BRexx-Download-Site - https://ftp.gwdg.de/pub/languages/rexx/brexx/html/rx.html
Gehen Sie zum Download-Bereich und laden Sie das Produkt herunter.
Step 2 - Entpacken Sie den Inhalt der Brexx-ZIP-Datei.
Step 3 - Fügen Sie der Pfadvariablen auf dem System den Pfad BRexx \ bin hinzu.
Step 4 - Erstellen Sie eine neue Variable namens RXLIB und verweisen Sie auf den Ordner lib im Ordner Brexx.
Ausführen des ersten BRexx-Programms
Erstellen Sie eine Datei mit dem Namen main.rexx und platzieren Sie den folgenden Code in der Datei.
/* Main program */
say ‘hello’
Führen Sie den folgenden Befehl aus, um das Programm auszuführen.
rexx32 main.rexx
Wenn Sie den obigen Befehl ausführen, erhalten Sie die folgende Ausgabe.
hello
Lassen Sie uns nun einige der am häufigsten verwendeten Funktionen diskutieren, die in der BRexx-Bibliothek verfügbar sind.
Sr.Nr. | In der BRexx-Bibliothek verfügbare Funktionen |
---|---|
1 | acos Befehl Dieser Befehl wird verwendet, um die Bogen-Kosinus-Konvertierung einer Zahl zu erhalten. |
2 | cos Befehl Dieser Befehl wird verwendet, um die Kosinuskonvertierung einer Zahl abzurufen. |
3 | sin Befehl Dieser Befehl wird verwendet, um die Sinuskonvertierung einer Zahl zu erhalten. |
4 | asin Befehl Dieser Befehl wird verwendet, um die Bogen-Sinus-Konvertierung einer Zahl zu erhalten. |
5 | tan Befehl Dieser Befehl wird verwendet, um die Tangentenkonvertierung einer Zahl zu erhalten. |
6 | atan Befehl Dieser Befehl wird verwendet, um die Bogen-Tangenten-Konvertierung einer Zahl zu erhalten. |
7 | Befehl mkdir Mit diesem Befehl wird ein Verzeichnis im aktuellen Arbeitsverzeichnis erstellt. |
8 | Befehl rmdir Mit diesem Befehl wird ein Verzeichnis im aktuellen Arbeitsverzeichnis entfernt. |
9 | dir Befehl Dieser Befehl wird verwendet, um die gesamte Verzeichnisliste zurückzugeben. |
Rexx kann mit einer Vielzahl von Datenbanken arbeiten, die unten aufgeführt sind.
- HSQLDB
- Oracle
- SQL Server
- MySQL
- MongoDB
Alle Informationen für Rexx-Datenbanken finden Sie, sobald Sie auf den folgenden Link klicken: https://rexxsql.sourceforge.net/
In unserem Beispiel verwenden wir MySQL DB als Beispiel. Der erste Schritt besteht also darin, sicherzustellen, dass die erforderlichen Treiber von der Rexx SQL-Site heruntergeladen werden, damit Rexx-Programme entsprechend mit SQL arbeiten können. Befolgen Sie daher die folgenden Schritte, um sicherzustellen, dass Rexx-Programme mit MySQL-Datenbanken arbeiten können.
Step 1 - Gehen Sie zur folgenden Treiber-Download-Seite von der Rexx-Website - https://sourceforge.net/projects/rexxsql/files/rexxsql/2.6/
Step 2 - Laden Sie die MYSQL-Treiber herunter - rxsql26B3_my_w32_ooRexx
Step 3 - Entpacken Sie den Inhalt auf den lokalen Computer.
Step 4 - Fügen Sie den Pfad des entpackten Ordners zur Pfadvariablen auf Ihrem Computer hinzu.
Stellen Sie für alle nachfolgenden Beispiele sicher, dass die folgenden Zeiger vorhanden sind:
Sie haben eine Datenbank TESTDB erstellt.
Sie haben in TESTDB eine Tabelle EMPLOYEE erstellt.
Diese Tabelle enthält die Felder FIRST_NAME, LAST_NAME, AGE, SEX und INCOME.
Die Benutzer-ID "testuser" und das Kennwort "test123" sind für den Zugriff auf TESTDB festgelegt.
Stellen Sie sicher, dass Sie die MySQL-JAR-Datei heruntergeladen und Ihrem Klassenpfad hinzugefügt haben.
Sie haben das MySQL-Tutorial durchlaufen
Datenbankverbindung
Um eine Datenbankverbindung herzustellen, müssen Sie zuerst die Rexxsql-DLL aufrufen und dann mit der SQLConnect-Funktion eine Verbindung zur Datenbank herstellen. Die Syntax und das Beispiel, wie dies erreicht werden kann, sind unten angegeben.
Syntax
SQLConnect(cname,username,password,dbname)
Parameter
cname - Dies ist der Name, der der Verbindung gegeben werden soll.
username - Der Benutzername für die Verbindung zur Datenbank.
password - Das Passwort für die Verbindung zur Datenbank.
dbname - Das Datenbankschema, zu dem eine Verbindung hergestellt werden soll.
Rückgabewert
Ein Wert gleich 0 bedeutet, dass die Datenbankverbindung erfolgreich ist.
Beispiel
/* Main program */
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs'
Call SQLLoadFuncs
say SQLConnect(c1,' testuser ',' test123','testdb')
Die Ausgabe des obigen Programms wäre wie unten gezeigt.
0
Erstellen einer Datenbanktabelle
Der nächste Schritt nach dem Herstellen einer Verbindung zur Datenbank besteht darin, die Tabellen in unserer Datenbank zu erstellen. Das folgende Beispiel zeigt, wie Sie mit Rexx eine Tabelle in der Datenbank erstellen. Alle Befehle in Rexx SQL werden mithilfe der SQLCommand-Funktion ausgeführt.
Syntax
SQLConnect(sname,statement)
Parameter
sname - Dies ist der Name, der der auszuführenden Anweisung gegeben werden soll.
statement - Dies ist die Anweisung, die für die Datenbank ausgeführt werden muss.
Rückgabewert
Ein Wert gleich 0 bedeutet, dass der Befehl erfolgreich war.
Beispiel
/* Main program */
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs'
Call SQLLoadFuncs
if SQLConnect(c1,'testuser','test123','testdb') == 0 then say 'Connect Succedded'
if SQLCommand(u1,"use testdb") == 0 then say 'Changed database to testdb'
sqlstr = 'create table employee (first_name char(20) not null, last_name
char(20),age int, sex
char(1), income float)'
if SQLCommand(c2,sqlstr) == 0 then say 'Employee table created'
Die Ausgabe des obigen Programms wäre wie unten gezeigt.
Connect Succedded
Changed database to testdb
Employee table created
Operationen an einer Datenbanktabelle
Die folgenden Arten von Operationen werden am häufigsten für eine Datenbanktabelle ausgeführt.
Sr.Nr. | Operationsbeschreibung |
---|---|
1 | Operation einfügen Dies ist erforderlich, wenn Sie Ihre Datensätze in einer Datenbanktabelle erstellen möchten. |
2 | Betrieb lesen Eine READ-Operation für eine beliebige Datenbank bedeutet, einige nützliche Informationen aus der Datenbank abzurufen. |
3 | Vorgang aktualisieren Die UPDATE-Operation für eine beliebige Datenbank bedeutet, einen oder mehrere Datensätze zu aktualisieren, die bereits in der Datenbank verfügbar sind. |
4 | Vorgang löschen Die Operation DELETE ist erforderlich, wenn Sie einige Datensätze aus Ihrer Datenbank löschen möchten. |
5 | Schließen einer Verbindung Mit dem folgenden Befehl können Sie eine Verbindung zur Datenbank schließen. |
Transaktion durchführen
Transaktionen sind ein Mechanismus, der die Datenkonsistenz gewährleistet. Transaktionen haben die folgenden vier Eigenschaften:
Atomicity - Entweder wird eine Transaktion abgeschlossen oder es passiert überhaupt nichts.
Consistency - Eine Transaktion muss in einem konsistenten Zustand beginnen und das System in einem konsistenten Zustand belassen.
Isolation - Zwischenergebnisse einer Transaktion sind außerhalb der aktuellen Transaktion nicht sichtbar.
Durability - Sobald eine Transaktion festgeschrieben wurde, bleiben die Auswirkungen auch nach einem Systemausfall bestehen.
Hier ist ein einfaches Beispiel für die Implementierung von Transaktionen.
Beispiel
/* Main program */
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs'
Call SQLLoadFuncs
if SQLConnect(c1,'testuser','test123','testdb') == 0 then say 'Connect Succedded'
if SQLCommand(u1,"use testdb") == 0 then say 'Changed database to testdb'
sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20"
if SQLCommand(c2,sqlstr) == 0 then
if sqlcommit() == 0 then say committed
Die Ausgabe des obigen Programms wäre wie unten gezeigt.
Connect Succedded
Changed database to testdb
COMMITTED
Operation festschreiben
Die Festschreibungsoperation weist die Datenbank an, mit der Operation fortzufahren und alle Änderungen an der Datenbank abzuschließen. In unserem obigen Beispiel wird dies durch den folgenden Befehl erreicht.
Sqlcommit()
Rollback-Betrieb
Wenn Sie mit einer oder mehreren Änderungen nicht zufrieden sind und diese Änderungen vollständig zurücksetzen möchten, verwenden Sie die Rollback-Methode. In unserem obigen Beispiel wird dies durch den folgenden Befehl erreicht.
SqlRollback()
Handheld-Geräte haben einen langen Weg zurückgelegt, und Rexx bietet viele Möglichkeiten, wie es auf diesen Geräten ausgeführt werden kann. Rexx unterstützt Pocket PCs, Palm-Geräte, PDAs und andere Smartphones. Der Vorteil von Rexx bei der Arbeit auf diesen Plattformen ist, dass Rexx wirklich ein Programmiersystem mit geringem Gewicht ist, das nur in wenigen Kilobyte läuft. Daher wird es einfacher, Rexx-Programme auf diesen Geräten auszuführen.
Rexx auf Handheld-Geräten kann in den folgenden Modi ausgeführt werden:
Der erste Modus ist der native Knoten, auf dem er direkt auf dem Betriebssystem selbst ausgeführt wird. Der Vorteil beim Ausführen in diesem Modus ist, dass es schneller ist, da es direkt vom Betriebssystem ausgeführt wird.
Der nächste Modus befindet sich über dem DOS- oder Emulatorprogramm auf dem Handgerät. Der Vorteil dieses Modus ist, dass er auf jedem Betriebssystem ausgeführt werden kann, solange der Emulator auf diesem Betriebssystem ausgeführt wird.
Die Rexx-Dolmetscher für die verschiedenen Kategorien von Handgeräten sind unten aufgeführt.
- Windows CE - Brexx
- Palm OS - Rexx für Palm OS
- Symbian OS - Regina
Für den DOS-Emulator müssen die folgenden Schritte ausgeführt werden:
Step 1- Zuerst müssen Sie PocketDOS herunterladen, einen beliebten DOS-Emulator. Es kann auf vielen Betriebssystemen ausgeführt werden und unterstützt gängige VGA-Bildschirme sowie serielle und parallele Ports.
Step 2 - Der nächste Schritt ist das Herunterladen der BRexx-Dateien für 16-Bit-DOS auf einen Windows-PC.
Step 3 - Der letzte Schritt besteht darin, das Rexx-Programm mit ActiveSync mit dem Handheld-Gerät zu synchronisieren.
Es gibt einige andere kommerzielle DOS-basierte Produkte. XTM ist ein Produkt, das unter diese Kategorie fällt. Die Merkmale dieses Produkts sind wie folgt:
Unterstützung für die 80186-CPU und den Befehlssatz.
Es funktioniert irgendwie mit dem BIOS-Code für eine bessere Leistung.
Es kann eine Emulation für den Math-Co-Prozessor, Version 8087 MPU, bereitstellen
Es bietet Zugriff auf die seriellen Schnittstellen.
Es unterstützt eine Vielzahl von Sprachen wie Englisch, Französisch und Deutsch.
Einer der Schlüsselaspekte jeder Programmiersprache ist die Leistung der Anwendung. Es müssen spezielle Praktiken beachtet werden, um sicherzustellen, dass die Leistung der Anwendung nicht beeinträchtigt wird. Schauen wir uns zum besseren Verständnis einige der in den Schritten beschriebenen Überlegungen an.
Step 1- Versuchen Sie, die Anzahl der Anweisungen zu verringern. - In Rexx ist jede Anweisung mit einem Overhead verbunden. Versuchen Sie also, die Anzahl der Anweisungen in Ihrem Programm zu reduzieren. Ein Beispiel für Anweisungen, die neu gestaltet werden können, ist unten dargestellt.
Anstatt mehrere if else-Anweisungen zu verwenden, kann die parse-Anweisung verwendet werden. Verwenden Sie also wie im folgenden Programm die parse-Anweisung, anstatt für jeden Wert eine if-Bedingung zu haben und den Wert von word1, word2, word3 und word4 abzurufen.
/* Main program */
parse value 'This is a Tutorial' with word1 word2 word3 word4
say "'"word1"'"
say "'"word2"'"
say "'"word3"'"
say "'"word4"'"
Step 2- Versuchen Sie, mehrere Anweisungen zu einer Anweisung zu kombinieren. Ein Beispiel ist unten gezeigt.
Angenommen, Sie hätten den folgenden Code, der die Zuordnung für - vorgenommen hat. a and b und übergab es an eine Methode namens proc.
do i = 1 to 100
a = 0
b = 1
call proc a,b
end
Mit der parse-Anweisung können Sie den oben angegebenen Code einfach durch den folgenden Code ersetzen.
do i = 1 for 100
parse value 0 1 with
a,
b,
call proc a,b
end
Step 3 - Versuchen Sie, die zu ersetzen do..to loop mit dem do..for loopwoimmer möglich. Dies wird normalerweise empfohlen, wenn die Steuervariable durch eine Schleife iteriert wird.
/* Main program */
do i = 1 to 10
say i
end
Das obige Programm sollte durch das folgende Programm ersetzt werden.
/* Main program */
do i = 1 for 10
say i
end
Step 4- Entfernen Sie nach Möglichkeit die for-Bedingung aus einer do-Schleife, wie im folgenden Programm gezeigt. Wenn die Steuervariable nicht benötigt wird, geben Sie einfach den Endwert wie unten gezeigt in die do-Schleife ein.
/* Main program */
do 10
say hello
end
Step 5 - In a select clauseWas auch immer Sie für die beste Bedingung halten, die bewertet wird, muss an erster Stelle stehen when clause. Wenn wir also im folgenden Beispiel wissen, dass 1 die häufigste Option ist, setzen wir diewhen 1 clause als erste Klausel in der select-Anweisung.
/* Main program */
select
when 1 then say'1'
when 2 then say'2'
otherwise say '3'
end
Jeder Programmierer möchte, dass sein Programm das Beste ist, wenn es um Qualität und Effizienz geht. Im Folgenden finden Sie einige der besten Programmiermethoden oder Hinweise zum Schreiben von Rexx-Programmen, mit denen Sie diese Ziele erreichen können.
Tipp 1
Verwenden Sie den Befehl address, bevor Sie einen Befehl an das Betriebssystem oder die Eingabeaufforderung senden. Dies hilft Ihnen, den Adressraum vorher im Speicher abzurufen und Ihr Programm effizienter auszuführen.
Ein Beispiel für den Adressbefehl ist unten dargestellt.
Beispiel
/* Main program */
address system dir
Die Ausgabe des Befehls lautet wie folgt, kann jedoch von System zu System variieren.
Volume in drive H is Apps
Volume Serial Number is 8E66-AC3D
Directory of H:\
06/30/2016 01:28 AM <DIR> Apps
07/05/2016 03:40 AM 463 main.class
07/07/2016 01:30 AM 46 main.nrx
07/07/2016 01:42 AM 38 main.rexx
3 File(s) 547 bytes
Dir(s) 313,085,173,760 bytes free
Tipp 2
Stellen Sie sicher, dass alle Befehle an das Betriebssystem nach Möglichkeit in Großbuchstaben und in Anführungszeichen stehen.
Ein Beispiel dafür ist unten gezeigt.
Beispiel
/* Main program */
options arexx_bifs
say chdir('\REXXML100')
say directory()
Wenn wir das obige Programm ausführen, erhalten wir das folgende Ergebnis.
0
D:\rexxxml100
Tipp 3
Vermeiden Sie das Erstellen großer Kommentarblöcke, wie im folgenden Programm gezeigt.
Beispiel
/******/
/* */
/* */
/* */
/******/
/* Main program */
address system dir
Tipp 4
Verwenden Sie die Parse-Anweisung, um Standardwerte zuzuweisen. Ein Beispiel dafür ist unten gezeigt.
Beispiel
parse value 0 1 with
a,
b
Tipp 5
Verwenden Sie nach Möglichkeit die Anweisung "Left (var1,2)" anstelle der Anweisung "substr (var1,1,2)".
Tipp 6
Verwenden Sie nach Möglichkeit die Anweisung "Right (var1,2)" anstelle der Anweisung "substr (var1, length (var1), 2)".
Um die in Rexx verfügbaren grafischen Benutzeroberflächen verwenden zu können, müssen zwei Pakete verwendet werden, eines wird aufgerufen ActiveTcl und der andere ist der RexxtkPaket. Zusammen mit diesen beiden Paketen kann man normale Formulare entwerfen, die Schaltflächen und andere Steuerelemente in den Formularen enthalten können.
Umgebungs-Setup
Das erste, was zu tun ist, ist die Einrichtung der Umgebung. Lassen Sie uns die folgenden Schritte ausführen, um die Umgebung einzurichten.
Step 1 - Laden Sie das Activetcl-Paket von der folgenden Website herunter - https://www.activestate.com/activetcl
Step 2- Der nächste Schritt besteht darin, die Installation von ActiveTCl zu starten. Klicken Sie auf dem Bildschirm auf die Schaltfläche Weiter, um fortzufahren.
Step 3 - Akzeptieren Sie die Lizenzvereinbarung und klicken Sie auf die Schaltfläche Weiter.
Step 4 - Wählen Sie einen Ort für die Installation und klicken Sie auf die Schaltfläche Weiter.
Step 5 - Wählen Sie einen Ort für die Installation der Demos und klicken Sie auf die Schaltfläche Weiter.
Step 6 - Klicken Sie auf die Schaltfläche Weiter, um mit der Installation fortzufahren.
Step 7 - Klicken Sie auf die Schaltfläche Fertig stellen, um die Installation abzuschließen.
Step 8 - Der nächste Schritt ist das Herunterladen der Rexxtk-Software über den folgenden Link: - https://sourceforge.net/projects/rexxtk/
Step 9- Doppelklicken Sie im vorherigen Schritt über den Link auf die Installationsdatei, um die Installation zu starten. Klicken Sie auf die Schaltfläche Weiter, um fortzufahren.
Step 10 - Klicken Sie im nächsten Bildschirm auf die Schaltfläche Ja, um der Lizenzvereinbarung zuzustimmen.
Step 11 - Wählen Sie im nächsten Bildschirm den Speicherort für die Installation und klicken Sie auf die Schaltfläche Weiter.
Step 12 - Wählen Sie den Speicherort des Programmordners und klicken Sie auf die Schaltfläche Weiter.
Sobald die Installation abgeschlossen ist, können wir mit der Programmierung der GUI in Rexx beginnen.
Grundprogramm
Mal sehen, wie wir mit Rexx ein einfaches Basisprogramm in einem grafischen Benutzeroberflächenformat entwerfen können.
Beispiel
/* Main program */
call RxFuncAdd 'TkLoadFuncs','rexxtk','TkLoadFuncs'
call TkLoadFuncs
do forever
interpret 'Call' TkWait()
end
call TkDropFuncs
exit 0
Die folgenden Dinge müssen über das obige Programm beachtet werden -
Die Rexxtk-Bibliothek und alle ihre Funktionen werden mit dem Befehl RxFuncAdd geladen.
Die do forever-Schleife hält das Fenster offen und wartet auf die Benutzereingabe.
Sobald die Benutzereingabe erkannt wurde, wird das Programm beendet.
Wenn das obige Programm ausgeführt wird, erhalten Sie die folgende Ausgabe.
Menüs erstellen
Menüs werden mit Hilfe der Funktionen TkMenu und TkAdd erstellt. Die Syntax dieser Funktionen ist unten angegeben.
Syntax
TkMenu(widgetname,options,0)
Parameter
Widgetname - Ein Name, der dem Menü gegeben werden soll.
Optionen können eine der folgenden sein:
selectcolor - Wenn Kontrollkästchen oder Optionsfelder als Menüoptionen verwendet werden, gibt diese Option die Farbe an, die ausgewählt werden soll, wenn eine Menüoption ausgewählt wird.
tearoff - Mit dieser Option können Sie dem Hauptmenü Untermenüs hinzufügen.
title - Die Zeichenfolge, die verwendet werden muss, um dem Fenster einen Titel zu geben.
Rückgabewert
Ein Handle zum erstellten Menü.
Beispiel
/* Main program */
call RxFuncAdd 'TkLoadFuncs','rexxtk','TkLoadFuncs'
call TkLoadFuncs
menubar = TkMenu('.m1')
filemenu = TkMenu('.m1.file','-tearoff', 0)
call TkAdd menubar, 'cascade', '-label', 'File', '-menu', filemenu
call TkAdd filemenu, 'command', '-label', 'Open...', '-rexx', 'getfile'
call TkConfig '.', '-menu', menubar
do forever
interpret 'Call' TkWait()
end
call TkDropFuncs
exit 0
Die folgenden Dinge müssen über das obige Programm beachtet werden -
Die Menüleiste wird mit der Funktion TkMenu erstellt. Der Parameter 'Tearoff' bedeutet, dass wir Untermenüs erstellen müssen, die an das Hauptmenü angehängt werden.
Wir fügen dann 2 Menüoptionen hinzu, die als Datei und Öffnen mit der TkAdd-Funktion bezeichnet werden.
Wenn das obige Programm ausgeführt wird, erhalten Sie die folgende Ausgabe.
Reginald ist ein weiterer Rexx-Interpreter, der von Jeff Glantt entwickelt wurde und einige Anpassungen hinsichtlich der Ausführung von Rexx-Programmen enthält. In diesem Abschnitt erfahren Sie, wie Sie Reginald einrichten und einige Rexx-Programme darin ausführen.
Umgebungs-Setup
Der erste Schritt ist das Umgebungs-Setup, bei dem die Reginald-Dateien heruntergeladen werden. Dies kann über den folgenden Website-Link erfolgen:http://www.manmrk.net/tutorials/rexx/Reginald/win32/rxusrw32.htm
Sobald der Download abgeschlossen ist und Sie das Installationsprogramm starten, können Sie im nächsten Bildschirm den Installationsort auswählen.
Klicken Sie auf die Schaltfläche Installieren, um fortzufahren.
Nach Abschluss können wir nun ein Beispielprogramm im Reginald-Interpreter ausführen. Erstellen Sie ein einfaches Programm wie unten gezeigt.
/* Main program */
say 'Hello'
Führen Sie dann den folgenden Befehl aus:
RxLaunch.exe main.rexx
Sie erhalten dann die folgende Ausgabe. Dieses Programm wird jetzt im Reginald-Interpreter ausgeführt.
Andere Funktionen verfügbar
Abgesehen von den normalen Rexx-Befehlen verfügte Reginald über einige spezifische Befehle, die auf das Windows-Betriebssystem zugeschnitten waren. DriveMap ist ein solcher Befehl -
DriveMap
Diese Funktion gibt Auskunft über das Laufwerk.
Syntax - -
Drivemap(,options)
Parameters - -
Options - Dies ist eine Liste von Schlüsselwörtern, mit denen verschiedene Informationen zu den Laufwerken des lokalen Computers abgerufen werden können.
Return Value
Ein Zeichenfolgenwert, der Informationen zum Laufwerk enthält.
Example - -
/* Main program */
say 'Drives on system : ' DriveMap(,'FIXED')
Wenn das obige Programm ausgeführt wird, erhalten Sie die folgende Ausgabe. Diese Ausgabe hängt von System zu System ab.
List of disk drives : C:\ D:\
Rexx kann auch mit Webservern arbeiten. Am häufigsten ist der Apache-Webserver. Um Rexxw mit dem Apache-Webserver zu verwenden, müssen Sie zuerst die Rexx-Module über den folgenden Link herunterladen:https://sourceforge.net/projects/modrexx/?source=typ_redirect
Stellen Sie anschließend sicher, dass Sie die Mod Rexx-Module zum Klassenpfad hinzufügen.
Die folgenden Zeilen müssen zur Apache-Konfigurationsdatei hinzugefügt und geändert werden.
Die folgenden Zeilen müssen am Ende des entsprechenden Feldes eingefügt werden -
- httpd.conf LoadModule-Liste.
- LoadModule rexx_module modules / mod_rexx.dll
Die folgenden Zeilen sollten am Ende der hinzugefügt werden http.conf Datei.
AddType-Anwendung / x-httpd-rexx-script .rex .rexx
AddType-Anwendung / x-httpd-rexx-rsp .rsp
Fügen Sie diese für die Unterstützung von REXX Server-Seiten hinzu
RexxRspCompiler “c: / Programme / Apache Group / Apache2 / bin / rspcomp.rex”
Sobald die oben genannten Änderungen vorgenommen wurden, müssen Sie Ihren Apache-Webserver herunterfahren und neu starten.
Mit den obigen Zeilen können Sie auch Rexx-basierte Serverseiten wie Java-Serverseiten verwenden. Sie können den Rexx-Code direkt zu den HTML-Seiten hinzufügen.
Ein Beispiel ist unten gezeigt -
<p>The current date and time is
<?rexx
/* Inserting the rexx statement */
say date() time()
?>
</p>
Wenn eine Rexx-basierte Serverseite ausgeführt wird, werden die folgenden Schritte ausgeführt:
Zuerst wird eine temporäre Datei erstellt.
Anschließend kompiliert der Rexx Server-Compiler die Datei in ein Rexx-Programm und legt sie in der temporären Datei ab.
Der nächste Schritt besteht darin, das Rexx-Programm tatsächlich auszuführen.
Schließlich wird die temporäre Datei entfernt.