Reqular Expression in ABL

Posted by lefty1984 on 26-May-2015 10:32

Hi there,

Can someone help me with the code below. I want to check a licenceplate with Regular Expression.
This lincenceplate "999XX9". matched with array[13].
Can some one explane me why this fault? If regexp:IsMatch(kenteken, array(i)) Then Message i View-as Alert-box Info Buttons Ok.

Using System.Text.RegularExpressions.*. Define Variable kenteken As Character No-undo Initial "999XX9". Define Variable i As Integer No-undo. Define Variable array As Character Extent 14 No-undo. Define Variable regexp As Class Regex No-undo. array = "^[A-Za-z][A-Za-z][0-9][0-9][0-9][0-9]$". array[1] = "^[0-9][0-9][0-9][0-9][A-Za-z][A-Za-z]$". array[2] = "^[0-9][0-9][A-Za-z][A-Za-z][0-9][0-9]$". array[3] = "^[A-Za-z][A-Za-z][0-9][0-9][A-Za-z][A-Za-z]$". array[4] = "^[A-Za-z][A-Za-z][A-Za-z][A-Za-z][0-9][0-9]$". array[5] = "^[0-9][0-9][A-Za-z][A-Za-z][A-Za-z][A-Za-z]$". arrayDevil = "^[0-9][0-9][A-Za-z][A-Za-z][A-Za-z][0-9]$". array[7] = "^[0-9][A-Za-z][A-Za-z][A-Za-z][0-9][0-9]$". arrayMusic = "^[A-Za-z][A-Za-z][0-9][0-9][0-9][A-Za-z]$". array[9] = "^[A-Za-z][0-9][0-9][0-9][A-Za-z][A-Za-z]$". array[10] = "^[A-Za-z][A-Za-z][A-Za-z][0-9][0-9][A-Za-z]$". array[11] = "^[A-Za-z][0-9][0-9][A-Za-z][A-Za-z][A-Za-z]$". array[12] = "^[0-9][A-Za-z][A-Za-z][0-9][0-9][0-9]$". array[13] = "^[0-9][0-9][0-9][A-Za-z][A-Za-z][0-9]$". Do i = 0 To 13: If regexp:IsMatch(kenteken, array) Then Message i View-as Alert-box Info Buttons Ok. End. Delete Object regexp.

the code below in .net is nice but i have to translate it to ABL.

Public Class VehicleFunctions
 
Public Shared Function GetSidecodeLicenseplate(ByVal Licenseplate As String) As String
 
Dim arrSC(13) As String
 Dim scUitz As String = String.Empty
 
Licenseplate = Licenseplate.Replace("-", "").ToUpper
 
arrSC(0) = "^[a-zA-Z]{2}[\d]{2}[\d]{2}$" ' 1 XX-99-99
 arrSC(1) = "^[\d]{2}[\d]{2}[a-zA-Z]{2}$" ' 2 99-99-XX
 arrSC(2) = "^[\d]{2}[a-zA-Z]{2}[\d]{2}$" ' 3 99-XX-99
 arrSC(3) = "^[a-zA-Z]{2}[\d]{2}[a-zA-Z]{2}$" ' 4 XX-99-XX
 arrSC(4) = "^[a-zA-Z]{2}[a-zA-Z]{2}[\d]{2}$" ' 5 XX-XX-99
 arrSC(5) = "^[\d]{2}[a-zA-Z]{2}[a-zA-Z]{2}$" ' 6 99-XX-XX
 arrSC(6) = "^[\d]{2}[a-zA-Z]{3}[\d]{1}$" ' 7 99-XXX-9
 arrSC(7) = "^[\d]{1}[a-zA-Z]{3}[\d]{2}$" ' 8 9-XXX-99
 arrSC(8) = "^[a-zA-Z]{2}[\d]{3}[a-zA-Z]{1}$" ' 9 XX-999-X
 arrSC(9) = "^[a-zA-Z]{1}[\d]{3}[a-zA-Z]{2}$" ' 10 X-999-XX
 arrSC(10) = "^[a-zA-Z]{3}[\d]{2}[a-zA-Z]{1}$" ' 11 XXX-99-X
 arrSC(11) = "^[a-zA-Z]{1}[\d]{2}[a-zA-Z]{3}$" ' 12 X-99-XXX
 arrSC(12) = "^[\d]{1}[a-zA-Z]{2}[\d]{3}$" ' 13 9-XX-999
 arrSC(13) = "^[\d]{3}[a-zA-Z]{2}[\d]{1}$" ' 14 999-XX-9
 
