Учебники

Rexx – Краткое руководство

Rexx – Обзор

Rexx (Restructured Extended Executor) разработан как язык сценариев. Его цель – сделать скрипты максимально простыми, быстрыми, надежными и безошибочными. Многие языки программирования разработаны для совместимости со старыми языками и написаны для определенной аудитории или платформ. Rexx игнорирует посторонние цели. Он был разработан с самого первого дня, чтобы быть мощным, но простым в использовании.

Rexx был разработан и впервые реализован на ассемблере как проект «в свое время» между 20 марта 1979 года и серединой 1982 года Майком Коулишу из IBM, первоначально как язык программирования сценариев, заменивший языки EXEC и EXEC 2 . Он был разработан, чтобы быть макросом или скриптовым языком для любой системы. Таким образом, Rexx считается предшественником Tcl и Python. Rexx также задумывался его создателем как упрощенная и легкая в освоении версия языка программирования PL / I.

Особенности Rexx

Rexx как язык программирования имеет следующие ключевые особенности –

  • Простой синтаксис

  • Возможность направлять команды в несколько сред

  • Способность поддерживать функции, процедуры и команды, связанные с конкретной средой вызова.

  • Встроенный стек, с возможностью взаимодействия со стеком хоста, если он есть.

  • Небольшой набор инструкций, содержащий всего две дюжины инструкций

  • Синтаксис произвольной формы

  • Токены без учета регистра, включая имена переменных

  • Основа символьной строки

  • Динамическая типизация данных, без объявлений

  • Нет зарезервированных ключевых слов, кроме как в локальном контексте

  • Нет включаемых файловых средств

  • Произвольная числовая точность

  • Десятичная арифметика с плавающей точкой

  • Богатый выбор встроенных функций, особенно обработка строк и текстов

  • Автоматическое управление хранением

  • Защита от столкновения

  • Адресуемые контентом структуры данных

  • Ассоциативные массивы

  • Простой доступ к системным командам и средствам

  • Простая обработка ошибок, встроенная трассировка и отладчик

  • Несколько искусственных ограничений

  • Упрощенные средства ввода / вывода

Простой синтаксис

Возможность направлять команды в несколько сред

Способность поддерживать функции, процедуры и команды, связанные с конкретной средой вызова.

Встроенный стек, с возможностью взаимодействия со стеком хоста, если он есть.

Небольшой набор инструкций, содержащий всего две дюжины инструкций

Синтаксис произвольной формы

Токены без учета регистра, включая имена переменных

Основа символьной строки

Динамическая типизация данных, без объявлений

Нет зарезервированных ключевых слов, кроме как в локальном контексте

Нет включаемых файловых средств

Произвольная числовая точность

Десятичная арифметика с плавающей точкой

Богатый выбор встроенных функций, особенно обработка строк и текстов

Автоматическое управление хранением

Защита от столкновения

Адресуемые контентом структуры данных

Ассоциативные массивы

Простой доступ к системным командам и средствам

Простая обработка ошибок, встроенная трассировка и отладчик

Несколько искусственных ограничений

Упрощенные средства ввода / вывода

Официальный сайт Rexx – www.oorexx.org

Официальный сайт Рекс

Rexx – Окружающая среда

Прежде чем вы сможете начать работать с Rexx, вам необходимо убедиться, что в вашей системе работает полнофункциональная версия Rexx. В этой главе описывается установка Rexx и его последующая настройка на компьютере под управлением Windows, чтобы начать работу с Rexx.

Перед продолжением установки убедитесь, что выполнены следующие системные требования.

Системные Требования

объем памяти 2 ГБ ОЗУ (рекомендуется)
Дисковое пространство Нет минимальных требований. Желательно иметь достаточно места для хранения программ, которые будут созданы с использованием Rexx.
Версия операционной системы Rexx может быть установлен на Windows, Ubuntu / Debian, Mac OS X.

Скачивание Rexx

Чтобы загрузить Rexx, вы должны использовать следующий URL – https://www.oorexx.org/download.html

Эта страница имеет различные загрузки для различных версий Rexx, как показано на следующем снимке экрана.

Скачать Rexx

Нажмите на «установочные файлы ooRexx» в таблице с заголовком версии 4.2.0.

После этого вы будете перенаправлены на следующую страницу.

ooRex установочные файлы

Нажмите на ooRexx-4.2.0.windows.x86_64.exe, чтобы загрузить 64-разрядную версию программного обеспечения. Мы поговорим об установке программного обеспечения в следующей главе.

Rexx – Установка

Следующие шаги подробно объяснят, как Rexx может быть установлен в системе Windows.

Шаг 1 – Запустите установщик, загруженный в предыдущем разделе. После запуска установщика нажмите кнопку «Выполнить».

Запустите установщик

Шаг 2 – Нажмите следующую кнопку на следующем экране, чтобы продолжить установку.

Следующая кнопка

Шаг 3 – Нажмите кнопку « Я согласен» , чтобы продолжить.

Согласен

Шаг 4 – Примите компоненты по умолчанию и затем нажмите на следующую кнопку.

Компоненты по умолчанию

Шаг 5 – Выберите место установки и нажмите кнопку «Далее».

Место установки

Шаг 6 – Примите процессы по умолчанию, которые будут установлены, и нажмите кнопку Далее.

Принять процессы по умолчанию

Шаг 7 – Выберите ассоциации файлов по умолчанию и нажмите кнопку Далее.

Файловые ассоциации по умолчанию

Шаг 8. Установите флажки для отправки элементов Rexx исполняемым файлам, а затем нажмите кнопку «Далее», как показано на следующем снимке экрана.

Флажки

Шаг 9 – На следующем экране выберите редактор для работы с файлами Rexx. Оставьте блокнот в качестве опции по умолчанию. Также примите расширение по умолчанию для каждого файла Rexx.

Rexx Files

Шаг 10 – Примите настройки по умолчанию на следующем экране и нажмите кнопку Далее, чтобы продолжить установку.

Настройки по умолчанию

Шаг 11 – Наконец, нажмите на кнопку Установить, чтобы продолжить установку.

Кнопка установки

Шаг 12 – После завершения установки вам нужно нажать на кнопку Далее, чтобы продолжить.

Установка завершена

Шаг 13 – Нажмите кнопку Готово, чтобы завершить установку.

Кнопка Готово

Rexx – установка плагинов

В этой главе мы обсудим, как установить плагины в популярных IDE (интегрированная среда разработки) . Rexx как язык программирования также доступен в популярных IDE, таких как Eclipse . Давайте посмотрим, как мы можем получить необходимые плагины в этих IDE, чтобы у вас было больше возможностей для работы с Rexx.

Установка в Eclipse

Чтобы без проблем установить Rexx в Eclipse, вам необходимо придерживаться следующих шагов.

Шаг 1 – Откройте Eclipse и нажмите на пункт меню, Help → Eclipse Marketplace, как показано на следующем скриншоте.

Eclipse Marketplace

Шаг 2 – В следующем диалоговом окне введите Rexx в критерии поиска и нажмите кнопку поиска.

Следующее диалоговое окно

После этого нажмите кнопку «Установить».

Шаг 3 – Нажмите кнопку «Подтвердить», чтобы продолжить установку компонентов.

Кнопка подтверждения

Шаг 4 – Eclipse загрузит необходимые файлы, чтобы начать установку. После этого Eclipse попросит вас принять лицензионные соглашения. Нажмите на принятие лицензионных соглашений, а затем нажмите кнопку Готово, как показано на следующем снимке экрана.

Обзор лицензий

Eclipse начнет установку программного обеспечения в фоновом режиме.

Шаг 5 – Вы, вероятно, получите предупреждение системы безопасности (как показано на следующем снимке экрана). Нажмите на кнопку ОК, чтобы продолжить.

Предупреждение безопасности

Шаг 6 – Вам будет предложено перезапустить Eclipse после установки обновлений. Нажмите Да, чтобы перезапустить Eclipse.

Перезапустите Eclipse

Rexx – основной синтаксис

Чтобы понять основной синтаксис Rexx, давайте сначала рассмотрим простую программу Hello World.

пример

Live Demo

/* Main program */ 
say "Hello World" 

Можно увидеть, насколько проста программа hello world. Это простая строка сценария, которая используется для выполнения программы Hello World.

Следующие вещи должны быть отмечены о вышеупомянутой программе –

  • Команда say используется для вывода значения на консоль.

  • / * * / Используется для комментариев в Rexx.

Команда say используется для вывода значения на консоль.

/ * * / Используется для комментариев в Rexx.

Выход вышеупомянутой программы будет –

Hello World

Общая форма заявления

В Rexx, давайте посмотрим на общий вид программы. Посмотрите на следующий пример.

Live Demo

/* Main program */ 
say add(5,6) 
exit 
add: 
parse arg a,b 
return a + b

Выход вышеупомянутой программы будет –

11

Давайте пройдемся по тому, что мы поняли из вышеуказанной программы –

  • Добавить это функция, определенная для добавления 2 чисел.

  • В основной программе значения 5 и 6 используются в качестве параметров для функции добавления.

  • Ключевое слово exit используется для выхода из основной программы. Это используется, чтобы отличить основную программу от функции добавления.

  • Функция добавления различается символом «:».

  • Оператор parse используется для анализа входящих аргументов.

  • Наконец, оператор return используется для возврата суммы числовых значений.

Добавить это функция, определенная для добавления 2 чисел.

В основной программе значения 5 и 6 используются в качестве параметров для функции добавления.

Ключевое слово exit используется для выхода из основной программы. Это используется, чтобы отличить основную программу от функции добавления.

Функция добавления различается символом «:».

Оператор parse используется для анализа входящих аргументов.

Наконец, оператор return используется для возврата суммы числовых значений.

Подпрограммы и функции

В Rexx код обычно делится на подпрограммы и функции. Подпрограммы и функции используются для разделения кода на разные логические единицы. Основное различие между подпрограммами и функциями состоит в том, что функции возвращают значение, тогда как подпрограммы – нет.

Ниже приведен пример ключевой разницы между подпрограммой и функцией для реализации дополнения.

Реализация функции

/* Main program */ 
say add(5,6) 
exit 
add: 
parse arg a,b 
return a + b

Реализация подпрограммы

/* Main program */ 
add(5,6) 
exit 
add: 
parse arg a,b 
say a + b

На выходе обеих программ будет значение 11.

Выполнение команд

Rexx может использоваться в качестве языка управления для различных систем на основе команд. Способ, которым Rexx выполняет команды в этих системах, заключается в следующем. Когда Rexx встречает программную строку, которая не является ни инструкцией, ни присваиванием, она обрабатывает эту строку как строковое выражение, которое должно быть оценено и затем передано в среду.

Пример таков:

пример

Live Demo

/* Main program */ 
parse arg command 
command "file1" 
command "file2" 
command "file3" 
exit 

Каждая из трех похожих строк в этой программе является строковым выражением, которое добавляет имя файла (содержится в строковых константах) к имени команды (задается в качестве параметра). Результирующая строка передается в среду для выполнения в виде команды. Когда команда завершена, переменная “rc” устанавливается в код завершения команды.

Вывод вышеуказанной программы следующий:

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)"

Ключевые слова в Rexx

Свободный синтаксис REXX подразумевает, что некоторые символы зарезервированы для использования языковым процессором в определенных контекстах.

В конкретных инструкциях некоторые символы могут быть зарезервированы для разделения частей инструкции. Эти символы называются ключевыми словами. Примерами ключевых слов REXX являются WHILE в инструкции DO и THEN (который в данном случае действует как терминатор предложения) после предложения IF или WHEN .

Помимо этих случаев, проверяются только простые символы, которые являются первым токеном в предложении и не сопровождаются “=” или “:”, чтобы увидеть, являются ли они ключевыми словами инструкции. Вы можете свободно использовать символы в других разделах, не считая их ключевыми словами.

Комментарии в Rexx

Комментарии используются для документирования вашего кода. Однострочные комментарии идентифицируются с помощью / * * / в любой позиции в строке.

Пример таков:

/* 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

Комментарии также могут быть написаны между строкой кода, как показано в следующей программе –

Live Demo

/* 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

Выход вышеупомянутой программы будет –

11

Вы также можете иметь несколько строк в комментарии, как показано в следующей программе –

Live Demo

/* 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

Выход вышеупомянутой программы будет –

11

Rexx – DataTypes

На любом языке программирования вам нужно использовать различные переменные для хранения различных типов информации. Переменные – это не что иное, как зарезервированные области памяти для хранения значений. Это означает, что при создании переменной вы резервируете некоторое пространство в памяти для хранения значения, связанного с этой переменной.

Вам может потребоваться хранить информацию различных типов данных, таких как строка, символ, широкий символ, целое число, число с плавающей запятой, логическое значение и т. Д. На основе типа данных переменной операционная система выделяет память и решает, что можно сохранить в зарезервированном объем памяти.

Встроенные типы данных

Rexx предлагает широкий спектр встроенных типов данных. Ниже приведен список типов данных, которые определены в Rexx.

  • Целое число – строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-) . Представленное число должно быть между -2147483648 и 2147483647 включительно.

  • Большое целое число – строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число должно быть между -9223372036854775808 и 2147483648 включительно или между 2147483648 и 9223372036854775807.

  • Десятичный – это будет один из следующих форматов –

    • Строка чисел, которая содержит десятичную точку, но не имеет идентификатора экспоненты. P представляет точность, а s представляет масштаб десятичного числа, которое представляет строка. Первый символ может быть знаком плюс (+) или минус (-).

    • Строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число меньше -9223372036854775808 или больше 9223372036854775807.

  • Float – строка, представляющая число в научной нотации. Строка состоит из серии чисел, за которыми следует идентификатор экспоненты (E или e, за которым следует необязательный знак плюс (+) или минус (-) и серия чисел). Строка может начинаться со знака плюс (+) или минус (-).

  • Строка – обычная строка символов.

Целое число – строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-) . Представленное число должно быть между -2147483648 и 2147483647 включительно.

Большое целое число – строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число должно быть между -9223372036854775808 и 2147483648 включительно или между 2147483648 и 9223372036854775807.

Десятичный – это будет один из следующих форматов –

Строка чисел, которая содержит десятичную точку, но не имеет идентификатора экспоненты. P представляет точность, а s представляет масштаб десятичного числа, которое представляет строка. Первый символ может быть знаком плюс (+) или минус (-).

Строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число меньше -9223372036854775808 или больше 9223372036854775807.

Float – строка, представляющая число в научной нотации. Строка состоит из серии чисел, за которыми следует идентификатор экспоненты (E или e, за которым следует необязательный знак плюс (+) или минус (-) и серия чисел). Строка может начинаться со знака плюс (+) или минус (-).

Строка – обычная строка символов.

Ниже приведены некоторые примеры использования каждого типа данных. Опять же, каждый тип данных будет подробно обсуждаться в последующих главах. Это просто для того, чтобы вы познакомились с кратким описанием вышеупомянутых типов данных.

целое число

Пример использования числового типа данных показан в следующей программе. Эта программа показывает сложение 2 целых чисел.

пример

Live Demo

/* 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 

Выход вышеупомянутой программы будет –

11

Big Integer

Следующая программа показывает способность Rexx обрабатывать большие целые числа. Эта программа показывает, как добавить 2 больших целых числа.

пример

Live Demo

/* 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

Выход вышеупомянутой программы будет –

6.00000000E+21

Десятичный

Следующая программа показывает способность Rexx обрабатывать десятичные числа. Эта программа показывает, как добавить 2 десятичных числа.

пример

Live Demo

/* 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 

Выход вышеупомянутой программы будет –

12.1 

терка

В следующем примере показаны случаи, когда число может работать как число с плавающей точкой.

пример

Live Demo

/* 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

Выход вышеупомянутой программы будет –

141200

строка

Пример использования типа данных Tuple показан в следующей программе.

Здесь мы определяем кортеж P, который имеет 3 члена. Tuple_size – это встроенная функция, определенная в Rexx, которая может использоваться для определения размера кортежа.

пример

Live Demo

/* Main program */ 
display("hello")  

