Friday, October 30, 2009

Build Sand Rail Frame

English Ordinals (Excel-VBA-VBSript)

Da una piacevole conversazione con Nur sono nate alcune funzioni che propongo ... Della serie ... Funzioni inutili ... ecco English_Ordinal O_R e Ordinals_R che trasforma un numero nel rispettivo ordinale inglese ... e Is_Ordinal che verifica se la stringa passata come argomento è o meno un ordinale inglese. Il gioco stava nel *costringersi* ad usare le RegExp ... ma in questo caso forse hanno perso la gara ...

'lanciare test
Sub test()
Dim i As Long For i = 0 To 999 Cells(i + 1, 1) = English_Ordinal(i) End Sub

Function English_Ordinal(L As Long) As String
Dim re As Object
Dim S As String

S = L Set re = CreateObject("vbscript.regexp") re.Pattern = _
"((1[2-9]1)(2[2-9]2)(3[2-9]3)([04-9]1[0-9][2-9]0[2-9][4-9]))$"
S = re.Replace(S, ";$2st$3nd$4rd$5th")
re.Pattern = "(.*);.*?(\d+[a-z]{2}).*$"
English_Ordinal = re.Replace(S, "$1$2")
End Function

Public Function Is_Ordinal(S As String) As Boolean
Dim re As Object
S = "0" & S
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "^\d*([02-9](1st2nd3rd[04-9]th))(1\dth)$"
Is_Ordinal = re.test(S)
End Function

Function Ordinals_R(l As Long) As String
Dim v, c As Long, i As Long
v = Array("th", "st", "nd", "rd")
c = Right(l, 1)
If Right(l, 2) - 10
c Then _
If c
Ordinals_R = l & v(i)
End Function

Function O_R(l As Long) As String
'breve
Dim v, c As Long
v = Array("th", "st", "nd", "rd")
c = Right(l, 1)
O_R = l & v (IIf (Right (l, 2) - 10 = c, 0, IIf (C> 3, 0, c))) End Function



<>
< 4 Then i = c



0 comments:

Post a Comment