troubleshooting Question

Help manipulating a String

Avatar of Philippe Renaud
Philippe RenaudFlag for Canada asked on
.NET ProgrammingC#Visual Basic.NET
10 Comments1 Solution365 ViewsLast Modified:
Hello EE, I have this code:

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        replacementStep = 5

        Dim input As String = "=C3-C4"
        Dim result As String = System.Text.RegularExpressions.Regex.Replace(input, "([A-Z]+)(\d+)", AddressOf ReplacementDelegate)

    End Sub

    Private Function ReplacementDelegate(ByVal m As System.Text.RegularExpressions.Match) As String
        Const Letter_Z As Char = "Z"c
        Const Letter_A As Char = "A"c

        Dim convertedLetters() As Char = m.Groups(1).Value.ToCharArray()

        convertedLetters(convertedLetters.Length - 1) = Chr(Asc(convertedLetters(convertedLetters.Length - 1)) + replacementStep)

        ' Adjust for Zs
        For i As Integer = convertedLetters.Length - 1 To 0 Step -1
            If convertedLetters(i) > Letter_Z Then
                convertedLetters(i) = Chr((Asc(Letter_A) - 1) + (Asc(convertedLetters(i)) Mod Asc(Letter_Z)))

                If i = 0 Then
                    Dim temp(convertedLetters.Length) As Char

                    Array.Copy(convertedLetters, 0, temp, 1, convertedLetters.Length)
                    convertedLetters = temp
                    convertedLetters(0) = Letter_A

                    Exit For
                    convertedLetters(i - 1) = Chr(Asc(convertedLetters(i - 1)) + 1)
                End If
                Exit For
            End If

        Dim convertedNumber As Integer = Convert.ToInt32(m.Groups(2).Value)

        convertedNumber += 1

        Return (New String(convertedLetters) + convertedNumber.ToString())
    End Function

you will see that by changing the value replacementStep it will change the letter in the output .. from  =C3-C4 to lets say =H4-H5   etc..

if you do replacementStep to 49   it will be:  =AZ4-AZ5   because after 26 its like in excel you increase a letter...  but after 49 I should get =BA4-BA5 or more  but instead im having =A]4-A]5   this is wrong

this code comes from Kaufmed. Its a new question for him but if anyone wnats to try to help...

Join our community to see this answer!
Unlock 1 Answer and 10 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 10 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros