Feature request:
How about a special filter to convert roman numerals text to decimal?
Best regards,
David
Roman numerals to decimal?
Moderators: DataMystic Support, Moderators, DataMystic Support, Moderators, DataMystic Support, Moderators

 Posts: 986
 Joined: Sun Dec 09, 2007 2:49 am
 Location: UK
 DataMystic Support
 Site Admin
 Posts: 2227
 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
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.
'
' More information on Roman numerals can be found on WikiPedia:
' 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: [1] 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 _
& " [2] 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

 Posts: 986
 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
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
David
 DataMystic Support
 Site Admin
 Posts: 2227
 Joined: Mon Jun 30, 2003 12:32 pm
 Location: Melbourne, Australia
 Contact:
Re: Roman numerals to decimal?
Hi David,
Please find it attached!
Please find it attached!
 Attachments

 convert roman to decimal.zip
 Convert from roman to decimal
 (1.87 KiB) Downloaded 418 times

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