Функции
В этой главе рассказывается о встроенных функциях 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