exit 
display:  

parse arg a 
say a

Выход вышеупомянутой программы будет –

hello

Rexx – переменные

В Rexx все переменные связаны с оператором ‘=’. Имена переменных иногда называют символами. Они могут состоять из букв, цифр и символов, таких как ‘ . ! ? _ ‘. Имя переменной, которую вы создаете, не должно начинаться с цифры или точки. Простое имя переменной не включает точку. Имя переменной, которая включает точку, называется составной переменной и представляет собой массив или таблицу.

Ниже приведены основные типы переменных в Rexx, которые также были объяснены в предыдущей главе:

  • Целые числа – это используется для представления целого числа или числа с плавающей точкой. Примером этого является 10.

  • Большие целые числа – это представляет большое целочисленное значение.

  • Десятичное число – десятичное значение – это строка чисел, которая содержит десятичную точку, но не имеет идентификатора экспоненты.

  • Float – значение с плавающей точкой – это строка, представляющая число в научной нотации.

  • String – последовательность символов определяет строку в Rexx.

Целые числа – это используется для представления целого числа или числа с плавающей точкой. Примером этого является 10.

Большие целые числа – это представляет большое целочисленное значение.

Десятичное число – десятичное значение – это строка чисел, которая содержит десятичную точку, но не имеет идентификатора экспоненты.

Float – значение с плавающей точкой – это строка, представляющая число в научной нотации.

String – последовательность символов определяет строку в Rexx.

Различные типы переменных функций

В этом разделе мы обсудим различные функции, которые может выполнять переменная.

Объявления переменных

Общий синтаксис определения переменной показан следующим образом:

var-name = var-value 

где

  • var-name – это имя переменной.

  • var-value – это значение, связанное с переменной.

var-name – это имя переменной.

var-value – это значение, связанное с переменной.

Следующая программа является примером объявления переменной:

пример

Live Demo

/* Main program */ 
X = 40 
Y = 50 
Result = X + Y 
say Result

В приведенном выше примере у нас есть 2 переменные, одна из которых X, которая связана со значением 40, а следующая Y, которая связана со значением 50 . Другая переменная с именем Result связана с добавлением X и Y.

Вывод вышеуказанной программы будет следующим:

90

Именование переменных

Имена переменных иногда называют символами. Они могут состоять из букв, цифр и символов, таких как ‘. ! ? _ ‘. Имя переменной, которую вы создаете, не должно начинаться с цифры или точки.

Если переменной еще не присвоено значение, она называется неинициализированной. Значением неинициализированной переменной является имя самой переменной прописными буквами.

Пример неназначенной переменной следующий:

пример

Live Demo

/* Main program */ 
unassignedvalue 
say unassignedvalue 

Если вы запустите вышеуказанную программу, вы получите следующий вывод:

UNASSIGNEDVALUE
sh: UNASSIGNEDVALUE: command not found
     2 *-* unassignedvalue 
       >>>   "UNASSIGNEDVALUE"
       +++   "RC(127)"

Переменным могут быть присвоены значения более одного раза. Приведенная ниже программа показывает, как значению X можно присвоить значение несколько раз.

пример

Live Demo

/* Main program */ 
X = 40 
X = 50 
say X 

Вывод вышеуказанной программы будет следующим:

50

Переменные печати

Значения переменных выводятся с помощью команды say . Ниже приведен пример печати множества переменных.

пример

Live Demo

/* Main program */ 
X = 40 

/* Display an Integer */ 
say X 
Y = 50.5 

/* Display a Float */ 
say Y 
Z = "hello" 

/* Display a string */ 
say Z 

Вывод вышеуказанной программы будет следующим:

40 
50.5 
hello 

Rexx – операторы

Оператор – это символ, который указывает компилятору выполнять определенные математические или логические манипуляции.

Rexx имеет различные типы операторов, которые также подробно объясняются следующим образом:

  • Арифметические операторы
  • Реляционные операторы
  • Логические операторы
  • Битовые операторы

Арифметические Операторы

Язык Rexx поддерживает обычные арифметические операторы, как и любой другой язык. Ниже приведены арифметические операторы, доступные в Rexx.

Показать пример

оператор Описание пример
+ Добавление двух операндов 1 + 2 даст 3
Вычитает второй операнд из первого 1 – 2 даст -1
* Умножение обоих операндов 2 * 2 даст 4
/ Деление числителя по знаменателю 2/2 даст 1
// Остаток от деления первого числа на второе 3 // 2 даст 1
% Компонент div выполнит деление и вернет целочисленный компонент. 3% 2 даст 1

Операторы отношений

Реляционные операторы позволяют сравнивать объекты. Ниже приведены реляционные операторы, доступные в Rexx. В Rexx истинное значение обозначено 1, а ложное значение – 0.

Показать пример

оператор Описание пример
== Проверяет равенство между двумя объектами 2 = 2 даст 1
< Проверяет, является ли левый объект меньше правого операнда. 2 <3 даст 1
= < Проверяет, является ли левый объект меньше или равен правому операнду. 2 = <3 даст 1
> Проверяет, является ли левый объект больше правого операнда. 3> 2 даст 1
> = Проверяет, является ли левый объект больше или равен правому операнду. 3> 2 даст 1

Логические Операторы

Логические операторы используются для оценки логических выражений. Ниже приведены логические операторы, доступные в Rexx.

Показать пример

оператор Описание пример
& Это логический оператор «и» 1 или 1 даст 1
| Это логический оператор «или» 1 или 0 даст 1
\ Это логический оператор «не» \ 0 даст 1
&& Это логический эксклюзивный оператор «или» 1 && 0 даст 1

Битовые операторы

Groovy предоставляет четыре побитовых оператора. Ниже приведены побитовые операторы, доступные в Groovy.

Показать пример

Sr.No. Оператор и описание
1

bitand

Это побитовый оператор «и»

2

bitor

Это побитовый оператор «или»

3

bitxor

Это побитовый «xor» или Exclusive или оператор

bitand

Это побитовый оператор «и»

bitor

Это побитовый оператор «или»

bitxor

Это побитовый «xor» или Exclusive или оператор

Приоритет оператора

В следующей таблице показан приоритет операторов для операторов Rexx в порядке убывания приоритета их приоритетов.

операторы старшинство
Префиксные операторы + – \
Сложение и вычитание + –
Операторы сравнения = ==> <> = <=
Логическое И &
Логическое ИЛИ |
ЭКСКЛЮЗИВНЫЙ ИЛИ &&

Rexx – Массивы

Массивы на любом языке программирования позволяют группировать список значений одного типа. Использование массивов заключается в том, что он позволяет создавать список значений аналогичного типа, которые можно сортировать, искать и которыми легко манипулировать . Rexx также позволяет определять массивы. Эти массивы могут быть одномерными или многомерными.

Массивы Rexx могут быть редкими. То есть не каждая позиция массива должна иметь значение или даже быть инициализированной. Могут быть пустые позиции массива или слоты между теми, которые содержат элементы данных. Или массивы могут быть плотными, в которых все последовательные слоты массивов содержат элементы данных.

Во многих языках программирования вас должно интересовать, что представляет собой нижний индекс первой записи в таблице. Первый числовой индекс 0 или 1? В Rexx первый индекс – это то, что вы используете! Таким образом, введите первый элемент массива в положение 0 или 1, как вы предпочитаете.

array_name.0 = ‘first element’

или же

array_name.1 = ‘first element’

Давайте посмотрим на различные операции, доступные для массивов.

Создание массивов

Массивы создаются с тем же соглашением об именах, которое используется для переменных в Rexx.

Общий синтаксис для создания массивов следующий:

Arrayname.index = value 

где

  • Arrayname – это имя, предоставленное массиву.

  • Индекс – это индексная позиция в массиве для ссылки на определенный элемент.

  • Значение – это значение, присвоенное элементу индекса в массиве.

Arrayname – это имя, предоставленное массиву.

Индекс – это индексная позиция в массиве для ссылки на определенный элемент.

Значение – это значение, присвоенное элементу индекса в массиве.

Пример объявления массива следующий:

пример

/* Main program */ 
list.1 = 0 
list.2 = 0 
list.3 = 0

Следующие пункты должны быть отмечены о вышеупомянутой программе –

  • Имя массива указывается в виде списка
  • Есть 3 элемента массива, которые инициализируются значением 0.

Присвоение значений элементу массива

Значения могут быть переназначены элементам массива так же, как элементы массива инициализированы.

Следующая программа является примером значений, которые могут быть назначены различным значениям индекса существующего массива.

/* Main program */ 
list.1 = 0 
list.2 = 0 
list.3 = 0 

/* Assigning new values to the array*/ 
list.1 = 10 
list.3 = 30 

Отображение значений массива

Значения массива могут быть отображены путем обращения к позиции индекса элемента массива. В следующем примере показано, как получить доступ к различным элементам массива.

пример

Live Demo

/* 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 

Вывод вышеуказанной программы будет следующим:

10
0
30

Копирование массивов

Все элементы массива могут быть скопированы в другой массив. Общий синтаксис этого выглядит следующим образом –

Newarray. = sourcearray. 

где

  • Newarray – это новый массив, в который необходимо скопировать элементы.

  • Sourcearray – это исходный массив, из которого необходимо скопировать элементы.

Newarray – это новый массив, в который необходимо скопировать элементы.

Sourcearray – это исходный массив, из которого необходимо скопировать элементы.

Пример того, как можно выполнять операции копирования для массивов, показан в следующей программе:

пример

Live Demo

/* 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 

Выход вышеупомянутой программы будет –

10
0
30

Перебор элементов массива

Элементы массива также могут быть повторены с помощью итерационных операторов, доступных в Rexx. Пример того, как это можно сделать, выглядит следующим образом:

пример

Live Demo

/* 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 

Следующие указатели должны быть отмечены о вышеупомянутой программе –

  • Цикл do используется для перебора элементов массива.

  • Переменная number_of_elements используется для хранения количества элементов в массиве.

  • Переменная j используется для итерации каждого элемента массива.

Цикл do используется для перебора элементов массива.

Переменная number_of_elements используется для хранения количества элементов в массиве.

Переменная j используется для итерации каждого элемента массива.

Выход вышеупомянутой программы будет –

10
20
30

Двумерные массивы

Также было упомянуто, что мы можем построить многомерные массивы в Rexx. Давайте посмотрим на пример того, как мы можем реализовать 2-мерный массив.

пример

Live Demo

/* Main program */ 
list.1 = 10 
list.1.1 = 11 
list.1.2 = 12 

say list.1 
say list.1.1 
say list.1.2 

Вывод вышеуказанной программы будет показан следующим образом:

10
11
12

О вышеприведенной программе необходимо отметить следующее:

  • Чтобы создать многомерный массив, мы можем использовать другой уровень индексации. Таким образом, в нашем примере мы использовали list.1.1 для создания другого внутреннего массива для значения индекса 1 массива списка.

Чтобы создать многомерный массив, мы можем использовать другой уровень индексации. Таким образом, в нашем примере мы использовали list.1.1 для создания другого внутреннего массива для значения индекса 1 массива списка.

Rexx – Петли

До сих пор мы видели утверждения, которые выполнялись одно за другим последовательно. Кроме того, в Rexx предоставляются операторы для изменения потока управления в логике программы. Затем они классифицируются в поток контрольных утверждений, которые мы подробно изучим.

Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз. Следующая иллюстрация – это общая форма оператора цикла в большинстве языков программирования.

петля

Давайте обсудим различные циклы, поддерживаемые Rexx.

Sr.No. Тип и описание петли
1 сделать цикл

Цикл do используется для выполнения ряда операторов в течение определенного количества раз. Количество раз, которое инструкция должна быть выполнена, определяется значением, переданным в цикл do.

2 цикл действия

Оператор do-while используется для имитации простого цикла while, присутствующего в других языках программирования.

3 цикл до-до

Цикл do-till является небольшим изменением цикла do while. Этот цикл зависит от того, что происходит, когда оцениваемое условие ложно.

Цикл do используется для выполнения ряда операторов в течение определенного количества раз. Количество раз, которое инструкция должна быть выполнена, определяется значением, переданным в цикл do.

Оператор do-while используется для имитации простого цикла while, присутствующего в других языках программирования.

Цикл do-till является небольшим изменением цикла do while. Этот цикл зависит от того, что происходит, когда оцениваемое условие ложно.

Контролируемое повторение

Циклы do могут быть обработаны для выполнения контролируемого повторения операторов.

