Глава 15

Функции

В этой главе рассказывается о встроенных функциях ARexx-a, а также о функциях библиотеки rexxsupport.library. Следует отметить, что уже написана и продолжает создаваться масса системных библиотек ARexx-a. Как правило, эти библиотеки являются связующим звеном между ARexx-программами и библиотеками Амиги, поскольку в амиговских библиотеках есть абсолютно все, что может потребоваться в работе, надо только достучаться до их функций из ARexx-a. Например, библиотека rexxarplib.library позволяет легко создавать мощнейшие графические интерфейсы для прикладных программ, rexxreqtools.library позволяет пользоваться знаменитой риквестерной библиотекой reqtools.library ((c) Нико Фрэнсис); apig.library ((c) Ронни Келли) позволяет без ограничений пользоваться функциями бездонных амиговских библиотек intuition.library и graphics.library. На настоящий момент существует более дюжины внешних библиотек ARexx-a, каждая из которых является просто кладезью ценных функций для ARexx-a, и список этот непрерывно пополняется.

Функции сравнения

Помимо приведенных ниже, к функциям сравнения можно отнести функции побитовых манипуляций ВIТСОМР() и BITTST(), а также общеязыковую функцию DATATYPE(). Все строковые функции сравнения/поиска учитывают регистр букв.


ABBREV()
bool = ABBRЕV(<длинная_строка>,<короткая_строка>[,<длина>])

Возвращает значение "ИСТИНА" (1), если "короткая_строка" совпадает с начальной частью "длинной_строки". Если присутствует параметр "длина", то "короткая_строка" должна иметь длину не меньшую, чем указано. Если длина не указана, а "короткая_строка" является пустой строкой, то функция даст совпадение строк. Примеры:

say ABBREV('пароход', 'пар')      ==> 1
say ABBREV('пароход', 'Пар')      ==> 0
say ABBREV('пароход', 'пар', 3)   ==> 1
say ABBREV('пароход', 'пар', 4)   ==> 0
say ABBREV('пароход', '')         ==> 1

COMPARE()
pos = COMPARE(<строка_1>,<строка_2>[,<наполнитель>])

Возвращает 0, если "строка_1" идентична "строке_2". В противном случае возвращается номер позиции 1-го несовпавшего символа (нумерация идет с единицы). Если одна из строк короче другой, то короткая дополняется с конца символом-наполнителем (по умолчанию наполнитель - пробел). Примеры:

say COMPARE('123', '123')           ==> 0
say COMPARE('132', '123')           ==> 0
say COMPARE('123', '123 ')          ==> 2
say COMPARE{'123', '123...', '.')   ==> 0

FIND()
pos = FIND(<строка>,<слово>)

Ищет зажатое между пробелами "слово" в исходной "строке". Возвращается номер первого совпавшего слова в строке, или 0, если совпадений нет. Пример:

say  FIND('Что может быть лучше Амиги?', 'лучше')  ==> 4

INDEX()
pos = INDEX(<строка>,<подстрока>[,<старт>])

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

pos = INDEX('Лень учить Си?
             Работайте на ARexx-e!', 'Раб')  ==> 16

LASTPOS()
pos = LASTPOS(<подстрока>,<строка>[,<старт>])

Ищет заданную подстроку в строке. Поиск происходит от конца строки к ее началу. Если поиск успешный, возвращается позиция первого символа подстроки в строке, иначе возвращается ноль. Поиск может начинаться не с последнего символа строки, а с указанного параметром "старт" (отсчет для параметра "старт" происходит с конца строки). Пример:

pos  = LASTPOS('колпак', 'Сшит колпак,
                         да не по-колпаковски')  ==> 23

POS()

То же, что и INDEX(). Использование POS() предпочтительнее, поскольку функция INDEX() изъята из формального стандарта языка Rexx (TRL2), хотя ARexx поддерживает обе функции.


VERIFY()
pos = VERIFY(<строка>,<список>[,'Match'][,<старт>])

Поиск в указанной строке любой из литер, присутствующих в "списке". Если в параметрах для VERIFY() отсутствует ключевое слово "Match", то функция вернет ноль в том случае, если все имеющиеся в строке литеры также имеются и в "списке" - строке, содержащей искомые литеры в произвольном порядке. Если же какая-либо из литер строки в "списке" отсутствует, то будет возвращен номер ее позиции в строке (сканирование строки происходит от начала к концу).

Наличие параметра "М" (или Match) изменит логику работы функции VERIFY(). Теперь в случае совпадения одной из литер строки с любой литерой "списка", будет возвращена позиция этой литеры в строке. Ноль будет возвращен, если ни одной литеры из "списка" в строке нет.

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

pos = VERIFY('123456789', '736')       ==> 1
pos = VERIFY('123456789', '736', 'М')  ==> 3

Сайт создан в системе uCoz