[Openroad-users] Convert numbers to Roman

gareth.2.edwards at bt.com gareth.2.edwards at bt.com
Tue Jul 8 20:11:28 EST 2008


Hi Herve,
 
Here's a procedure i just knocked up for you. You need to parse the RomanNumeral string prior to calling the procedure to check it comprises of correct characters.
 
PROCEDURE roman2int(RomanNumeral = VARCHAR(10) NOT NULL)=
DECLARE
    Symbol = CHAR(1) NOT NULL;
    Year = SMALLINT NOT NULL DEFAULT 0;
ENDDECLARE
{
 
 WHILE RomanNumeral != '' DO
 
  Symbol = LEFT(RomanNumeral,1);
 
  IF Symbol = 'I' THEN 
   Year = Year + 1;
  ELSEIF Symbol = 'V' THEN
   Year = Year + 5;
  ELSEIF Symbol = 'X' THEN
   Year = Year + 10;
  ELSEIF Symbol = 'L' THEN
   Year = Year + 50;
  ELSEIF Symbol = 'C' THEN
   Year = Year + 100;
  ELSEIF Symbol = 'D' THEN
   Year = Year + 500;
  ELSE // Character = 'M'
   Year = Year + 1000;
  ENDIF; 
 
  RomanNumeral = RIGHT(RomanNumeral,LENGTH(RomanNumeral) - 1);
 
 ENDWHILE;
 
    RETURN Year;
}

Cheers, 
Gareth Edwards 

BT Global Services 
t: +44 (0)131 300 1907 
e: Gareth.2.Edwards at BT.com <mailto:gareth.2.edwards at bt.com>  

 


________________________________

	From: openroad-users-bounces at peerlessit.com [mailto:openroad-users-bounces at peerlessit.com] On Behalf Of Hervé de Gabai
	Sent: Tuesday, July 08, 2008 7:38 AM
	To: International OpenROAD Users
	Subject: Re: [Openroad-users] Convert numbers to Roman
	
	
	Good Morning all,
	 
	Thank you Bodo for the int2roman procedure which might prove useful.
	Do you also have an OpenRoad Procedure to convert roman to integer?
	 
	Regards
	Hervé de Gabai
	Applications Systems Division
	International Telecommunications Union
	 
	----- Original Message ----
	From: Bodo Bergmann <Bodo.Bergmann at ingres.com>
	To: International OpenROAD Users <openroad-users at peerlessit.com>
	Sent: Wednesday, 2 July, 2008 1:51:15 PM
	Subject: Re: [Openroad-users] Convert numbers to Roman
	
	
	Have you tried something like this (modiefied from some VB example I found - should work for numbers<4000):
	 
	PROCEDURE int2roman(iNumber=INTEGER NOT NULL)=
	DECLARE
	    sNumeral=VARCHAR(4) NOT NULL;
	ENDDECLARE
	{
	    WHILE (iNumber > 0) DO
	        IF iNumber >= 1000 THEN 
	            sNumeral = sNumeral + 'M'; 
	            iNumber = iNumber - 1000;
	        ELSEIF iNumber >= 900 THEN 
	            sNumeral = sNumeral + 'CM';
	            iNumber = iNumber - 900;
	        ELSEIF iNumber >= 500 THEN
	            sNumeral = sNumeral + 'D'; 
	            iNumber = iNumber - 500;
	        ELSEIF iNumber >= 400 THEN 
	            sNumeral = sNumeral + 'CD'; 
	            iNumber = iNumber - 400;
	        ELSEIF iNumber >= 100 THEN 
	            sNumeral = sNumeral + 'C'; 
	            iNumber = iNumber - 100;
	        ELSEIF iNumber >= 90 THEN
	            sNumeral = sNumeral + 'XC';
	            iNumber = iNumber - 90; 
	        ELSEIF iNumber >= 50 THEN 
	            sNumeral = sNumeral + 'L'; 
	            iNumber = iNumber - 50;
	        ELSEIF iNumber >= 40 THEN 
	            sNumeral = sNumeral + 'XL';
	            iNumber = iNumber - 40;
	        ELSEIF iNumber >= 10 THEN 
	            sNumeral = sNumeral + 'X';
	            iNumber = iNumber - 10;
	        ELSEIF iNumber = 9 THEN 
	            sNumeral = sNumeral + 'IX';
	            iNumber = 0;
	        ELSEIF iNumber >= 5 THEN 
	            sNumeral = sNumeral + 'V';
	            iNumber = iNumber - 5;
	        ELSEIF iNumber = 4 THEN 
	            sNumeral = sNumeral + 'IV';
	            iNumber = 0;
	        Else 
	            sNumeral = sNumeral + 'I';
	            iNumber = iNumber - 1;
	        ENDIF; 
	    ENDWHILE; 
	    RETURN sNumeral;
	}
	 
	You can of course apply lowercase() to the return value if required.
	 
	Bodo.
	

	Bodo Bergmann | Sr. Software Engineer | Bodo.Bergmann at ingres.com <mailto:Bodo.Bergmann at ingres.com>  | Ingres Germany GmbH | Ohmstr. 12 | 63225 Langen |  GERMANY  | +49 6103 9881 0 



________________________________

	Not happy with your email address? 
	Get the one you really want <http://uk.docs.yahoo.com/ymail/new.html>  - millions of new email addresses available now at Yahoo! <http://uk.docs.yahoo.com/ymail/new.html> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.peerlessit.com/pipermail/openroad-users/attachments/20080708/30213997/attachment.html 


More information about the Openroad-users mailing list