Синтаксис

Общий синтаксис такого рода утверждений следующий.

do index = start [to limit] [by increment] [for count] 
statement #1 
statement #2 
end 

Разница в этом утверждении заключается в том, что существует индекс, который используется для управления количеством выполнений цикла. Во-вторых, есть параметры, которые указывают значение, с которого должен начинаться индекс, где он должен заканчиваться и каково значение приращения.

Схема потока

Давайте проверим блок-схему этого цикла –

Контролируемое повторение

Из приведенной выше диаграммы вы можете ясно видеть, что цикл выполняется на основе значения индекса и того, как значение индекса увеличивается.

Следующая программа является примером оператора контролируемого повторения.

пример

Live Demo

/* Main program */ 
do i = 0 to 5 by 2 
   say "hello" 
end 

В приведенной выше программе значение счетчика i сначала устанавливается на 0. Затем он увеличивается на 2, пока значение не станет больше 5.

Вывод приведенного выше кода будет –

hello 
hello 
hello 

Rexx – принятие решений

Структуры принятия решений требуют, чтобы программист определил одно или несколько условий, которые будут оцениваться или тестироваться программой.

На следующей диаграмме показана общая форма типичной структуры принятия решений, встречающейся в большинстве языков программирования.

Принятие решения

Существует оператор или операторы, которые должны быть выполнены, если условие определено как истинное , и, необязательно, другие операторы, которые должны быть выполнены, если условие определено как ложное .

Давайте посмотрим на различные заявления о принятии решений, доступные в Rexx.

Sr.No. Заявление и описание
1 Если заявление

Первое заявление о принятии решения – это утверждение if . Оператор if состоит из логического выражения, за которым следует один или несколько операторов.

2 Оператор if-else

Следующим оператором принятия решения является оператор if-else. За оператором if может следовать необязательный оператор else, который выполняется, когда логическое выражение имеет значение false.

Первое заявление о принятии решения – это утверждение if . Оператор if состоит из логического выражения, за которым следует один или несколько операторов.

Следующим оператором принятия решения является оператор if-else. За оператором if может следовать необязательный оператор else, который выполняется, когда логическое выражение имеет значение false.

Вложенные заявления If

Иногда требуется иметь несколько операторов if, встроенных друг в друга, как это возможно в других языках программирования. В Rexx также это возможно.

Синтаксис

if (condition1) then 
   do 
      #statement1 
   end 
else 
   if (condition2) then 
      do 
      #statement2 
   end

Схема потока

Блок-схема вложенных операторов if выглядит следующим образом:

Вложенный оператор If

Давайте возьмем пример вложенного оператора if

пример

Live Demo

/* 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 

Выход вышеупомянутой программы будет –

i is greater than 10 

Выберите Заявления

Rexx предлагает оператор выбора, который можно использовать для выполнения выражений на основе выходных данных оператора выбора.

Синтаксис

Общая форма этого утверждения –

select 
when (condition#1) then 
statement#1 

when (condition#2) then 
statement#2 
otherwise 

defaultstatement 
end 

Общая работа этого утверждения заключается в следующем –

  • Оператор select имеет диапазон операторов when для оценки различных условий.

  • Каждое предложение when имеет свое условие, которое необходимо оценить и выполнить следующий оператор.

  • Оператор else используется для запуска любого оператора по умолчанию, если предыдущий, когда условия не оцениваются как true .

Оператор select имеет диапазон операторов when для оценки различных условий.

Каждое предложение when имеет свое условие, которое необходимо оценить и выполнить следующий оператор.

Оператор else используется для запуска любого оператора по умолчанию, если предыдущий, когда условия не оцениваются как true .

Схема потока

Блок-схема оператора select выглядит следующим образом

Выберите заявление

Следующая программа является примером описания случая в Rexx.

пример

Live Demo

/* 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

Результатом вышеупомянутой программы будет –

i is greater than 10 

Rexx – номера

Rexx имеет следующие типы данных, когда дело доходит до чисел.

  • Целое число – строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число должно быть между -2147483648 и 2147483647 включительно.

  • Большое целое число – строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число должно быть между -9223372036854775808 и 2147483648 включительно или между 2147483648 и 9223372036854775807.

  • Десятичный – Один из следующих форматов –

    • Строка чисел, которая содержит десятичную точку, но не имеет идентификатора экспоненты, где p представляет точность, а s представляет масштаб десятичного числа, которое представляет строка. Первый символ может быть знаком плюс (+) или минус (-).

    • Строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число меньше -9223372036854775808 или больше 9223372036854775807.

  • Float – строка, представляющая число в научной нотации. Строка состоит из серии чисел, за которыми следует идентификатор экспоненты (E или e, за которым следует необязательный знак плюс (+) или минус (-) и серия чисел). Строка может начинаться со знака плюс (+) или минус (-).

Целое число – строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число должно быть между -2147483648 и 2147483647 включительно.

Большое целое число – строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число должно быть между -9223372036854775808 и 2147483648 включительно или между 2147483648 и 9223372036854775807.

Десятичный – Один из следующих форматов –

Строка чисел, которая содержит десятичную точку, но не имеет идентификатора экспоненты, где p представляет точность, а s представляет масштаб десятичного числа, которое представляет строка. Первый символ может быть знаком плюс (+) или минус (-).

Строка чисел, которая не содержит десятичной точки или идентификатора экспоненты. Первый символ может быть знаком плюс (+) или минус (-). Представленное число меньше -9223372036854775808 или больше 9223372036854775807.

Float – строка, представляющая число в научной нотации. Строка состоит из серии чисел, за которыми следует идентификатор экспоненты (E или e, за которым следует необязательный знак плюс (+) или минус (-) и серия чисел). Строка может начинаться со знака плюс (+) или минус (-).

Давайте теперь посмотрим на различные методы, доступные для чисел .

Sr.No. Доступные методы для чисел
1 ABS

Этот метод возвращает абсолютное значение введенного числа.

2 МАКСИМУМ

Этот метод возвращает максимальное значение из списка чисел.

3 MIN

Этот метод возвращает минимальное значение из списка чисел.

4 RANDOM

Этот метод возвращает случайное сгенерированное число.

5 ЗНАК

Возвращает 1, если число больше 0, или 0, если число равно 0, или -1, если число меньше 0.

6 TRUNC

Этот метод усекает число.

Этот метод возвращает абсолютное значение введенного числа.

Этот метод возвращает максимальное значение из списка чисел.

Этот метод возвращает минимальное значение из списка чисел.

Этот метод возвращает случайное сгенерированное число.

Возвращает 1, если число больше 0, или 0, если число равно 0, или -1, если число меньше 0.

Этот метод усекает число.

Rexx – Струны

Строки в Rexx обозначаются последовательностью символов. Следующая программа является примером строк –

Live Demo

/* Main program */ 
a = "This is a string" 
say a

Вывод вышеуказанной программы следующий:

This is a string 

Давайте обсудим некоторые методы, доступные в Rexx для строк.

Sr.No. Методы, доступные в Rexx для строк
1 оставил

Этот метод возвращает определенное количество символов слева от строки.

2 право

Этот метод возвращает определенное количество символов справа от строки.

3 длина

Этот метод возвращает количество символов в строке.

4 задний ход

Этот метод возвращает символы в обратном формате.

5 сравнить

Этот метод сравнивает 2 строки. Возвращает «0», если «string1» и «string2» идентичны. В противном случае он возвращает позицию первого символа, который не совпадает.

6 копии

Этот метод копирует строку n раз.

7 зиЬзЬг

Этот метод получает подстроку из определенной строки.

8 позиция

Этот метод возвращает позицию одной строки в другой.

9 delstr

Этот метод удаляет подстроку из строки.

Этот метод возвращает определенное количество символов слева от строки.

Этот метод возвращает определенное количество символов справа от строки.

Этот метод возвращает количество символов в строке.

Этот метод возвращает символы в обратном формате.

Этот метод сравнивает 2 строки. Возвращает «0», если «string1» и «string2» идентичны. В противном случае он возвращает позицию первого символа, который не совпадает.

Этот метод копирует строку n раз.

Этот метод получает подстроку из определенной строки.

Этот метод возвращает позицию одной строки в другой.

Этот метод удаляет подстроку из строки.

Rexx – Функции

Код в Rexx обычно делится на функции и подпрограммы. Использование функций помогает разделить код на множество логических единиц. Давайте посмотрим на эти функции подробно.

Определение функции

Синтаксис объявления функции следующий:

FunctionName: 
PARSE ARG arguement1, arguement2… arguementN 
Return value 

Куда,

  • Имя_функции – это имя, назначенное функции.

  • PARSE ARG – это ключевые слова в Rexx, которые используются, чтобы указать, что параметры передаются в функцию.

  • аргумент1, аргумент2… аргументN – это аргументы, переданные функции.

  • Возвращаемое значение – это значение, возвращаемое функцией.

Имя_функции – это имя, назначенное функции.

PARSE ARG – это ключевые слова в Rexx, которые используются, чтобы указать, что параметры передаются в функцию.

аргумент1, аргумент2… аргументN – это аргументы, переданные функции.

Возвращаемое значение – это значение, возвращаемое функцией.

Следующая программа является простым примером того, как функции используются в Rexx.

Live Demo

/* Main program */ 
say add(5,6) 
exit 
add: 
PARSE ARG a,b 
return a + b 

Следующие вещи должны быть отмечены о вышеупомянутой программе –

  • Мы определяем функцию с именем add, которая принимает 2 параметра a и b.

  • Функция использует оператор return для возврата суммы a и b.

  • Оператор выхода должен использоваться для обозначения конца основной программы.

Мы определяем функцию с именем add, которая принимает 2 параметра a и b.

Функция использует оператор return для возврата суммы a и b.

Оператор выхода должен использоваться для обозначения конца основной программы.

Результат вышеупомянутой программы будет следующим:

11

Работа с аргументами

В Rexx есть специальные функции, которые можно настроить для работы с аргументами. Давайте посмотрим на пару таких аргументов.

Arg

Этот метод используется для возврата количества аргументов, определенных для функции.

Синтаксис

arg() 

Параметры – Нет

Возвращаемое значение – этот метод возвращает количество аргументов, определенных для функции.

Пример

Live Demo

/* Main program */ 
say add(5,6) 
exit 
add: 
PARSE ARG a,b 

say arg() 
return a + b 

Вывод. Когда мы запустим указанную выше программу, мы получим следующий результат.

2 
11 

Arg (индекс)

Этот метод используется для возврата значения аргумента в определенной позиции.

Синтаксис

arg(index)

Параметр

  • Index – индекс позиции возвращаемого аргумента.

Index – индекс позиции возвращаемого аргумента.

Возвращаемое значение – этот метод возвращает значение аргумента в определенной позиции.

Пример

Live Demo

/* Main program */ 
say add(5,6) 
exit 
add: 
PARSE ARG a,b 

say arg(1) 
return a + b 

Вывод. Когда мы запустим указанную выше программу, мы получим следующий результат.

5 
11 

Рекурсивные функции

Рекурсивная функция или подпрограмма – это та, которая вызывает сама себя. Любая рекурсивная функция может быть закодирована традиционным нерекурсивным способом (или итеративно), но иногда рекурсия предлагает лучшее решение проблемы. Не все языки программирования поддерживают рекурсию; Rexx делает.

Давайте рассмотрим пример знаменитой факториальной программы, использующей рекурсивные функции в Rexx.

Live Demo

/* 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 ) 

Вывод вышеуказанной программы следующий:

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 

Rexx – Стеки

Стек иногда называют внешней очередью данных, но мы следуем общему использованию и называем его стеком. Это блок памяти, который логически является внешним по отношению к Rexx. Инструкции типа push и queue помещают данные в стек, а инструкции вроде pull и parse pull извлекают данные из него. Встроенная в очередь встроенная функция сообщает, сколько элементов в стеке.

Давайте посмотрим на пример стека.

/* 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

Первый цикл do в программе помещает три строки данных в стек. Для этого используется инструкция push. Мы нумеруем строки так, чтобы при их извлечении в порядке LIFO их порядок был очевиден.

Элементы, помещенные в стек с помощью инструкции push, извлекаются в порядке LIFO –

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

Поскольку три элемента были помещены в стек с помощью push, они извлекаются в порядке LIFO.

Вывод вышеуказанной программы будет следующим.

STACK: LINE #3 
STACK: LINE #2 
STACK: LINE #1   

Rexx – File I / O

Rexx предоставляет ряд методов при работе с I / O. Rexx предоставляет более простые классы для обеспечения следующих функций для файлов.

  • Чтение файлов
  • Запись в файлы
  • Видя, является ли файл файлом или каталогом

Функции, доступные в Rexx для файлового ввода-вывода, основаны как на строковом, так и на символьном вводе, и мы рассмотрим функции, доступные для обоих, подробно.

Давайте рассмотрим некоторые файловые операции, которые Rexx предлагает. Для целей этих примеров мы будем предполагать, что существует файл с именем NewFile.txt, который содержит следующие строки текста:

Example1

Example2

Example3

Этот файл будет использоваться для операций чтения и записи в следующих примерах. Здесь мы обсудим, как по-разному читать содержимое файла.

Чтение содержимого файла строка за раз

Общие операции с файлами выполняются с использованием методов, доступных в самой библиотеке Rexx. Чтение файлов является самой простой из всех операций в Rexx.

Давайте посмотрим на функцию, используемую для достижения этой цели.

LineIn

Этот метод возвращает строку из текстового файла. Текстовый файл – это имя файла, предоставляемое в качестве входного параметра функции.

Синтаксис

linein(filename) 

Параметр

  • filename – это имя файла, из которого нужно прочитать строку.

filename – это имя файла, из которого нужно прочитать строку.

Возвращаемое значение – этот метод возвращает одну строку файла за раз.

Пример

/* Main program */ 
line_str = linein(Example.txt) 
say line_str

Приведенный выше код довольно прост в том, что имя файла Example.txt предоставляется функции linein. Затем эта функция читает строку текста и предоставляет результат переменной line_str .

Вывод. Когда мы запустим указанную выше программу, мы получим следующий результат.

Example1

Чтение содержимого файла за один раз

