Re: Right justify
Posted in 1999
Topics: Stored Procedures & SPL, Data Types & Schema Design
I use procedures:
----------------------------------------------------------------------------
--
CREATE PROCEDURE PadL ( InStr VARCHAR(255),
OutLen SMALLINT,
PadStr VARCHAR(255) DEFAULT " " )
RETURNING VARCHAR(255);
RETURN Pad(OutLen - CHAR_LENGTH(InStr), PadStr)||InStr;
END PROCEDURE;
----------------------------------------------------------------------------
--
CREATE PROCEDURE PadR ( InStr VARCHAR(255),
OutLen SMALLINT,
PadStr VARCHAR(255) DEFAULT " " )
RETURNING VARCHAR(255);
RETURN InStr||Pad(OutLen - CHAR_LENGTH(InStr), PadStr);
END PROCEDURE;
----------------------------------------------------------------------------
--
CREATE PROCEDURE PadC ( InStr VARCHAR(255),
OutLen SMALLINT,
PadStr VARCHAR(255) DEFAULT " " )
RETURNING VARCHAR(255);
LET OutLen = OutLen - CHAR_LENGTH(InStr);
RETURN Pad(OutLen / 2 + MOD(OutLen, 2), PadStr)||InStr||
Pad(OutLen / 2, PadStr);
END PROCEDURE;
----------------------------------------------------------------------------
--
CREATE PROCEDURE Pad ( OutLen SMALLINT,
PadStr VARCHAR(255) DEFAULT " " )
RETURNING VARCHAR(255);
DEFINE OutStr VARCHAR(255);
DEFINE i SMALLINT;
DEFINE PadLen SMALLINT;
LET OutStr = "";
IF OutLen > 0 THEN
LET PadLen = CHAR_LENGTH(PadStr); --with tralling spaces
IF PadLen = 0 THEN
LET PadStr = " ";
LET PadLen = 1;
END IF
LET i = OutLen / PadLen;
IF i > 0 THEN
FOR i = 1 TO i
LET OutStr = PadStr||OutStr;
END FOR
END IF
LET i = MOD(OutLen, PadLen);
IF i > 0 THEN
FOR i = 1 TO i
LET OutStr = OutStr||PadStr[1];
LET PadStr = PadStr[2,255];
END FOR
END IF
END IF
RETURN OutStr;
END PROCEDURE;
----------------------------------------------------------------------------
--
Example:
EXECUTE PROCEDURE PadL('1234567890', 15, '#_')
Result: "#_#_#1234567890"
EXECUTE PROCEDURE PadR('1234567890', 15, '#_')
Result: "1234567890#_#_#"
EXECUTE PROCEDURE PadC('1234567890', 15, '#_')
Result: "#_#1234567890#_"
Best regards,
Danail.
-----Original Message-----
From: Bill Zega <billz@netlabs.net>
To: informix-list@iiug.org <informix-list@iiug.org>
Date: 17 ''''' 1999 '. 03:09
Subject: Re: Right justify
>Thanks for repsponding but... I need the function to be generic for
variable
>length strings (MAX char(100)). Example:
>
>define g_8 char(8),
> g_50 char(50)
>
>let g_8 = rightshift("123456 ")
># Will return " 1234" (four spaces,"1234")
># I need it to return " 123456" (two spaces,"123456")
>let g_50 = rightshift("123456 ")
># Will also return " 1234" (four spaces,"1234")
># I need it to return " 123456" (forty-four spaces,"123456")
Is there a way to execute these procedures from a 4gl program without using a select statement? I may need to right-justify a local variable entered by an 'input by name' in a 4gl program.