[[ header START ]]
telegram

Форум обсуждение

telegram

Send message

telegram

[ +7-981-8529467 (Санкт-Петербург)

telegram

t.me/os2_guru

eComStation.RU


ru · en · de · es · it · pt · cz · pl · fr
OS/2 - это совершенно другая операционная система для PC (ArcaOS, eComStation, IBM OS/2 Warp)
Программы, новости, статьи, поддержка пользователей, оборудование, вопросы и ответы.
 
[Что такое OS/2?  Новости  Установка  Обновление  
 
 
Применение  Будущее  Сообщество  Проекты  

eCo Software
не получает вознаграждение
из США

[Как заработать в OS/2?

Как купить OS/2 дискету?

Идеи для фанатов OS/2

*

 
Обновление

 
Программы

 
(Санкт-Петербург)

 
Преимущества (1)

 
Разработчику (1)

 
(Пайпы программ)

 
Компании: (1)

 
История (1):

 
(Бонусы)

 
Советы:

 
(Барьеры и решения)

 
Технологии: (1)

 
(Применение в науке, лаборатории, ..)

 

 
Готовые решения:

 
Новая eComStation:

 
Будущее: (1)

 
(Ссылки на другие сайты)

 
(Картинка дня)

 
Артефакты OS/2

 
Гаджеты

ArcaOS 5.0 Русская версия
Пакет русификации ArcaOS 5.0 OS/2 давно доступен. Поддерживается любая версия: 5.0, 5.0.1, 5.0.2.

eCo Software может выпустить и другие пакеты (Немецкий, Голландский, Бразильский Португальский, Испанский, Шведский и т.д.)

Использование REXX в IBM Works


TITLE: Использование REXX в IBM Works

DATE: 2002-01-04 23:31:34

AUTHOR: Timur Kazimirov

К сожалению, в документации IBM Works не сделан акцент на то, что при работе с таблицами IBM Works можно создавать и использовать свои собственные функции, написанные на REXX. Советую начать изучение этого вопроса с каталога IBM Works, в котором лежат готовые примеры таких функций (например, файл RANDOM.FNC) - не поленитесь и посмотрите насколько все просто. Как это обычно бывает в случае с IBM, не все детали расписаны в справочниках, поэтому приходится доходить до всего самому. Итак, как же все это делается...

Формат вызова собственной функции

Тут все довольно просто. В нужной ячейке введите функцию:

=rexx("имя файла", тип ответа, кол-во аргументов, список аргументов)

При этом, в зависимости от национальных настроек символа разделителя списка, может использоваться запятая или точка с запятой (как система настроена, так и будет). По умолчанию, если при установке вы указали страну 'Россия', то надо будет использовать точку с запятой. Пример ввода (на моей машине):

=rexx("C:\USER\тест на вшивость.RXX";0;1;A1)

Здесь:

"Имя файла"
название файла *в двойных кавычках* с телом вашей функции. Можно указать полный путь или относительный (относительно каталога, в котором находятся программы IBM Works). Расширение файла роли не играет. Имя файла может содержать пробелы.
Тип ответа
Тут вариантов всего лишь два:
0 - если результат вашей функции будет числом;
1 - если возвращается строка (вместо 1 может стоять любое другое, отличное от нуля число).
Количество аргументов
Число, указывающее, сколько аргументов вы передаете вашей функции. Если функция не требует аргументов, то укажите ноль.
Список аргументов
Сами аргументы, передаваемые в вашу функцию. Их количество должно быть таким же, каким вы его указали в предыдущем аргументе, в противном случае вы получите сообщение об ошибке. Что касается самих параметров, то это могут быть:
  • Числа в соответствии с текущими национальными настройками (Например, число 16,4). Даты передаются как числа.
  • Строки передаются в двойных кавычках. Примеры: "Строка1", "Narrow->"
  • Названия ячеек. В этом случае в функцию будет передан результат, содержащийся в указанной ячейке. К сожалению, нельзя передать интервал ячеек. Адресация ячеек может быть как абсолютной, так и относительной. Примеры: A1, $B$8
  • Выражения. Сначала они будут вычислены, после чего результат будет передан в вашу функцию. В выражениях могут участвовать названия ячеек (как абсолютные, так и относительные).

Разбор параметров внутри функции

Разбор параметров нужно выполнять через стандартную конструкцию ARG.... Единственные 'грабли', которые могут встретиться на пути, связаны с национальными настройками. Сам по себе, REXX считает в выражениях числа числами, только если они представлены в форме "xxx.yyy", а если вы передаете ему дробное число "12,6" (заметьте запятую в случае, если текущая страна - Россия), то в теле функции надо это дело поправить - например функцией TRANSLATE, то есть

argvar = TRANSLATE(argvar, ".", ",")

Вторая проблема: IBM Works передает параметры как есть. Например, если в ячейке B1, которая будет аргументом для вашей функции, стоит число 12, но формат отображения указан как денежный и отображается на самом деле '12,00р.', то аргумент окажется строкой '12,00р' (со всеми вытекающими последствиями). Чтобы это избежать, умножьте B1 на единицу. То есть:

=rexx("myfunc.fnc";0;1;B1)

надо заменить на

=rexx("myfunc.fnc";0;1;B1*1)

Тоже самое относится и к процентному представлению чисел. Приходится помнить еще и о том, что даты представляются как числа, однако если в ячейке стоит "28.Дек.01", то и в вашу функцию будет передана именно эта строка, а не "37253.661". Если вы хотите передать числовое представление даты, то умножьте дату на единицу. Учтите, что в теле функции все равно прийдется еще раз править запятую на точку. Ну, а если вам все это сильно не нравится, то меняйте национальные настройки представления чисел (что я всегда и делаю).

Тело функции и возвращаемое значение

Сама функция - это обычная программа на REXX (файл должен начинаться с комментария /*.......*/). Внутри своей функции вы можете творить все что вам хочется - от простого суммирования, до подгрузки библиотеки RxSock, установления HTTP-соединения и запроса какого-либо ресурса с веб-сервера. А результат функции возвращается как обычно - через RETURN значение. Не завершайте функцию фразой EXIT - это может привести к неприятным последствиям.

Разумеется, если ваша функция работает долго, то следует что-то предпринять (вывести какое-то сообщение, запустить дочерний процесс и т.п.). А если, не дай бог, вы загнали ее в бесконечный цикл, то, скорее всего, ничего, кроме 100% загрузки процессора вы не получите и прийдется 'прибивать' сам IBMWORKS, что не всегда приемлемо.

Рабочий пример

В заключение приведу пример расчета лизингового платежа. Текст функции:

/*      Расчет лизингового платежа               */
/*                                               */
/* рассчитывает сумму арендного платежа по:      */
/*                                               */
/* TotalCost - стоимость арендуемого имущества;  */
/* AgrLen - срок контракта (договора);           */
/* LeasePerc - лизинговый процент;               */
/* PeriodCount - периодичность арендных платежей */
/*                                               */
Parse Arg TotalCost, AgrLen, LeasePerc, PeriodCount
TotalCost=Translate(TotalCost, ".", ",")
AgrLen=Translate(AgrLen, ".", ",")
LeasePerc=Translate(LeasePerc, ".", ",")
PeriodCount=Translate(PeriodCount, ".", ",")
tmp1 = LeasePerc / PeriodCount
tmp2 = (1 + tmp1)**(PeriodCount*AgrLen)
answ = TotalCost * tmp1 * tmp2 / (tmp2 - 1)
Return answ

А вот то, что мы получаем в результате:


Автор статьи: Timur Kazimirov

Первая публикация: http://ns.rnlease.snc.ru/~timur/os2/rxworks.shtml

Редактор: Eugene Gorbunoff

Попробуй программу:

ACPI kernel - помогает снизить энергопотребление, шум (результаты эксприментов)

Комментарии:

Прокомментируйте эту статью (напоминаем, автор работал над текстом несколько недель, уважайте мнение других).


Ваше имя:

Ваш E-Mail:

CODE:
......

  

Ваш комментарий:


В eComStation 2.0 реализовано удобное (автоматическое) переключение между WiFi и Ethernet-соединением. Что нового в eCS 2.0?

Статьи

Операционная система
Программное обеспечение
Оборудование
Для разработчика
Разное
Колонка редактора


Готовая eComStation на SSD диске

 





Последний активный опрос: Какая высота барьера RPM?

[Google]

IBM OS/2 Warp

 
Обучение новичков

Списки протестированного OS/2 оборудования

 
Статьи


   
  Почему eComStation?
Возможности
Особенности
Применение
Ролики и скриншоты
   eComStation для
для бизнесменов
для студентов и инженеров
для продавцов компьютеров
сообщество пользователей
   Разработчик
Распространить программу
Описание API, библиотеки
Начать новый проект
Конкурсы
   Программы
Он-лайн каталог
Выбрать через eCo Market
   Служба поддержки
Отправить вопрос
Купить eComStation
Вопросы и ответы
Обучение новичков
 
 
© 2001 - 2021 eCo Software, All rights reserved
Сибирский Медведь технологическая компания
eComStation Serenity Systems International • OS/2 Warp IBM Corporation • ArcaOS Arca Noae