В Rexx чтение всего содержимого файла может быть достигнуто с помощью оператора while. Оператор while будет читать каждую строку, одну за другой, пока не будет достигнут конец файла.

Пример того, как этого можно достичь, показан ниже.

/* Main program */ 
do while lines(Example.txt) > 0  
line_str = linein(Example.txt) 
say line_str 
end 

В приведенной выше программе необходимо отметить следующее:

  • Функция lines читает файл Example.txt .

  • Функция while используется для проверки наличия дополнительных строк в файле Example.txt.

  • Для каждой строки, прочитанной из файла, переменная line_str содержит значение текущей строки. Затем он отправляется на консоль в качестве вывода.

Функция lines читает файл Example.txt .

Функция while используется для проверки наличия дополнительных строк в файле Example.txt.

Для каждой строки, прочитанной из файла, переменная line_str содержит значение текущей строки. Затем он отправляется на консоль в качестве вывода.

Вывод. Когда мы запустим указанную выше программу, мы получим следующий результат.

Example1 
Example2 
Example3 

Запись содержимого в файл

Так же, как чтение файлов, Rexx также имеет возможность записи в файлы. Давайте посмотрим на функцию, которая используется для достижения этой цели.

оридор

Этот метод записывает строку в файл. Файл, в который должна быть записана строка, предоставляется в качестве параметра оператора lineout.

Синтаксис

lineout(filename) 

Параметр

  • filename – это имя файла, откуда должна быть записана строка.

filename – это имя файла, откуда должна быть записана строка.

Возвращаемое значение – этот метод возвращает состояние функции линейного выхода. Возвращаемое значение равно 0, если строка была успешно записана, иначе будет возвращено значение 1.

Пример

/* Main program */ 
out = lineout(Example.txt,"Example4") 

Вывод – всякий раз, когда запускается вышеуказанный код, строка «Example4» записывается в файл Example.txt .

Rexx – функции для файлов

В этой главе мы обсудим некоторые другие функции, доступные для файлов.

Sr.No. Функции для файлов
1 линии

Эта функция возвращает либо значение 1, либо количество строк, оставшихся для чтения во входном потоке. Имя файла задается в качестве входных данных для функции.

2 поток

Эта функция используется для проверки статуса файла. Иногда требуется проверить состояние файла перед его использованием. Если файл поврежден или недоступен, дальнейшие операции с файлом невозможны. Поэтому имеет смысл сначала проверить состояние файла.

3 Чарин

Эта функция используется для чтения по одному символу за раз из файла. Иногда программы требуют считывать файлы символьно, и, следовательно, эта функция может использоваться для этой цели.

4 символы

Эта функция возвращает либо 1, либо количество символов, оставшихся для чтения в самом файле. Имя файла упоминается как параметр функции.

5 charout

Эта функция используется для записи одного символа за раз в файл. Имя файла вводится в качестве параметра функции.

Эта функция возвращает либо значение 1, либо количество строк, оставшихся для чтения во входном потоке. Имя файла задается в качестве входных данных для функции.

Эта функция используется для проверки статуса файла. Иногда требуется проверить состояние файла перед его использованием. Если файл поврежден или недоступен, дальнейшие операции с файлом невозможны. Поэтому имеет смысл сначала проверить состояние файла.

Эта функция используется для чтения по одному символу за раз из файла. Иногда программы требуют считывать файлы символьно, и, следовательно, эта функция может использоваться для этой цели.

Эта функция возвращает либо 1, либо количество символов, оставшихся для чтения в самом файле. Имя файла упоминается как параметр функции.

Эта функция используется для записи одного символа за раз в файл. Имя файла вводится в качестве параметра функции.

Rexx – подпрограммы

На любом языке программирования вся программа разбита на логические модули. Это облегчает написание кода, который можно легко поддерживать. Это основное требование для любого языка программирования.

В Rexx модули могут быть написаны с использованием подпрограмм и функций. Давайте посмотрим на подпрограммы подробно.

Определение подпрограммы

Синтаксис объявления функции следующий:

FunctionName: 
   Statement#1 
   Statement#2 
   …. 
   Statement#N

Куда,

  • FunctionName – это имя, назначенное подпрограмме.

  • Оператор № 1. Оператор № N – это список операторов, из которых состоит подпрограмма.

FunctionName – это имя, назначенное подпрограмме.

Оператор № 1. Оператор № N – это список операторов, из которых состоит подпрограмма.

Следующая программа представляет собой простой пример, показывающий использование подпрограмм.

Live Demo

/* Main program */ 
call add 
exit 
add: 
a = 5 
b = 10 
c = a + b 
say c 

Следующие вещи должны быть отмечены о вышеупомянутой программе –

  • Мы определяем подпрограмму с именем add .

  • Подпрограмма выполняет простую функцию добавления.

  • Оператор выхода должен использоваться для обозначения конца основной программы.

Мы определяем подпрограмму с именем add .

Подпрограмма выполняет простую функцию добавления.

Оператор выхода должен использоваться для обозначения конца основной программы.

Результат вышеупомянутой программы будет следующим:

15

Работа с аргументами

Также возможно работать с аргументами в Rexx. Следующий пример показывает, как этого можно достичь.

Live Demo

/* Main program */ 
call add 1,2 
exit 
add: 
PARSE ARG a,b 
c = a + b 
say c

Следующие вещи должны быть отмечены о вышеупомянутой программе –

  • Мы определяем подпрограмму с именем add, которая принимает 2 параметра.

  • В подпрограммах 2 параметра анализируются с использованием ключевых слов PARSE и ARG.

Мы определяем подпрограмму с именем add, которая принимает 2 параметра.

В подпрограммах 2 параметра анализируются с использованием ключевых слов PARSE и ARG.

Результат вышеупомянутой программы будет следующим:

3

Различные методы для аргументов

Давайте посмотрим на некоторые другие методы, доступные для аргументов.

Arg

Этот метод используется для возврата количества аргументов, определенных для подпрограммы.

Синтаксис

arg() 

Параметры – Нет

Возвращаемое значение – этот метод возвращает количество аргументов, определенных для подпрограммы.

Пример

Live Demo

/* Main program */ 
call add 1,2 
exit 
add: 
PARSE ARG a,b 

say arg() 
c = a + b 
say c 

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

2 
3 

Arg (индекс)

Этот метод используется для возврата значения аргумента в определенной позиции.

Синтаксис

arg(index)

параметры

  • Index – индекс позиции возвращаемого аргумента.

Index – индекс позиции возвращаемого аргумента.

Возвращаемое значение – этот метод возвращает значение аргумента в определенной позиции.

Пример

Live Demo

/* Main program */ 
call add 1,2 
exit 
add: 
PARSE ARG a,b 

say arg(1) 
c = a + b 
say c 

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

1 
3 

Rexx – встроенные функции

Каждый язык программирования имеет несколько встроенных функций, которые помогают программисту выполнять некоторые рутинные задачи. Rexx также имеет много встроенных функций.

Давайте посмотрим на все эти функции, доступные в Rexx.

Sr.No. Функции, доступные в Rexx
1 АДРЕС

Этот метод возвращает имя среды, в которой в данный момент выполняются команды Rexx.

2 ЗВУК

Этот метод производит звук в системе с определенной частотой и продолжительностью.

3 Тип данных

Этот метод возвращает значение «NUM», если вход является допустимым числом, в противном случае он возвращает значение «CHAR». Вы также можете указать, хотите ли вы сравнить входное значение со значением NUM или CHAR. В каждом случае возвращаемое значение будет равно 1 или 0 в зависимости от результата.

4 ДАТА

Этот метод возвращает локальную дату в следующем формате.

5 ЦИФРЫ

Этот метод возвращает текущую настройку NUMERIC DIGITS, как определено в текущей системе.

6 ErrorText

Этот метод возвращает сообщение об ошибке Rexx, связанное с номером ошибки «errorno». Обратите внимание, что номер ошибки должен быть от 0 до 99. Это полезно в тех случаях, когда ваша программа возвратила код ошибки, и вы хотите знать, что означает код ошибки.

7 FORM

Этот метод возвращает текущую настройку «NUMERIC FORM», которая используется для математических вычислений в системе.

8 ВРЕМЯ

Этот метод возвращает местное время в 24-часовом формате, как показано в следующей программе.

9 ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ

Этот метод возвращает текущий идентификатор пользователя, вошедшего в систему.

10 XRANGE

Этот метод возвращает символы в диапазоне, указанном начальным и конечным символом.

11 х2д

Этот метод возвращает десятичное преобразование значения шестнадцатеричной строки .

12 x2c

Этот метод возвращает преобразование символа значения шестнадцатеричной строки.

Этот метод возвращает имя среды, в которой в данный момент выполняются команды Rexx.

Этот метод производит звук в системе с определенной частотой и продолжительностью.

Этот метод возвращает значение «NUM», если вход является допустимым числом, в противном случае он возвращает значение «CHAR». Вы также можете указать, хотите ли вы сравнить входное значение со значением NUM или CHAR. В каждом случае возвращаемое значение будет равно 1 или 0 в зависимости от результата.

Этот метод возвращает локальную дату в следующем формате.

Этот метод возвращает текущую настройку NUMERIC DIGITS, как определено в текущей системе.

Этот метод возвращает сообщение об ошибке Rexx, связанное с номером ошибки «errorno». Обратите внимание, что номер ошибки должен быть от 0 до 99. Это полезно в тех случаях, когда ваша программа возвратила код ошибки, и вы хотите знать, что означает код ошибки.

Этот метод возвращает текущую настройку «NUMERIC FORM», которая используется для математических вычислений в системе.

Этот метод возвращает местное время в 24-часовом формате, как показано в следующей программе.

Этот метод возвращает текущий идентификатор пользователя, вошедшего в систему.

Этот метод возвращает символы в диапазоне, указанном начальным и конечным символом.

Этот метод возвращает десятичное преобразование значения шестнадцатеричной строки .

Этот метод возвращает преобразование символа значения шестнадцатеричной строки.

Rexx – системные команды

Одним из самых больших преимуществ в Rexx является возможность создавать повторно используемые сценарии. В настоящее время в организациях часто использование повторно используемых сценариев является значительным преимуществом в экономии времени для выполнения распространенных повторяющихся задач.

Например, технологическим группам в ИТ-организации может понадобиться сценарий, который выполняет обычные повседневные задачи. Эти задачи могут включать взаимодействие с операционными системами. Затем эти сценарии можно запрограммировать на обработку неверных кодов возврата или ошибок.

Rexx предлагает множество системных команд, которые можно использовать для выполнения таких повторяющихся задач. Давайте посмотрим на некоторые системные команды, доступные в Rexx.

реж

Это обычная команда для просмотра каталогов, которая используется в Windows.

Синтаксис

dir

параметры

Никто

Возвращаемое значение

Этот метод возвращает текущий список каталогов в системе.

пример

/* Main program */ 
dir 

Вывод зависит от каталога в системе.

Следующая программа является лишь примером.

Выход

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 

Другой пример команды dir показан в следующей программе. Только на этот раз мы используем специальную переменную rc . Эта переменная является особенной в Rexx и дает вам статус выполнения системных команд. Если возвращаемое значение равно 0, то это означает, что команда выполнена успешно. В противном случае номер ошибки будет указан в имени переменной rc.

пример

Live Demo

/* Main program */ 
dir 
if rc = 0 then 
   say 'The command executed successfully' 
else 
   say 'The command failed, The error code is =' rc 

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

Выход

The command failed, The error code is = 127 

Команды перенаправления

Rexx также имеет возможность использовать команды перенаправления. Следующие команды перенаправления доступны в Rexx.

  • < – эта команда используется для ввода данных из файла.

  • > – Эта команда используется для вывода содержимого в файл. Если файл существует, он будет перезаписан.

  • >> – Это также используется для вывода содержимого в файл. Но вывод добавляется в конец файла, чтобы сохранить существующее содержимое файла.

< – эта команда используется для ввода данных из файла.

> – Эта команда используется для вывода содержимого в файл. Если файл существует, он будет перезаписан.

>> – Это также используется для вывода содержимого в файл. Но вывод добавляется в конец файла, чтобы сохранить существующее содержимое файла.

Давайте посмотрим на пример того, как мы можем использовать команды перенаправления. В следующем примере мы используем команду sort для сортировки файла с именем sortin.txt . Данные из файла отправляются в команду сортировки. Выходные данные команды сортировки затем отправляются в файл sortout.txt.

пример

/* Main program */ 
'sort <sortin.txt> sortout.txt' 

Предположим, что файл sortin.txt содержит следующие данные.

Выход

b 
c 
a

Файл sortout.txt будет содержать следующие данные.

a 
b 
c 

Функция АДРЕС

Этот метод используется для определения среды по умолчанию, используемой для потоков ввода, ошибок и вывода.

Синтаксис

ADDRESS(options) 

параметры

  • Параметры для того, что является адресом определенной системы.

Параметры для того, что является адресом определенной системы.

Возвращаемое значение

Этот метод возвращает имя среды для потоков ввода, ошибок и вывода.

пример

/* Main program */ 
say ADDRESS('I') 
say ADDRESS('O') 
say ADDRESS('E')

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

Выход

INPUT NORMAL 
REPLACE NORMAL 
REPLACE NORMAL

Rexx – XML

XML – это переносимый язык с открытым исходным кодом, который позволяет программистам разрабатывать приложения, которые могут быть прочитаны другими приложениями, независимо от операционной системы и / или языка разработки. Это один из самых распространенных языков, используемых для обмена данными между приложениями.

Что такое XML?

Расширяемый язык разметки XML – это язык разметки, очень похожий на HTML или SGML. Это рекомендуется Консорциумом World Wide Web и доступно в качестве открытого стандарта. XML чрезвычайно полезен для отслеживания небольших и средних объемов данных, не требуя магистрали на основе SQL.

Для всех наших примеров XML-кода давайте используем следующий простой XML-файл movies.xml для создания XML-файла и последующего чтения файла.

<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>

Начиная

По умолчанию функциональность xml не включена в интерпретатор Rexx. Для работы с XML в Rexx необходимо выполнить следующие шаги.

Загрузите следующие файлы –

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/

Извлеките все файлы и убедитесь, что они включены в системный путь.

Загрузка функций XML

