Возвращает подстроку символов, расположенную между двумя разделителями.

STREXTRACT(cSearchExpression, cBeginDelim [, cEndDelim [, nOccurrence
[, nFlag]]]])

Параметры

cSearchExpression

Исходная символьная строка, в которой выполняется поиск.

cBeginDelim

Определяет Начальный Разделитель, который должен быть в исходной строке cSearchExpression.

cEndDelim

Определяет Конечный Разделитель, который также должен быть в исходной строке cSearchExpression.

nOccurrence

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

nFlag

Определяет дополнительный аддитивный параметр уточнения характеристик поиска подстроки. Возможные аддитивные значения данного параметра nFlag представлены в следующей таблице: (используется как: p1+p2+p3)

Bit Значение (аддитивное) Краткое Описание

0

1

Включить чувствительность к Регистру символов (a # A)

1

2

Конечный Разделитель игнорируется. Определяет, что если конечный разделитель не найден, то возвращается подстрока, расположенная после Начального Разделителя

2

4

Определяет, что Разделители включаются в результатную поисковую строку

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

Символьного типа (Character)

Expand imageКомментарии

По-умолчанию, выполняется поиск с учетом Регистра символов (значение nFlag отсутствует).

Если cBeginDelim - пустая строка (""), поиск выполняется с самого начала исходной строки cSearchExpression  - до первого появления конечного разделителя cEndDelim. Если  cEndDelim - пустая строка (""),  функция STREXTRACT( ) возвращает подстроку из исходной строки символов, как вхождение с номером nOccurrence от разделителя cBeginDelim - до конца исходной строки cSearchExpression.

Expand imageПример

 CopyCode imageКопировать Код
CLEAR
SET PATH TO (HOME(2) + 'Data\') &&Set path to the customer table
USE customer && any table
?cursortoxml(0,"x",1,0,2) && Produce variable "x" that has XML of first 2 records of table
?x && show the XML
xmlproc(x,0) && Parse the XML

PROCEDURE xmlproc(x as String, nLev as Integer) as void
LOCAL cTagName, cContents, mterm
DO WHILE .t.
cTagName = STREXTRACT(x,"<",">")
IF LEN(cTagName) = 0 && no tag found
??' ',x && print out raw string as contents
EXIT
ENDIF
IF RIGHT(cTagName,1) = '/' && like "<region/>"
cTagName = LEFT(cTagName, LEN(cTagName)-1)
cContents=""
mterm = "<"+cTagName+"/>" && "<region/>"
ELSE
mterm = "</"+cTagName+">" && "</region>"
cContents = STREXTRACT(x,"<"+cTagName+">", mterm,1,2)
ENDIF
?REPLICATE(" ",nLev),nLev+1,PADR(cTagName,20)
xmlproc(cContents, nLev+1)
x = STREXTRACT(x, mterm) && get the rest of the xml
ENDDO

Expand imageСм. также