Re: Function SCANNINGstring 'XY' in another string in INFORMIX 7.30?
Posted in 1999
I use a several self-written stored procedures:
LAt - return a first position of substring;
RAt - return a last position of substring ;
SubStr - return a substring - (for IDS < 7.3X)
----------------------------------------------------------------------------
--
CREATE PROCEDURE LAt ( SourceStr VARCHAR(255),
SearchStr VARCHAR(255),
SPos SMALLINT DEFAULT 1 )
RETURNING SMALLINT;
DEFINE FPos SMALLINT;
DEFINE SourceLen SMALLINT;
DEFINE SearchLen SMALLINT;
LET FPos = 0;
IF SourceStr IS NOT NULL AND SearchStr IS NOT NULL THEN
LET SourceLen = CHAR_LENGTH(SourceStr);
LET SearchLen = CHAR_LENGTH(SearchStr);
IF (SPos BETWEEN 1 AND SourceLen) AND
(SearchLen > 0) AND
(SPos - 1 + SearchLen <= SourceLen)
THEN
FOR SPos = SPos TO (SPos + SourceLen - SearchLen)
IF SearchStr = SubStr(SourceStr, SPos, SearchLen) THEN
LET FPos = SPos;
EXIT FOR;
END IF
END FOR
END IF
END IF
RETURN FPos;
END PROCEDURE;
----------------------------------------------------------------------------
--
CREATE PROCEDURE RAt ( SourceStr VARCHAR(255),
SearchStr VARCHAR(255),
SPos SMALLINT DEFAULT 1 )
RETURNING SMALLINT;
DEFINE FPos SMALLINT;
DEFINE SourceLen SMALLINT;
DEFINE SearchLen SMALLINT;
LET FPos = 0;
IF SourceStr IS NOT NULL AND SearchStr IS NOT NULL THEN
LET SourceLen = CHAR_LENGTH(SourceStr);
LET SearchLen = CHAR_LENGTH(SearchStr);
IF (SPos BETWEEN 1 AND SourceLen) AND
(SearchLen > 0) AND
(SearchLen <= SourceLen - (SPos - 1))
THEN
FOR SPos = (SourceLen - (SearchLen - 1) - (SPos - 1)) TO 1 STEP -1
IF SearchStr = SubStr(SourceStr, SPos, SearchLen) THEN
LET FPos = SPos;
EXIT FOR;
END IF
END FOR
END IF
END IF
RETURN FPos;
END PROCEDURE;
----------------------------------------------------------------------------
--
CREATE PROCEDURE SubStr ( InStr VARCHAR(255),
SPos SMALLINT,
OutLen SMALLINT DEFAULT 1 )
RETURNING VARCHAR(255);
DEFINE OutStr VARCHAR(255);
DEFINE i SMALLINT;
DEFINE StrLen SMALLINT;
IF InStr IS NOT NULL THEN
LET OutStr = '';
IF OutLen > 0 THEN
LET StrLen = CHAR_LENGTH(InStr);
IF SPos BETWEEN 1 AND StrLen THEN
IF SPos > 1 THEN
FOR i = 2 TO SPos
LET InStr = InStr[2,255];
END FOR
END IF
IF OutLen > (StrLen - SPos + 1) THEN
LET OutLen = StrLen - SPos + 1;
END IF
FOR i = 1 TO OutLen
LET OutStr = OutStr||InStr[1,1];
LET InStr = InStr[2,255];
END FOR
END IF
END IF
ELSE
LET OutStr = NULL;
END IF
RETURN OutStr;
END PROCEDURE;
----------------------------------------------------------------------------
--
In Informix version 7.3X exists function SUBSTR.
Best regards,
Danail.
-----Original Message-----
From: Wolfgang Zager <zager@csi.com>
To: informix-list@iiug.org <informix-list@iiug.org>
Date: 17 ''' 1999 '. 14:48
Subject: Re: Function SCANNINGstring 'XY' in another string in INFORMIX
7.30?
>There isn't any function doing something like that in D4GL. Maybe You can
>find
>a self-written function in the libraries of the IUUG.
>
>Wolfgang
>
>Andrzej Kurowski <kuraprok@friko5.onet.pl> schrieb in im Newsbeitrag:
>7ka7kg$m34$1@netra.daewoo.com.pl...
>> Hi,
>> We cannot find string function like AT in CLIPPER/FOXBASE which gives
>> position of given string in another string.
>> For example:
>> AT("XY","123XY45")=4
>> AT("XY","ABCDE")=0
>>