После того, как все файлы в приведенном выше разделе были загружены и успешно зарегистрированы, следующим шагом является написание кода для загрузки функций Rexx XML. Это делается с помощью следующего кода.

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs

Следующие вещи можно отметить о вышеупомянутой программе –

  • Функция rxfuncadd используется для загрузки внешних библиотек. Функция xmlloadfuncs используется для загрузки всех библиотек из файла rexxxml в память.

  • Если значение rcc <> 0, то это приведет к ошибке. Для этого мы можем вызвать rxfuncerrmsg, чтобы получить более подробную информацию о сообщении об ошибке.

  • Наконец, мы обращаемся к xmlloadfuncs , чтобы все функции, связанные с xml, теперь можно было включить в программе Rexx.

Функция rxfuncadd используется для загрузки внешних библиотек. Функция xmlloadfuncs используется для загрузки всех библиотек из файла rexxxml в память.

Если значение rcc <> 0, то это приведет к ошибке. Для этого мы можем вызвать rxfuncerrmsg, чтобы получить более подробную информацию о сообщении об ошибке.

Наконец, мы обращаемся к xmlloadfuncs , чтобы все функции, связанные с xml, теперь можно было включить в программе Rexx.

Давайте посмотрим на различные методы, доступные для XML в Rexx .

xmlVersion

Этот метод возвращает версию библиотек XML и XSLT, используемых в системе.

Синтаксис

xmlVersion()

параметры

Никто

Возвращаемое значение

Этот метод возвращает версию библиотек XML и XSLT, используемых в системе.

пример

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs 
say xmlVersion() 

Когда мы запустим вышеуказанную программу, мы получим следующий результат. Это снова зависит от версии библиотек XML, используемых в системе.

Выход

1.0.0 20631 10126 

xmlParseXML

Эта функция используется для анализа данных XML, отправленных в функцию. Дерево документа возвращается функцией.

Синтаксис

xmlParseXML(filename) 

параметры

  • Имя файла – это имя файла XML, который необходимо проанализировать.

Имя файла – это имя файла XML, который необходимо проанализировать.

Возвращаемое значение

Дерево документа возвращается функцией. Иначе возвращает 0, если есть ошибка.

пример

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs 

say xmlVersion() 
sw = xmlParseXML('test.xml') 

Выход

Нет общего вывода.

xmlFindNode

Этот метод оценивает переданное ему выражение XPath . Это используется для синтаксического анализа дерева документов для получения набора узлов, который может быть обработан в дальнейшем.

Синтаксис

xmlParseXML(XPath,document) 

параметры

  • XPath – это путь к узлу в XML-файле.

  • документ – это документ XML

XPath – это путь к узлу в XML-файле.

документ – это документ XML

Возвращаемое значение

Оценивает выражение XPath и возвращает результат в виде набора узлов, который может быть использован позже.

пример

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)

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

Выход

4

Выходные данные показывают количество узлов фильма в нашем списке xml

xmlEvalExpression

Приведенный ниже метод используется для оценки выражения XPath и возврата в результате строки.

Синтаксис

xmlParseXML(XPath,Node) 

параметры

  • XPath – это путь к узлу в XML-файле.

  • документ – конкретный элемент узла.

XPath – это путь к узлу в XML-файле.

документ – конкретный элемент узла.

Возвращаемое значение

Строка возвращается на основе отправленного ей выражения XPath.

пример

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

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

Выход

War, Thriller 
Anime, Science Fiction 
Anime, Action 
Comedy 

Rexx – Регина

Regina – еще один интерпретатор Rexx, доступный для компиляции и запуска программ Rexx. Официальный сайт Регины – www.regina-rexx.sourceforge.net/

Regina Rexx Переводчик

Некоторые из преимуществ использования Regina следующие:

  • Regina может работать на любой платформе, будь то Windows, Linux или Mac OS.

  • Регина работает в соответствии со всеми доступными стандартами.

  • Регина имеет большое сообщество последователей и, следовательно, есть много форумов и учебных материалов, доступных для Регины.

  • У Regina есть много инструментов для написания и тестирования программ Rexx.

  • В Regina вы можете запускать команды, которые невозможны в Rexx Interpreter по умолчанию. Например, если вы включаете определенные параметры конфигурации, вы можете фактически выполнять базовые команды системного уровня, что невозможно в Rexx.

Regina может работать на любой платформе, будь то Windows, Linux или Mac OS.

Регина работает в соответствии со всеми доступными стандартами.

Регина имеет большое сообщество последователей и, следовательно, есть много форумов и учебных материалов, доступных для Регины.

У Regina есть много инструментов для написания и тестирования программ Rexx.

В Regina вы можете запускать команды, которые невозможны в Rexx Interpreter по умолчанию. Например, если вы включаете определенные параметры конфигурации, вы можете фактически выполнять базовые команды системного уровня, что невозможно в Rexx.

Когда вы устанавливаете Rexx через установку, описанную в главе 2 «Среда Rexx» , интерпретатор Regina устанавливается вместе с ним.

Теперь давайте рассмотрим некоторые из распространенных методов, доступных при использовании Regina. Эти функции являются расширенными функциями, которые недоступны при обычном использовании.

Чтобы использовать расширенные функции, вам нужно включить следующую строку кода. Это позволяет использовать расширенные функции Regina.

options arexx_bifs 

Во-вторых, во время работы всех программ Rexx используйте следующую команду.

regina main.rexx 

Куда,

  • regina – это интерпретатор, используемый для программ Rexx.

  • main.rexx – Ваша программа Rexx.

regina – это интерпретатор, используемый для программ Rexx.

main.rexx – Ваша программа Rexx.

Теперь мы подробно обсудим различные функции переводчика Regina Rexx .

Sr.No. Функции переводчика Regina Rexx
1 b2c

Этот метод используется для преобразования двоичного значения в строковое значение.

2 bitcomp

Метод используется для сравнения 2-битных строк, бит за битом.

3 bittst

Этот метод используется для указания состояния указанного бита в строке битов.

4 находить

Этот метод используется для поиска первого вхождения строки в другой строке.

5 GETENV

Этот метод возвращает значение переменной среды в системе.

6 GETPID

Этот метод используется для получения значения текущего идентификатора запущенного процесса.

7 гашиш

Этот метод возвращает атрибут хеша строки в виде десятичного числа. Он также обновляет внутреннее значение хеша строки.

8 обосновывать

Этот метод используется для добавления выравнивания или обрезки значения строки на основе значения длины.

9 PutEnv

Этот метод используется для установки значения переменной среды.

10 каталог

Этот метод получает значение текущего каталога в системе.

11 ChDir

Этот метод изменяет значение текущего рабочего каталога в системе.

12 Randu

Этот метод возвращает псевдослучайное число от 0 до 1.

Этот метод используется для преобразования двоичного значения в строковое значение.

Метод используется для сравнения 2-битных строк, бит за битом.

Этот метод используется для указания состояния указанного бита в строке битов.

Этот метод используется для поиска первого вхождения строки в другой строке.

Этот метод возвращает значение переменной среды в системе.

Этот метод используется для получения значения текущего идентификатора запущенного процесса.

Этот метод возвращает атрибут хеша строки в виде десятичного числа. Он также обновляет внутреннее значение хеша строки.

Этот метод используется для добавления выравнивания или обрезки значения строки на основе значения длины.

Этот метод используется для установки значения переменной среды.

Этот метод получает значение текущего каталога в системе.

Этот метод изменяет значение текущего рабочего каталога в системе.

Этот метод возвращает псевдослучайное число от 0 до 1.

Rexx – Разбор

Одна из самых мощных функций Rexx – это возможность разбирать текстовые значения. Вы, вероятно, не увидите этого на других языках программирования.

Общий формат оператора разбора следующий:

Синтаксис

PARSE {UPPER|LOWER|CASELESS} source {template} 

Куда,

  • UPPER – перед преобразованием источник преобразуется в верхний регистр.

  • LOWER – перед преобразованием источник преобразуется в нижний регистр.

  • CASELESS – при передаче этого параметра корпус игнорируется.

  • источник – это источник, который необходимо проанализировать. Для этого есть много вариантов, и может быть один из следующих:

    • ARG – Аргументы для программы или процедуры могут использоваться в качестве источника.

    • LINEIN – В качестве источника можно использовать ввод следующей строки.

    • ИСТОЧНИК – Исходная информация о программе может быть использована в качестве источника.

    • VAR name – в качестве источника можно использовать значение имени переменной.

  • template – этот параметр указывает, как анализировать источник. Есть много вариантов для этого. Некоторые из них упомянуты ниже.

    • имя переменной – это значение, присвоенное переменной.

    • буквальная строка – буквальная строка, которая может использоваться в качестве шаблона для разделения нити.

    • # – Абсолютная позиция символа в самом источнике. Поэтому, если вы укажете значение 5, будет использоваться 5- й символ.

    • + # – Относительная позиция символа в самом источнике. Поэтому, если вы укажете значение 5, 5- й символ будет использоваться относительно.

UPPER – перед преобразованием источник преобразуется в верхний регистр.

LOWER – перед преобразованием источник преобразуется в нижний регистр.

CASELESS – при передаче этого параметра корпус игнорируется.

источник – это источник, который необходимо проанализировать. Для этого есть много вариантов, и может быть один из следующих:

ARG – Аргументы для программы или процедуры могут использоваться в качестве источника.

LINEIN – В качестве источника можно использовать ввод следующей строки.

ИСТОЧНИК – Исходная информация о программе может быть использована в качестве источника.

VAR name – в качестве источника можно использовать значение имени переменной.

template – этот параметр указывает, как анализировать источник. Есть много вариантов для этого. Некоторые из них упомянуты ниже.

имя переменной – это значение, присвоенное переменной.

буквальная строка – буквальная строка, которая может использоваться в качестве шаблона для разделения нити.

# – Абсолютная позиция символа в самом источнике. Поэтому, если вы укажете значение 5, будет использоваться 5- й символ.

+ # – Относительная позиция символа в самом источнике. Поэтому, если вы укажете значение 5, 5- й символ будет использоваться относительно.

Давайте рассмотрим простой пример того, как можно выполнить синтаксический анализ в Rexx.

пример

Live Demo

/* Main program */ 
parse value 'This is a Tutorial' with word1 word2 word3 word4 
say "'"word1"'" 
say "'"word2"'" 
say "'"word3"'" 
say "'"word4"'" 

Вышеприведенная программа разбирает слова в фразе. Когда значение состоит из слов, которые разделены только одним пробелом, и нет начальных или конечных пробелов, значение легко разбить на известное количество слов следующим образом.

Функция синтаксического анализа используется в Rexx, чтобы получить строковое значение и затем разбить их на слова. В приведенном выше примере слова затем разделяются и затем сохраняются в слове переменных.

Результат вышеупомянутой программы будет следующим:

'This' 
'is' 
'a' 
'Tutorial' 

Другой пример синтаксического анализа показан в следующей программе. На этот раз мы используем предложение while для анализа.

пример

Live Demo

/* Main program */ 
phrase = 'This is a Tutorial' 

do while phrase <> '' 
   parse var phrase word phrase 
   say "'"word"'" 
   end 

Вышеуказанная программа даст следующий вывод –

'This' 
'is' 
'a' 
'Tutorial' 

Позиционный анализ

Rexx также позволяет работать с позиционным анализом. Давайте посмотрим пример того, как мы можем добиться позиционного анализа с помощью оператора parse.

пример

Live Demo