'except licenseplates for diplomats
 scUitz = "^CD[ABFJNST][0-9]{1,3}$" 'for example: CDB1 of CDJ45
 
For i As Integer = 0 To 13
 If System.Text.RegularExpressions.Regex.IsMatch(Licenseplate, arrSC(i)) Then
 Return (i + 1).ToString
 End If
 Next
 
If System.Text.RegularExpressions.Regex.IsMatch(Licenseplate, scUitz) Then
 Return "CD"
 End If
 
Return String.Empty
 
End Function
 
Public Shared Function FormatLicenseplate(ByVal Licenseplate As String, ByVal Sidecode As String) As String
 
Licenseplate = Licenseplate.Replace("-", "").ToUpper
 
Select Case Sidecode
 
Case "1", "2", "3", "4", "5", "6"
 Return Licenseplate.Substring(0, 2) & "-" & Licenseplate.Substring(2, 2) & "-" & Licenseplate.Substring(4, 2)
 
Case "7", "9"
 Return Licenseplate.Substring(0, 2) & "-" & Licenseplate.Substring(2, 3) & "-" & Licenseplate.Substring(5, 1)
 
Case "8", "10"
 Return Licenseplate.Substring(0, 1) & "-" & Licenseplate.Substring(1, 3) & "-" & Licenseplate.Substring(4, 2)
 
Case "11", "14"
 Return Licenseplate.Substring(0, 3) & "-" & Licenseplate.Substring(3, 2) & "-" & Licenseplate.Substring(5, 1)
 
Case "12", "13"
 Return Licenseplate.Substring(0, 1) & "-" & Licenseplate.Substring(1, 2) & "-" & Licenseplate.Substring(3, 3)
 
Case Else
 'No formatting with sidecode 'CD'
 Return Licenseplate
 
End Select
 
End Function
 
End Class


All Replies

Posted by Peter Judge on 26-May-2015 10:54

A couple of things

- Generally, C# versions example of .net code translate more cleanly to ABL.

- Arrays in ABL are 1-based, so you have to start at array[1].

- You should loop i = 1 to 14.

- Regex:IsMatch() is a static member, so you don't need an instance variable defined. Just call Regex:IsMatch().

- You'll need USING (import) statements at the top of your code (using System.Text.RegularExpressions.*.  in particular)

- Remove the 'delete object' line

Posted by lefty1984 on 27-May-2015 04:03

Peter,

Thanks for your post. I think I was sleeping. This working fine now :)

Using System.Text.RegularExpressions.*. 


Define Variable kenteken As Character No-undo Initial "999XX9".

Define Variable i As Integer No-undo.


Define Variable array As Character Extent 14 No-undo.


array[1] = "^[A-Za-z][A-Za-z][0-9][0-9][0-9][0-9]$".

array[2] = "^[0-9][0-9][0-9][0-9][A-Za-z][A-Za-z]$".

array[3] = "^[0-9][0-9][A-Za-z][A-Za-z][0-9][0-9]$".

array[4] = "^[A-Za-z][A-Za-z][0-9][0-9][A-Za-z][A-Za-z]$".

array[5] = "^[A-Za-z][A-Za-z][A-Za-z][A-Za-z][0-9][0-9]$".

arrayDevil = "^[0-9][0-9][A-Za-z][A-Za-z][A-Za-z][A-Za-z]$".

array[7] = "^[0-9][0-9][A-Za-z][A-Za-z][A-Za-z][0-9]$".

arrayMusic = "^[0-9][A-Za-z][A-Za-z][A-Za-z][0-9][0-9]$".

array[9] = "^[A-Za-z][A-Za-z][0-9][0-9][0-9][A-Za-z]$".

array[10] = "^[A-Za-z][0-9][0-9][0-9][A-Za-z][A-Za-z]$".

array[11] = "^[A-Za-z][A-Za-z][A-Za-z][0-9][0-9][A-Za-z]$".

array[12] = "^[A-Za-z][0-9][0-9][A-Za-z][A-Za-z][A-Za-z]$".

array[13] = "^[0-9][A-Za-z][A-Za-z][0-9][0-9][0-9]$".

array[14] = "^[0-9][0-9][0-9][A-Za-z][A-Za-z][0-9]$".



Do i = 1 To 14:

    If Regex:IsMatch(kenteken,arrayIdea) Then Message kenteken arrayIdea View-as Alert-box Info Buttons Ok.

End.

This thread is closed