А также:

OSCAT‎ > ‎Basic Library‎ > ‎

BUFFER_SEARCH

Тип Функция : INT

Входы PT : POINTER (Адрес буфера)

SIZE : UINT (Размер буфера)

STR : STRING (Искомая строка)

POS : INT (Позиция, с которой начинается поиск)

IGN: BYTE (Этот символ игнорируется при поиске)

Выходы INT (Позиция, в которой строка символов была найдена)


Функция BUFFER_SEARCH осуществляет поиск в произвольном байтовом массиве содержимого символьной строки, и сообщает позицию первого символа этой строки в массиве, если совпадение найдено. Буфер просматривается с произвольной позиции POS. Первый элемент массива имеет номер позиции 0. При вызове функции передается указатель на обрабатываемый массив и его размер в байтах. В CoDeSys вызов выглядит следующим образом: BUFFER_SEARCH(ADR(Array), SIZEOF(ARRAY), STR, POS, IGN), где ARRAY - имя массива. ADR является стандартной функцией, которая возвращает указатель на массив, а SIZEOF - стандартная функция, которая вычисляет размер массива. Функция возвращает скопированную из буфера строку как STRING. Этот способ обработки массива является очень эффективным, поскольку не требует дополнительной памяти, и передаваемые значения не нужно копировать. Функция BUFFER_SEARCH поддерживает подстановочные символы (IGN). Если искомая строка STR содержит символ с кодом IGN, то на этом месте в строке символов допускается любой символ в буфере.

Пример: BUFFER_SEARCH(ADR(Array), SIZEOF(ARRAY), 'FIND?0', 0, 63)

Находит FIND10, FIND20, FIND30 .... внутри массива, но не находит совпадения с FIND11, FIND 22 .... Искомая строка может содержать несколько подстановочных символов. Подстановочный символ всегда соответствует ровно одному символу в буфере.

Комментарии

Maxim Ananskih - 29.08.2010 12:45

В версии 3.20 эта функция работает некорректно. Если искомая строка начинается в буфере с позиции 0, функция вернет 0. То же самое она вернет, если в буфере нет искомой строки.

Maxim Ananskih - 08.11.2011 15:10

История изменений

5 марта 2008 rev 1.0 оригинальная версия
16 марта 2008 rev 1.1 тип входа size изменен на uint
13 мая 2008 rev 1.2 изменен тип указателя на массив[1..32767]
размер строки изменен на STRING_LENGTH
12 ноября 2009 rev 1.3 значение end ограничено размером массива
25 января 2011 rev 1.4 ign = True игнорирует регистр
возвращает -1, если ничего не найдено