/* 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

Из приведенного выше примера вы можете заметить, что наряду с именем переменной мы также указываем, где должна заканчиваться строка. Таким образом, для name1 мы должны заканчиваться 11-м символом и затем начинать синтаксический анализ name2.

Вывод вышеуказанной программы будет следующим:

Doe 
John M. 
03/03/78 
Mumbai 
India

В этом случае вы также можете использовать относительный позиционный анализ .

пример

Live Demo

/* 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

Вывод вышеуказанной программы будет таким, как показано ниже.

Doe 
John M. 
03/03/78 
Mumbai 
India 

Rexx – Сигналы

В Rexx инструкция сигнала обычно используется для двух целей:

  • Одним из них является передача управления в другую часть программы. Обычно это похоже на метку перехода, которая используется в других языках программирования.

  • Другой – перейти к определенной метке ловушки.

Одним из них является передача управления в другую часть программы. Обычно это похоже на метку перехода, которая используется в других языках программирования.

Другой – перейти к определенной метке ловушки.

Если команда сигнала используется в любой из следующих команд команд, ожидающие управляющие структуры будут автоматически деактивированы.

  • если … тогда … еще …

  • сделать … конец

  • do i = 1 до n … end [и подобные циклы do]

  • выберите, когда … тогда … … и т. д. иначе … конец

если … тогда … еще …

сделать … конец

do i = 1 до n … end [и подобные циклы do]

выберите, когда … тогда … … и т. д. иначе … конец

Общий синтаксис оператора сигнала показан следующим образом:

Синтаксис

signal labelName  
   
signal [ VALUE ] labelExpression 

Давайте рассмотрим пример использования оператора сигнала.

пример

Live Demo

/* 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'

Вывод вышеуказанной программы будет таким, как показано ниже.

Выход

This is an incorrect number.

Если вы измените значение переменной n на целое число, как показано в следующей программе –

Live Demo

/* 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 ' 

Вы получите следующий вывод –

This is a whole number

Можно также перейти к значению метки, как показано в следующей программе –

Live Demo

/* 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 

Вывод вышеуказанной программы будет показан следующим образом:

This is the number 1

Активация / деактивация переноса метки-ловушки

Как мы упоминали ранее, инструкция сигнала также может использоваться для передачи управления метке прерывания.

Общий синтаксис передачи меток Trap дан следующим образом:

Синтаксис

signal ON conditionName [ NAME Label ] 
  
signal OFF conditionName

Куда,

  • conditionName – это условие, для которого сигнал должен быть либо включен, либо выключен.

  • Метка – дополнительная метка, на которую следует перенаправить программу.

conditionName – это условие, для которого сигнал должен быть либо включен, либо выключен.

Метка – дополнительная метка, на которую следует перенаправить программу.

Давайте посмотрим пример использования переноса метки ловушки.

пример

/* 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' 

В приведенном выше примере мы сначала включаем сигналы ошибки. Затем мы добавляем утверждение, которое приведет к ошибке. Затем у нас есть метка ошибки, отображающая пользовательское сообщение об ошибке.

Вывод вышеуказанной программы будет таким, как показано ниже:

An error has occurred.

Rexx – отладка

Отладка – важная особенность любого языка программирования. Это помогает разработчику диагностировать ошибки, находить основную причину и затем устранять их соответствующим образом. В Rexx утилита трассировки используется для отладки. Инструкция трассировки может быть реализована двумя способами: один – в пакетном режиме, а другой – в интерактивном режиме. Давайте посмотрим, как реализовать оба варианта.

Трассировка в пакетном режиме

Команда trace используется для предоставления подробного уровня каждой выполняемой команды Rexx.

Общий синтаксис оператора трассировки показан следующим образом:

Синтаксис

trace [setting] 

Где настройка может быть любой из следующих опций –

  • A – Отслеживает все команды.

  • C – Отслеживает только те команды хоста, которые отправляются в операционную систему.

  • E – Отслеживает только те команды хоста, которые были отправлены операционной системе и привели к ошибке.

  • F – отслеживает только те команды хоста, которые отправлены операционной системе, что привело к сбою.

  • I – обеспечивает промежуточный уровень трассировки команд Rexx.

  • L – эта опция, если вы хотите пометить трассировку, как это происходит.

  • N – это опция по умолчанию, при которой трассировка не происходит.

A – Отслеживает все команды.

C – Отслеживает только те команды хоста, которые отправляются в операционную систему.

E – Отслеживает только те команды хоста, которые были отправлены операционной системе и привели к ошибке.

F – отслеживает только те команды хоста, которые отправлены операционной системе, что привело к сбою.

I – обеспечивает промежуточный уровень трассировки команд Rexx.

L – эта опция, если вы хотите пометить трассировку, как это происходит.

N – это опция по умолчанию, при которой трассировка не происходит.

Давайте посмотрим на пример команды trace.

пример

Live Demo

/* 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 ' 

Вывод вышеуказанной программы будет следующим:

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

Из выходных данных вы можете видеть, что к выходным данным программы была добавлена ​​дополнительная трассировка. Следующие вещи можно отметить о выходе –

  • Номер строки вместе с выполненным оператором добавляется в вывод трассировки.

  • Каждая выполняемая строка отображается в выводе трассировки.

Номер строки вместе с выполненным оператором добавляется в вывод трассировки.

Каждая выполняемая строка отображается в выводе трассировки.

Функция трассировки

Трассировка также может быть включена с помощью функции трассировки. Общий синтаксис и пример приведены ниже.

Синтаксис

trace() 

Вышеуказанная функция возвращает текущий уровень трассировки.

параметры

Никто

Возвращаемое значение

Вышеуказанная функция выдает текущий уровень трассировки.

пример

Live Demo

/* 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 ' 

Вывод вышеуказанной программы будет следующим.

N 
This is an incorrect number 

Первая строка N обозначает, что для трассы установлено значение Normal.

Установка значения трассировки

Уровень трассировки можно установить с помощью функции трассировки. Общий синтаксис и пример приведены ниже.

Синтаксис

trace(travel_level) 

параметры

  • trace_level – это похоже на опции, доступные для установки уровня трассировки.

trace_level – это похоже на опции, доступные для установки уровня трассировки.

Возвращаемое значение

Вышеуказанная функция выдает текущий уровень трассировки.

пример

/* 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 ' 

Вывод вышеуказанной программы будет следующим:

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' 

Интерактивная трассировка

Интерактивное отслеживание заключается в том, что отслеживание выполняется во время работы программы. Точно так же, как в среде IDE, такой как Visual Studio для .Net, в которой вы можете добавить точки останова и посмотреть, как выполняется каждый оператор, аналогично здесь вы также можете увидеть программу при выполнении каждой строки кода.

Общий синтаксис выглядит следующим образом –

Синтаксис

trace ?options 

Где параметры для команды трассировки такие же, как показано ниже.

  • A – отслеживает все команды

  • C – Отслеживает только те команды хоста, которые отправляются в операционную систему.

  • E – Отслеживает только те команды хоста, которые были отправлены операционной системе и привели к ошибке.

  • F – отслеживает только те команды хоста, которые отправлены операционной системе, что привело к сбою.

  • I – обеспечивает промежуточный уровень трассировки команд Rexx.

  • L – эта опция, если вы хотите пометить трассировку, как это происходит.

  • N – это опция по умолчанию, при которой трассировка не происходит.

A – отслеживает все команды

C – Отслеживает только те команды хоста, которые отправляются в операционную систему.

E – Отслеживает только те команды хоста, которые были отправлены операционной системе и привели к ошибке.

F – отслеживает только те команды хоста, которые отправлены операционной системе, что привело к сбою.

I – обеспечивает промежуточный уровень трассировки команд Rexx.

L – эта опция, если вы хотите пометить трассировку, как это происходит.

N – это опция по умолчанию, при которой трассировка не происходит.

Давайте рассмотрим пример реализации активной трассировки.

пример

Live Demo

/* 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' 

Вывод вышеуказанной программы будет таким, как показано в следующей программе. Трассировка остановится на каждой строке кода; затем вам нужно нажать кнопку ввода, чтобы перейти к следующей строке кода.

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 – Обработка ошибок

Rexx имеет возможность также работать с обработкой ошибок, как и в других языках программирования.

Ниже приведены некоторые из различных состояний ошибки, которые видны в Rexx.

  • ОШИБКА – это происходит даже тогда, когда команда, отправляемая операционной системе, приводит к ошибке.

  • НЕИСПРАВНОСТЬ – это происходит даже тогда, когда команда, отправляемая операционной системе, приводит к сбою.

  • HALT – обычно поднимается, когда операция зависит от другой операции. Например, если по какой-либо причине операция ввода-вывода прекращается.

  • NOVALUE – это событие возникает, когда значение не было присвоено переменной.

  • NOTREADY – Это вызывается любым устройством ввода / вывода, которое не готово принять любую операцию.

  • SYNTAX – это событие возникает, если в коде есть какая-либо синтаксическая ошибка.

  • LOSTDIGITS – это событие возникает, когда арифметическая операция приводит к потере цифр во время операции.

ОШИБКА – это происходит даже тогда, когда команда, отправляемая операционной системе, приводит к ошибке.

НЕИСПРАВНОСТЬ – это происходит даже тогда, когда команда, отправляемая операционной системе, приводит к сбою.

HALT – обычно поднимается, когда операция зависит от другой операции. Например, если по какой-либо причине операция ввода-вывода прекращается.

NOVALUE – это событие возникает, когда значение не было присвоено переменной.

NOTREADY – Это вызывается любым устройством ввода / вывода, которое не готово принять любую операцию.

SYNTAX – это событие возникает, если в коде есть какая-либо синтаксическая ошибка.

LOSTDIGITS – это событие возникает, когда арифметическая операция приводит к потере цифр во время операции.

Ошибки захвата

Ошибки фиксируются с помощью команды сигнала. Давайте посмотрим на синтаксис и пример этого.

Синтаксис

signal on [Errorcondition]

Куда,

  • Условие ошибки – это условие ошибки, которое приведено выше.

Условие ошибки – это условие ошибки, которое приведено выше.

пример

Давайте посмотрим на пример по этому вопросу.

/* 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'

В приведенном выше примере мы сначала включаем сигналы ошибки. Затем мы добавляем утверждение, которое приведет к ошибке. Затем у нас есть метка ошибки, отображающая пользовательское сообщение об ошибке.

Вывод вышеуказанной программы будет таким, как показано ниже.

An error has occurred.

Пример кодов ошибок показан в следующей программе.

/* 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 

Вывод вышеуказанной программы будет таким, как показано ниже.

An error has occured 
40 
6

Rexx – объектно-ориентированный

Когда вы установите ooRexx согласно главе о среде, вы также сможете работать с классами и объектами. Обратите внимание, что весь следующий код должен быть запущен в интерпретаторе ooRexx. Обычный интерпретатор Rexx не сможет запустить этот объектно-ориентированный код.

Объявления класса и метода

Класс определяется с помощью следующего объявления синтаксиса.

Синтаксис

::class classname 

где classname – это имя, данное классу.

Метод в классе определяется следующим объявлением синтаксиса.

Синтаксис

::method methodname 

Где methodname – это имя, данное методу.

Свойство в классе определяется с помощью приведенного ниже объявления синтаксиса.

Синтаксис

::attribute propertyname 

Где propertyname – это имя, данное свойству.

пример

Ниже приведен пример класса в Rexx.

::class student 
::attribute StudentID 
::attribute StudentName 

Следующие пункты должны быть отмечены о вышеупомянутой программе.

  • Название класса – студент.
  • Класс имеет 2 свойства: StudentID и StudentName.

Методы получения и установки

Методы Getter и Setter используются для автоматической установки и получения значений свойств. В Rexx, когда вы объявляете свойство с ключевым словом attribute, методы getter и setter уже введены в действие.

пример

::class student 
::attribute StudentID 
::attribute StudentName 

В приведенном выше примере будут методы Getter и Setter для StudentId и StudentName.

Пример того, как их можно использовать, показан в следующей программе.

Live Demo

/* 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 

Вывод вышеуказанной программы будет таким, как показано ниже.

1 
Joe 

Методы экземпляра

Объекты могут быть созданы из класса с помощью оператора ~ new . Метод из класса может быть вызван следующим образом.

Object~methodname 

Где methodname – метод, который должен быть вызван из класса.

пример

В следующем примере показано, как можно создать объект из класса и вызвать соответствующий метод.

Live Demo

/* 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)) 

Вывод вышеуказанной программы будет таким, как показано ниже.

60 

Создание нескольких объектов

Можно также создать несколько объектов класса. Следующий пример покажет, как этого можно достичь.

Здесь мы создаем 3 объекта (st, st1 и st2) и вызываем их члены экземпляра и методы экземпляра соответственно.

Давайте посмотрим на пример того, как можно создать несколько объектов.

пример

Live Demo

/* 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)) 

Вывод вышеуказанной программы будет таким, как показано ниже.

60 
70 
60 

наследование

Наследование может быть определено как процесс, в котором один класс приобретает свойства (методы и поля) другого. С использованием наследования информация становится управляемой в иерархическом порядке.

Класс, который наследует свойства other, известен как подкласс (производный класс, дочерний класс), а класс, свойства которого наследуются, называется суперклассом (базовый класс, родительский класс).

Давайте посмотрим пример наследования в Rexx. В следующем примере мы создаем класс с именем Person . Оттуда мы используем ключевое слово subclass, чтобы создать класс Student как подкласс Person .

пример

Live Demo

/* 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)) 

Вывод вышеуказанной программы будет таким, как показано ниже.

60

Rexx – Переносимость

Переносимость является важным аспектом в любом языке программирования. Как известно, Rexx доступен в различных операционных системах, таких как Windows и Linux. Поэтому необходимо обеспечить, чтобы при разработке программы на платформе Windows были приняты необходимые меры предосторожности, если те же программы работают на платформе Linux.

Rexx имеет возможность запускать команды системного уровня. Есть команды, которые можно использовать, чтобы понять, в какой операционной системе он работает. Основываясь на результатах, он может затем предпринять соответствующие действия, чтобы увидеть, какие команды можно запустить в этой операционной системе.

пример

В следующем примере показано, как функции синтаксического анализа используются для получения сведений об операционной системе, в которой работает программа.

/* 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 

Выход будет варьироваться в зависимости от операционной системы. Пример вывода приведен ниже.

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 – Расширенные функции

Rexx предоставляет ряд расширенных функций, которые предоставляют широкий спектр функций, большинство из которых позволяют вам взаимодействовать с операционной системой. Давайте рассмотрим некоторые из них подробно, как описано ниже.

Sr.No. Расширенные функции
1 b2c

Эта функция преобразует двоичное значение в строковое значение.

2 bitclr

Эта функция используется для переключения указанного бита в двоичной строке в 0.

3 bitcomp

Эта функция используется для сравнения 2 двоичных строк, начиная с бита 0.

4 buftype

Эта функция используется для отображения содержимого стека, которое обычно используется в целях отладки.

5 крипта

Эта функция используется для шифрования строки.

6 вилка

Эта функция используется для запуска нового дочернего процесса в системе.

7 GETPID

Эта функция получает идентификатор текущего запущенного процесса.

8 гашиш

Эта функция возвращает хеш-значение строки.

Эта функция преобразует двоичное значение в строковое значение.

Эта функция используется для переключения указанного бита в двоичной строке в 0.

Эта функция используется для сравнения 2 двоичных строк, начиная с бита 0.

Эта функция используется для отображения содержимого стека, которое обычно используется в целях отладки.

Эта функция используется для шифрования строки.

Эта функция используется для запуска нового дочернего процесса в системе.

Эта функция получает идентификатор текущего запущенного процесса.

Эта функция возвращает хеш-значение строки.

Rexx – Инструкции

Rexx предоставляет ряд инструкций, которые предоставляют широкий спектр функций, большинство из которых позволяют вам взаимодействовать с операционной системой. Давайте рассмотрим некоторые из них подробнее.

Sr.No. Инструкция Rexx
1 адрес

Эта функция используется для отображения текущей командной среды.

2 падение

Эта функция используется для отмены назначения переменной.

3 интерпретировать

Интерпретирует или выполняет заданную инструкцию.

4 NOP

Эта функция означает не выполнять никаких операций. Эта команда обычно используется в операторах if .

5 Тянуть

Это используется для извлечения ввода из стека или из потока по умолчанию.

6 От себя

Это используется для помещения значения в стек Rexx.

Эта функция используется для отображения текущей командной среды.

Эта функция используется для отмены назначения переменной.

Интерпретирует или выполняет заданную инструкцию.

Эта функция означает не выполнять никаких операций. Эта команда обычно используется в операторах if .

Это используется для извлечения ввода из стека или из потока по умолчанию.

Это используется для помещения значения в стек Rexx.

Rexx – Реализации

Язык Rexx имеет много различных реализаций, как мы уже видели в предыдущих главах. Каждая реализация имеет свою функциональность. Давайте посмотрим на различные реализации, доступные для Rexx.

OoRexx

Это объектно-ориентированная версия Rexx. По умолчанию базовая реализация Rexx основана на процедурах. Но с ooRexx вы можете предложить большую гибкость, имея объектно-ориентированный подход к Rexx. Используя ooRexx, вы можете лучше использовать повторно, создавая повторно используемые классы и объекты.

Следующая программа является примером простой программы Rexx, которую можно запустить с помощью разработчика ooRexx.

пример

/* Main program */ 
say ‘hello’ 

Чтобы запустить эту программу, выполните следующую команду.

rexx main.rexx 

Когда вы запустите указанную выше команду, вы получите следующий вывод.

hello

NetRexx

Это для всех разработчиков на основе Java, поскольку предоставляет альтернативу на основе Java для языка Rexx. Таким образом, все объекты основаны на объектной модели Java. Преимущество этого фреймворка состоит в том, что, поскольку Java является широко распространенным языком, разработчикам становится проще использовать этот фреймворк. Таким образом, в этой реализации код Rexx преобразуется в программу Java, которую затем можно запустить на любой виртуальной машине Java.

Следующий код является примером программы NetRexx.

Создайте файл с именем main.nrx и поместите в него следующий код.

/* Main program */ 
say ‘hello’

Чтобы скомпилировать код, выполните следующую команду –

NetRexxC main.nrx 

Затем вы получите следующий вывод. NetRexxC – это компилятор, который преобразует программу Rexx в ее Java-эквивалент.

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

Теперь вы можете запустить вашу Java-программу, используя следующую команду Java.

java main 

Когда вы запустите указанную выше команду, вы получите следующий вывод.

Hello

Brexx

Это облегченная реализация Rexx. Это более легкий пакет, чем стандартная реализация Rexx. Но он по-прежнему обладает полной функциональностью Rexx.

Следующий код является примером программы BRexx.

/* Main program */ 
say ‘hello’

Чтобы запустить программу, выполните следующую команду.

rexx32 main.rexx

Когда вы запустите указанную выше команду, вы получите следующий вывод.

hello

Rexx – Netrexx

NetRexx – это Java-реализация Rexx. В NetRexx средство реализации используется для преобразования программы Rexx в программу Java, которую затем можно запустить на любой виртуальной машине Java.

Настройка NetRexx

Первый шаг в NetRexx – настроить его на локальном компьютере. Для этого необходимо выполнить следующие шаги:

Шаг 1 – Зайдите на сайт загрузки NetRexx – http://www.netrexx.org/downloads.nsp

NetRexx

Загрузите файл NetRexx.3.04.GA.

Шаг 2 – Убедитесь, что Java установлен и работает в вашей системе. Вы можете проверить, что Java работает, используя команду java – version.

Пример вывода показан ниже.

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) 

Шаг 3 – Распакуйте содержимое ZIP-файла Netrexx. Скопируйте файлы из папки NetRexx3.04GA \ lib в папку установки Java / lib / etc.

Шаг 4 – Добавьте путь NetRexx-3.04GA \ bin к переменной пути в системе.

Запуск первой программы NetRexx

Создайте файл с именем main.nrx и поместите в него следующий код.

/* Main program */ 
say ‘hello’ 

Чтобы скомпилировать код, выполните следующую команду.

NetRexxC main.nrx 

Затем вы получите следующий вывод. NetRexxC – это компилятор, который преобразует программу rexx в ее Java-эквивалент.

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

Теперь вы можете запустить вашу Java-программу, используя следующую команду Java.

java main 

Когда вы запустите указанную выше команду, вы получите следующий вывод.

Hello

Давайте теперь обсудим некоторые особые аспекты библиотеки Netrexx .

Индексированные строки

В NetRexx строки могут стать индексами для массивов. Пример показан ниже.

пример

/* Main program */ 
value = 'unknown' 
value['a'] = 'b' 
c = 'a' 
say value[c] 

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

Выход

b

Несколько индексов

В NetRexx вы можете иметь несколько индексов для массивов. Пример показан ниже.

пример

/* Main program */ 
value = 'null' 
value['a', 'b'] = 1 
say value['a', 'b']

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

Выход

1

Sr.No. Команда и описание
1 попросить команду

Эта команда используется для чтения строки из входного потока по умолчанию.

2 Команды цифр

Эта команда используется для отображения текущего значения значения цифр.

3 Форма команды

Эта команда используется для отображения текущего значения значения формы.

4 Команда длины

Эта команда используется для отображения длины строкового значения.

5 Команда версии

Эта команда используется для возврата текущей используемой версии NetRexx.

6 Команда трассировки

Эта команда используется для возврата текущей настройки трассировки, используемой NetRexx.

Эта команда используется для чтения строки из входного потока по умолчанию.

Эта команда используется для отображения текущего значения значения цифр.

Эта команда используется для отображения текущего значения значения формы.

Эта команда используется для отображения длины строкового значения.

Эта команда используется для возврата текущей используемой версии NetRexx.

Эта команда используется для возврата текущей настройки трассировки, используемой NetRexx.

Rexx – Brexx

BRexx – это более легкая реализация Rexx. Он по-прежнему обладает множеством функциональных возможностей, предлагаемых в рамках реализации Rexx.

Настройка BRexx

Первый шаг в BRexx – настроить его на локальном компьютере. Для этого необходимо выполнить следующие шаги:

Шаг 1. Перейдите на сайт загрузки BRexx – https://ftp.gwdg.de/pub/languages/rexx/brexx/html/rx.html.

BRexx

Перейдите в раздел загрузок и загрузите продукт.

Шаг 2 – Распакуйте содержимое архива Brexx.

Шаг 3 – Добавьте путь BRexx \ bin к переменной пути в системе.

Шаг 4 – Создайте новую переменную с именем RXLIB и укажите ее в папке lib в папке Brexx.

Запуск первой программы BRexx

Создайте файл с именем main.rexx и поместите в него следующий код.

/* Main program */ 
say ‘hello’ 

Чтобы запустить программу, выполните следующую команду.

rexx32 main.rexx 

Когда вы запустите указанную выше команду, вы получите следующий вывод.

hello

Давайте теперь обсудим некоторые из наиболее часто используемых функций, доступных в библиотеке BRexx.

Sr.No. Функции, доступные в библиотеке BRexx
1 команда acos

Эта команда используется для получения арккосинусного преобразования числа.

2 командование

Эта команда используется для получения косинусного преобразования числа.

3 Команда греха

Эта команда используется для получения синусоидального преобразования числа.

4 асин командование

Эта команда используется для получения преобразования числа в дугу-синус.

5 Тан Команда

Эта команда используется для получения касательного преобразования числа.

6 Атан Командование

Эта команда используется для получения преобразования арктангенса числа.

7 Команда mkdir

Эта команда используется для создания каталога в текущем рабочем каталоге.

8 Команда rmdir

Эта команда используется для удаления каталога в текущем рабочем каталоге.

9 команда dir

Эта команда используется для возврата всего списка каталогов.

Эта команда используется для получения арккосинусного преобразования числа.

Эта команда используется для получения косинусного преобразования числа.

Эта команда используется для получения синусоидального преобразования числа.

Эта команда используется для получения преобразования числа в дугу-синус.

Эта команда используется для получения касательного преобразования числа.

Эта команда используется для получения преобразования арктангенса числа.

Эта команда используется для создания каталога в текущем рабочем каталоге.

Эта команда используется для удаления каталога в текущем рабочем каталоге.

Эта команда используется для возврата всего списка каталогов.

Rexx – Базы данных

Rexx имеет возможность работать с различными базами данных, которые перечислены ниже.

  • HSQLDB
  • оракул
  • SQL Server
  • MySQL
  • MongoDB

Всю информацию о базах данных Rexx можно найти, нажав на следующую ссылку – https://rexxsql.sourceforge.net/

Базы данных

В нашем примере мы собираемся использовать MySQL DB в качестве образца. Поэтому первым шагом является загрузка необходимых драйверов с сайта Rexx SQL, чтобы программы Rexx могли соответствующим образом работать с SQL. Поэтому выполните следующие шаги, чтобы убедиться, что программы Rexx могут работать с базами данных MySQL.

Шаг 1. Перейдите на следующую страницу загрузки драйверов с сайта Rexx – https://sourceforge.net/projects/rexxsql/files/rexxsql/2.6/.

Шаг 2 – Загрузите драйверы MYSQL – rxsql26B3_my_w32_ooRexx

Шаг 3 – Распакуйте содержимое на локальный компьютер.

Шаг 4 – Добавьте путь к разархивированной папке в переменную path на вашем компьютере.

Для всех последующих примеров убедитесь, что следующие указатели на месте –

  • Вы создали базу данных TESTDB.

  • Вы создали таблицу EMPLOYEE в TESTDB.

  • В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.

  • Идентификатор пользователя “testuser” и пароль “test123” установлены для доступа к TESTDB.

  • Убедитесь, что вы загрузили файл jar mysql и добавили его в путь к классам.

  • Вы прошли учебник MySQL

Вы создали базу данных TESTDB.

Вы создали таблицу EMPLOYEE в TESTDB.

В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.

Идентификатор пользователя “testuser” и пароль “test123” установлены для доступа к TESTDB.

Убедитесь, что вы загрузили файл jar mysql и добавили его в путь к классам.

Вы прошли учебник MySQL

Подключение к базе данных

Чтобы установить соединение с базой данных, вам сначала потребуется библиотека Rexxsql, а затем используйте функцию SQLConnect для установления соединения с базой данных. Синтаксис и пример того, как этого можно достичь, приведены ниже.

Синтаксис

SQLConnect(cname,username,password,dbname) 

параметры

  • cname – это имя для подключения.

  • usernameимя пользователя для подключения к базе данных.

  • пароль – пароль для подключения к базе данных.

  • dbname – схема базы данных для подключения.

cname – это имя для подключения.

usernameимя пользователя для подключения к базе данных.

пароль – пароль для подключения к базе данных.

dbname – схема базы данных для подключения.

Возвращаемое значение

Значение, равное 0, будет означать, что соединение с базой данных успешно.

пример

/* Main program */ 
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs' 
Call SQLLoadFuncs 
say SQLConnect(c1,' testuser ',' test123','testdb')

Вывод вышеуказанной программы будет таким, как показано ниже.

0

Создание таблицы базы данных

Следующим шагом после подключения к базе данных является создание таблиц в нашей базе данных. В следующем примере показано, как создать таблицу в базе данных с помощью Rexx. Все команды в Rexx SQL выполняются с помощью функции SQLCommand.

Синтаксис

SQLConnect(sname,statement)

параметры

  • sname – это имя, которое нужно дать оператору для выполнения.

  • оператор – это оператор, который должен быть выполнен для базы данных.

sname – это имя, которое нужно дать оператору для выполнения.

оператор – это оператор, который должен быть выполнен для базы данных.

Возвращаемое значение

Значение, равное 0, будет означать, что команда была успешной.

пример

/* 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'

Вывод вышеуказанной программы будет таким, как показано ниже.

Connect Succedded 
Changed database to testdb 
Employee table created 

Операции над таблицей базы данных

Следующие типы операций чаще всего выполняются над таблицей базы данных.

Sr.No. Операция и описание
1 Операция вставки

Это необходимо, когда вы хотите создать свои записи в таблице базы данных.

2 Операция чтения

Операция READ для любой базы данных означает получение некоторой полезной информации из базы данных.

3 Операция обновления

Операция UPDATE в любой базе данных означает обновление одной или нескольких записей, которые уже доступны в базе данных.

4 Удалить операцию

Операция DELETE требуется, когда вы хотите удалить некоторые записи из вашей базы данных.

5 Закрытие соединения

Следующая команда может использоваться для закрытия соединения с базой данных.

Это необходимо, когда вы хотите создать свои записи в таблице базы данных.

Операция READ для любой базы данных означает получение некоторой полезной информации из базы данных.

Операция UPDATE в любой базе данных означает обновление одной или нескольких записей, которые уже доступны в базе данных.

Операция DELETE требуется, когда вы хотите удалить некоторые записи из вашей базы данных.

Следующая команда может использоваться для закрытия соединения с базой данных.

Выполнение транзакции

Транзакции – это механизм, который обеспечивает согласованность данных. Транзакции имеют следующие четыре свойства –

  • Атомарность – либо транзакция завершена, либо ничего не происходит вообще.

  • Согласованность – транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.

  • Изоляция – промежуточные результаты транзакции не видны за пределами текущей транзакции.

  • Долговечность – после совершения транзакции последствия сохраняются даже после сбоя системы.

Атомарность – либо транзакция завершена, либо ничего не происходит вообще.

Согласованность – транзакция должна начинаться в согласованном состоянии и оставлять систему в согласованном состоянии.

Изоляция – промежуточные результаты транзакции не видны за пределами текущей транзакции.

Долговечность – после совершения транзакции последствия сохраняются даже после сбоя системы.

Вот простой пример реализации транзакций.

пример

/* 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

Вывод вышеуказанной программы будет таким, как показано ниже.

Connect Succedded 
Changed database to testdb 
COMMITTED

Совершить операцию

Операция commit – это то, что сообщает базе данных, что нужно продолжить операцию и завершить все изменения в базе данных. В нашем примере выше это достигается с помощью следующей команды.

Sqlcommit() 

Операция отката

Если вы не удовлетворены одним или несколькими изменениями и хотите полностью отменить эти изменения, используйте метод отката. В нашем примере выше это достигается с помощью следующей команды.

SqlRollback() 

Rexx – Ручное и встроенное программирование

Портативные устройства прошли долгий путь, и у Rexx есть много способов, которыми он может работать на этих устройствах. Rexx поддерживает Pocket PC, Palm, PDA и другие устройства для смартфонов. Преимущество Rexx в работе на этих платформах заключается в том, что Rexx – это действительно небольшая система программирования, которая работает всего в нескольких килобайтах. Следовательно, становится проще запускать программы Rexx на этих устройствах.

Rexx на портативных устройствах может работать в следующих режимах:

  • Первый режим – это собственный узел, где он работает непосредственно в самой операционной системе. Преимущество работы в этом режиме заключается в том, что он работает быстрее, так как работает непосредственно от операционной системы.

  • Следующий режим находится поверх DOS или программы-эмулятора поверх портативного устройства. Преимущество этого режима в том, что он может работать в любой операционной системе, если эмулятор работает в этой операционной системе.

Первый режим – это собственный узел, где он работает непосредственно в самой операционной системе. Преимущество работы в этом режиме заключается в том, что он работает быстрее, так как работает непосредственно от операционной системы.

Следующий режим находится поверх DOS или программы-эмулятора поверх портативного устройства. Преимущество этого режима в том, что он может работать в любой операционной системе, если эмулятор работает в этой операционной системе.

Переводчики Rexx для различных категорий портативных устройств показаны ниже.

  • Windows CE – Brexx
  • Palm OS – Rexx для Palm OS
  • Symbian OS – Regina

Для эмулятора DOS необходимо выполнить следующие шаги:

Шаг 1 – Сначала загрузите PocketDOS, который является популярным эмулятором DOS. Он предназначен для работы во многих операционных системах и имеет поддержку общих экранов VGA, а также последовательных и параллельных портов.

Шаг 2 – Следующий шаг – загрузка файлов BRexx для 16-битной DOS на ПК с Windows.

Шаг 3 – Последний шаг – использовать ActiveSync для синхронизации программы Rexx с карманным устройством.

Доступны и другие коммерческие продукты на базе DOS. XTM – продукт, который подпадает под эту категорию. Особенности этого продукта следующие –

  • Поддержка 80186 CPU и набора команд.

  • Это отчасти работает с кодом BIOS для лучшей производительности.

  • Он может обеспечить эмуляцию для Math-сопроцессора, версия 8087 MPU

  • Предоставляет доступ к последовательным портам.

  • Он поддерживает различные языки, такие как английский, французский и немецкий.

Поддержка 80186 CPU и набора команд.

Это отчасти работает с кодом BIOS для лучшей производительности.

Он может обеспечить эмуляцию для Math-сопроцессора, версия 8087 MPU

Предоставляет доступ к последовательным портам.

Он поддерживает различные языки, такие как английский, французский и немецкий.

Rexx – Производительность

Одним из ключевых аспектов любого языка программирования является производительность приложения. Необходимо позаботиться о том, чтобы производительность приложения не пострадала. Давайте посмотрим на некоторые из соображений, описанных в шагах для лучшего понимания –

Шаг 1. Попробуйте уменьшить количество инструкций. В Rexx каждая инструкция несет накладные расходы. Поэтому постарайтесь уменьшить количество инструкций в вашей программе. Пример инструкций, которые могут быть переработаны, показан ниже.

Вместо использования нескольких операторов if else можно использовать оператор parse. Как и в следующей программе, вместо условия if для каждого значения и получения значений word1, word2, word3 и word4, используйте оператор parse.

/* Main program */  

