## Roman numerals to decimal?

Get help with installation and running here.

Moderators: DataMystic Support, Moderators

DFH
Posts: 950
Joined: Sun Dec 09, 2007 2:49 am
Location: UK

### Roman numerals to decimal?

Feature request:

How about a special filter to convert roman numerals text to decimal?

Best regards,

David

DataMystic Support
Posts: 2203
Joined: Mon Jun 30, 2003 12:32 pm
Location: Melbourne, Australia
Contact:

### Re: Roman numerals to decimal?

Hi David,

Sounds like a vbscript filter to me - from http://www.robvanderwoude.com/vbstech_data_roman.php

Code: Select all

``````Function Roman2Decimal( ByVal strRoman )
' This Function converts strRoman to its decimal numerical value.
' Written by: Rob van der Woude, http://www.robvanderwoude.com
'
' Roman numerals "old style" will still be converted correctly
' into decimal numbers. However, numerals like "MIIIM" for 1997
' would be invalid in any notation, and consequently will
' return invalid results.
'
' http://en.wikipedia.org/wiki/Roman_numerals

' Some housekeeping
Dim arrRoman( ), intRoman
ReDim arrRoman( Len( strRoman ) -1 )
intRoman = 0

' Store each "digit" of the Roman numeral in an array
For i = 0 To UBound( arrRoman )
arrRoman( i ) = Mid( strRoman, i + 1, 1 )
Next

' Then convert each "digit" to its numeric value
For i = 0 To UBound( arrRoman )
Select Case arrRoman( i )
Case "M"
arrRoman( i ) = 1000
Case "D"
arrRoman( i ) = 500
Case "C"
arrRoman( i ) = 100
Case "L"
arrRoman( i ) = 50
Case "X"
arrRoman( i ) = 10
Case "V"
arrRoman( i ) = 5
Case "I"
arrRoman( i ) = 1
End Select
Next

' Now comes the hard part: for each "digit" decide if it will be
' added or subtracted, based on the value of the following "digit"
For i = 0 To UBound( arrRoman ) - 1
If     arrRoman( i ) < arrRoman( i + 1 ) Then
' E.g. "I" in "IX" (9): subtract 1
intRoman = intRoman - arrRoman( i )
ElseIf arrRoman( i ) = arrRoman( i + 1 ) Then
' E.g. "I" in "XII" (12), "III" (3) or in "IIX" (ancient notation for 8).
' The latter should actually be "VIII" in "modern" roman numerals, but
' "IIX" was used in ancient times, so let's just be prepared.
' We'll add the value to the next position in the array, so it will be
' reevaluated in the next iteration of the loop.
' Note: this trick will definitely fail on invalid notations like "IIIX".
arrRoman( i + 1 ) = arrRoman( i ) + arrRoman( i + 1 )
arrRoman( i )     = 0
Else ' arrRoman( i ) > arrRoman( i + 1 )
' E.g. "V" in "XV" (15): add 5
intRoman = intRoman + arrRoman( i )
End If
Next

' The last "digit" doesn't have a following "digit" so it
' can, be added without having to test a following "digit"
intRoman= intRoman + arrRoman( UBound( arrRoman ) )

' Return the calculated value
Roman2Decimal = intRoman
End Function

Sub Syntax( ByVal strErr )
If strErr <> "" Then
strMsg = vbCrLf & strErr & vbCrLf & vbCrLf
Else
strMsg = vbCrLf
End If
strMsg = strMsg _
& "Romans.vbs,  Version 1.01" & vbCrLf _
& "Convert between Roman and decimal numerals." & vbCrLf & vbCrLf _
& "Usage:  ROMANS.VBS  numeral" & vbCrLf & vbCrLf _
& "Where:             ""numeral""  is either a (decimal) integer in the" & vbCrLf _
& "                              range of 1..4999, or a Roman numeral." & vbCrLf & vbCrLf _
& "Notes:   Returned Roman numerals follow ""modern"" conventions," & vbCrLf _
& "            i.e. 1999 will be written as ""MCMXCIX"" instead of ""MIM""." & vbCrLf _
& "            However, these Roman numerals ""old style"" will still be" & vbCrLf _
& "            converted correctly into decimal numbers." & vbCrLf _
& "            Numerals like ""MIIIM"" for 1997 would be invalid in any" & vbCrLf _
& "            notation, and consequently will return invalid results." & vbCrLf _
& "         More information on Roman numerals can be found on WikiPedia:" & vbCrLf _
& "            http://en.wikipedia.org/wiki/Roman_numerals" & vbCrLf & vbCrLf _
& "Written by Rob van der Woude" & vbCrLf _
& "http://www.robvanderwoude.com"
WScript.Echo strMsg
WScript.Quit( 1 )
End Sub
``````
Regards,

Simon Carter, https://www.DataMystic.com
https://www.JadeDiabetes.com - Insulin dose calculator for Type 1 diabetes

DFH
Posts: 950
Joined: Sun Dec 09, 2007 2:49 am
Location: UK

### Re: Roman numerals to decimal?

Thanks Simon,

I asked for Roman to decimal.
That link is for the opposite direction, decimal to Roman! It should be
http://www.robvanderwoude.com/vbstech_d ... an2Decimal

Any vbscript program would need to be packaged for use with TextPipe.

As it happens, I didn't require any numbers above 150 (maybe 176 in other circumstances).
An external replacement file sufficed for this restricted scope. Whole word of course.

Best regards,

David

DataMystic Support
Posts: 2203
Joined: Mon Jun 30, 2003 12:32 pm
Location: Melbourne, Australia
Contact:

### Re: Roman numerals to decimal?

Hi David,

Attachments
convert roman to decimal.zip
Convert from roman to decimal
Regards,

Simon Carter, https://www.DataMystic.com
https://www.JadeDiabetes.com - Insulin dose calculator for Type 1 diabetes