parse value 'This is a Tutorial' with word1 word2 word3 word4 
say "'"word1"'" 
say "'"word2"'" 
say "'"word3"'" 
say "'"word4"'" 

Шаг 2 – Попробуйте объединить несколько утверждений в одно утверждение. Пример показан ниже.

Предположим, если у вас есть следующий код, который выполнил присваивание для – a и b и передал его в метод с именем proc .

do i = 1 to 100 
   a = 0 
   b = 1 
   call proc a,b 
end

Вы можете легко заменить приведенный выше код следующим кодом, используя оператор parse.

do i = 1 for 100 
   parse value 0 1 with 
   a, 
   b, 
   call proc a,b 
end 

Шаг 3 – Попробуйте по возможности заменить цикл do..to на цикл do..for . Обычно это рекомендуется, когда управляющая переменная повторяется в цикле.

/* Main program */ 
do i = 1 to 10 
   say i 
end 

Вышеуказанная программа должна быть заменена следующей.

/* Main program */ 
do i = 1 for 10 
   say i 
end

Шаг 4 – Если возможно, удалите условие for из цикла do, как показано в следующей программе. Если переменная управления не требуется, просто поместите конечное значение в цикл do, как показано ниже.

/* Main program */ 
do 10 
   say hello 
end

Шаг 5 – В предложении select все, что вы считаете наилучшим условием, которое должно быть оценено, должно быть помещено первым в предложении when . Таким образом, в следующем примере, если мы знаем, что 1 является наиболее частым вариантом, мы помещаем предложение when 1 в качестве первого предложения в операторе select.

/* Main program */ 
select 
   when 1 then say'1' 
   when 2 then say'2' 
   otherwise say '3' 
end 

Rexx – лучшие практики программирования

Каждый программист хочет, чтобы их программа была лучшей, когда речь заходит о качестве и эффективности. Ниже приведены некоторые из лучших практик программирования или советы при написании программ Rexx, которые могут помочь в достижении этих целей.

Подсказка 1

Используйте команду address, прежде чем вводить какую-либо команду для операционной системы или командной строки. Это поможет вам заранее получить адресное пространство в памяти и повысить эффективность вашей программы.

Пример адресной команды показан ниже.

пример

/* Main program */ 
address system dir 

Вывод команды следующий, но он может варьироваться от системы к системе.

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

Подсказка 2

Убедитесь, что все команды для операционной системы в верхнем регистре и в кавычках, где это возможно.

Пример того же показан ниже.

пример

/* Main program */ 
options arexx_bifs 
say chdir('\REXXML100') 
say directory()

Когда мы запустим вышеуказанную программу, мы получим следующий результат.

0 
D:\rexxxml100 

Подсказка 3

Избегайте создания больших блоков комментариев, как показано в следующей программе.

пример

/******/ 
/* */ 
/* */ 
/* */ 
/******/ 
/* Main program */ 
address system dir

Подсказка 4

Используйте оператор Parse для назначения значений по умолчанию. Пример того же показан ниже.

пример

parse value 0 1 with 
a, 
b 

Подсказка 5

По возможности используйте оператор «Left (var1,2)» вместо оператора «substr (var1,1,2)».

Подсказка 6

По возможности используйте оператор «Right (var1,2)» вместо оператора «substr (var1, length (var1), 2)»).

Rexx – графический интерфейс пользователя

Для использования графических пользовательских интерфейсов, доступных в Rexx, необходимо использовать 2 пакета, один называется ActiveTcl, а другой – пакет Rexxtk . Наряду с этими двумя пакетами можно создавать обычные формы, в которых могут быть кнопки и другие элементы управления.

Настройка среды

Первое, что нужно сделать, это настройка среды. Давайте пройдем следующие шаги, чтобы создать среду.

Шаг 1 – Загрузите пакет Activetcl со следующего сайта – https://www.activestate.com/activetcl

Активное состояние

Шаг 2 – Следующий шаг – начать установку ActiveTCl. Нажмите на кнопку Далее на экране, чтобы продолжить.

Установка Active TCI

Шаг 3 – Примите лицензионное соглашение и нажмите кнопку Далее.

Принять лицензионное соглашение

Шаг 4 – Выберите место для установки и нажмите на следующую кнопку.

Место для установки

Шаг 5 – Выберите место для установки демоверсии и нажмите кнопку «Далее».

демо

Шаг 6 – Нажмите на кнопку Далее, чтобы продолжить установку.

Нажмите кнопку "Далее

Шаг 7 – Нажмите кнопку Готово, чтобы завершить установку.

Нажмите Готово

Шаг 8. Следующий шаг – загрузка программного обеспечения Rexxtk по следующей ссылке – https://sourceforge.net/projects/rexxtk/.

Шаг 9 – Дважды щелкните файл установщика по ссылке на предыдущем шаге, чтобы начать установку. Нажмите на следующую кнопку, чтобы продолжить.

Установочный файл

Шаг 10 – На следующем экране нажмите кнопку Да, чтобы принять лицензионное соглашение.

Нажмите Да

Шаг 11 – На следующем экране выберите место для установки и нажмите кнопку «Далее».

Выберите место

Шаг 12 – Выберите папку с программой и нажмите на кнопку «Далее».

Расположение папки программы

После завершения установки мы можем начать программирование графического интерфейса в Rexx.

Основная программа

Давайте посмотрим, как мы можем разработать простую базовую программу с Rexx в формате графического интерфейса пользователя.

пример

/* Main program */ 
call RxFuncAdd 'TkLoadFuncs','rexxtk','TkLoadFuncs' 
call TkLoadFuncs 
do forever 
   interpret 'Call' TkWait() 
end 
call TkDropFuncs 
exit 0 

Следующие вещи должны быть отмечены о вышеупомянутой программе –

  • Библиотека Rexxtk и все ее функции загружаются с помощью команды RxFuncAdd.

  • Цикл do forever будет держать окно открытым и будет ждать ввода пользователя.

  • Как только пользовательский ввод будет обнаружен, программа закроется.

Библиотека Rexxtk и все ее функции загружаются с помощью команды RxFuncAdd.

Цикл do forever будет держать окно открытым и будет ждать ввода пользователя.

Как только пользовательский ввод будет обнаружен, программа закроется.

Когда вышеуказанная программа будет выполнена, вы получите следующий вывод.

Выход

Создание меню

Меню создаются с помощью функций TkMenu и TkAdd. Синтаксис этих функций приведен ниже.

Синтаксис

TkMenu(widgetname,options,0) 

параметры

Widgetname – имя для меню.

Возможны следующие варианты:

  • selectcolor – если в качестве параметров меню используются флажки или переключатели, то этот параметр указывает цвет, который нужно выбрать при выборе любого параметра меню.

  • tearoff – эта опция используется для добавления подменю в главное меню.

  • title – Строка, которая должна использоваться, чтобы дать окну заголовок.

selectcolor – если в качестве параметров меню используются флажки или переключатели, то этот параметр указывает цвет, который нужно выбрать при выборе любого параметра меню.

tearoff – эта опция используется для добавления подменю в главное меню.

title – Строка, которая должна использоваться, чтобы дать окну заголовок.

Возвращаемое значение

Дескриптор к созданному меню.

пример

/* 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

Следующие вещи должны быть отмечены о вышеупомянутой программе –

  • Меню создается с помощью функции TkMenu. Параметр tearoff означает, что нам нужно создать подменю, которое будет прикреплено к главному меню.

  • Затем мы добавляем 2 пункта меню под названием «Файл» и «Открыть» с помощью функции TkAdd.

Меню создается с помощью функции TkMenu. Параметр tearoff означает, что нам нужно создать подменю, которое будет прикреплено к главному меню.

Затем мы добавляем 2 пункта меню под названием «Файл» и «Открыть» с помощью функции TkAdd.

Когда вышеуказанная программа будет выполнена, вы получите следующий вывод.

Выходной файл

Rexx – Реджинальд

Reginald – еще один интерпретатор Rexx, разработанный Джеффом Глантом, с некоторыми настройками запуска программ Rexx. В этом разделе мы увидим, как настроить Reginald и запустить в нем несколько программ Rexx.

Настройка среды

Первым шагом является настройка среды, которая заключается в загрузке файлов Reginald. Это можно сделать по следующей ссылке на сайте: http://www.manmrk.net/tutorials/rexx/Reginald/win32/rxusrw32.htm.

Реджинальд

После завершения загрузки и запуска установщика на следующем экране вы сможете выбрать место установки.

Нажмите кнопку Установить, чтобы продолжить.

Установить Реджинальд

После завершения мы можем теперь запустить одну программу-пример в интерпретаторе Реджинальда. Создайте простую программу, как показано ниже.

/* Main program */ 
say 'Hello' 

Затем выполните следующую команду –

RxLaunch.exe main.rexx 

Затем вы получите следующий вывод. Эта программа теперь будет работать в интерпретаторе Реджинальда.

Реджинальд Переводчик

Другие доступные функции

Помимо обычных команд Rexx, у Реджинальда были некоторые специальные команды, разработанные специально для операционной системы Windows. DriveMap является одной из таких команд –

DriveMap

Эта функция дает информацию о диске.

Синтаксис

Drivemap(,options) 

Параметры

Параметры – это список ключевых слов, которые можно использовать для получения различной информации о дисках локального компьютера.

Возвращаемое значение

Строковое значение, содержащее информацию на диске.

Пример

/* Main program */ 
say 'Drives on system : ' DriveMap(,'FIXED') 

Если вышеуказанная программа запущена, вы получите следующий вывод. Этот вывод зависит от системы к системе.

List of disk drives :  C:\ D:\ 

Rexx – веб-программирование

У Rexx есть возможность работать и с веб-серверами. Наиболее распространенным является веб-сервер Apache. Чтобы использовать Rexxw с веб-сервером Apache, сначала необходимо загрузить модули Rexx по следующей ссылке – https://sourceforge.net/projects/modrexx/?source=typ_redirect.

После этого обязательно добавьте модули mod Rexx в путь классов.

Следующие строки необходимо добавить и изменить в файле конфигурации Apache.

Следующие строки должны быть добавлены в конце соответствующего –

  • httpd.conf LoadModule list.
  • LoadModule rexx_module modules / mod_rexx.dll

Следующие строки должны быть добавлены в конец файла http.conf .

  • Приложение AddType / x-httpd-rexx-script .rex .rexx

  • Приложение AddType / x-httpd-rexx-rsp .rsp

  • Добавьте их для поддержки страницы сервера REXX

  • RexxRspCompiler «c: / Program Files / Apache Group / Apache2 / bin / rspcomp.rex»

Приложение AddType / x-httpd-rexx-script .rex .rexx

Приложение AddType / x-httpd-rexx-rsp .rsp

Добавьте их для поддержки страницы сервера REXX

RexxRspCompiler «c: / Program Files / Apache Group / Apache2 / bin / rspcomp.rex»

После внесения вышеуказанных изменений вам необходимо завершить работу и перезапустить веб-сервер apache.

Вышеуказанные строки также позволяют вам иметь серверные страницы на основе Rexx так же, как страницы сервера Java. Вы можете добавить код Rexx непосредственно на html-страницы.

Пример показан ниже –

<p>The current date and time is 
   <?rexx 
      /* Inserting the rexx statement */ 
      say date() time() 
   ?>
</p>

Когда запускается страница сервера на основе Rexx, выполняются следующие действия:

  • Сначала создается временный файл.

  • Затем компилятор сервера Rexx компилирует файл в программу Rexx и помещает его во временный файл.

  • Следующим шагом является запуск программы Rexx.

Сначала создается временный файл.

Затем компилятор сервера Rexx компилирует файл в программу Rexx и помещает его во временный файл.

Следующим шагом является запуск программы Rexx.

Наконец, временный файл удаляется.