2017-01-09 7 views
0

У меня есть строка, как «NIFTY29-12-2016CE6300.00» и я хочу, чтобы результат как: «NIFTY_29-12-2016_6300_CE»как добавить любой символ между строкой в ​​VBA доступа

проблема первая часть есть (NIFTY) не является фиксированной длиной может быть ABCD, rdftghe или что-нибудь и последняя часть, т.е. (6300.00) также не фиксированная длиной может быть 123.8888888.23.88989 или что-нибудь

попробовать этот код, чтобы получить позицию первая цифра в строке и я могу конкатентно «_» до этого, код следующий:

If InStr(CStr(rs.Fields!Symbol), "CE") Then 
        StrOg = CStr(rs.Fields!Symbol) 

        For i = 1 To Len(StrOg) 

         currentCharacter = Mid(StrOg, i, 1) 
         If IsNumeric(currentCharacter) = True Then 
          GetPosChar = i 
          Exit For 
         End If 
        Next i 
        strtemp = Left(StrOg, GetPosChar) & "_" & Right() & "_" 
       Else 

Я до сих пор знаю: "NIFTY_" , пожалуйста, помогите мне !!!! заранее заранее

+0

есть 2 замены в вашем вопросе. один - перед первым целым числом, а второй - последним десятичным. Я прав ? Вы решили 1-ю замену, пока вы застряли со вторым? –

+0

Я до сих пор не могу извлечь дату и номер в конце строки и переставить строку для ожидаемого результата ... –

ответ

1

Попробуйте ниже. Поскольку вы не дали правильного объяснения, где должны быть сделаны изменения. Я написал код с некоторыми предположениями, как, например, символ CE доступен, нам нужно усечь всю десятичную часть и т. Д. Вы можете увидеть код и продолжить работу.

Private Sub test() 
    Dim StrOg As String 

    StrOg = "NIFTY29-12-2016CE6123.8888888" 
    Debug.Print "Org=" & StrOg 
    Debug.Print "New=" & ReFormat(StrOg) 

End Sub 

Private Function ReFormat(ByVal inputText) As String 
    Dim strNew As String 
    Dim charPos As Integer 
    Dim counter As Integer 
    Dim found As Boolean 

    'Search for 1st character from reverse and remove the 2 charters (i.e. symbol CE) 
    found = False 
    For i = Len(inputText) To 1 Step -1 
    If (Not IsNumeric(Mid$(inputText, i, 1))) And Mid$(inputText, i, 1) <> "." Then 
     charPos = i 
     found = True 
     Exit For 
    End If 
    Next i 
    If found Then 
    strNew = Left$(inputText, charPos - 2) & "_" & Right$(inputText, Len(inputText) - charPos) 
    Else 
    strNew = inputText 
    End If 

    'Search for 1st digit and if found update the string 
    found = False 
    For i = 1 To Len(strNew) 
    If IsNumeric(Mid$(strNew, i, 1)) Then 
     charPos = i 
     found = True 
     Exit For 
    End If 
    Next i 
    If found Then 
    strNew = Left$(strNew, charPos - 1) & "_" & Right$(strNew, Len(strNew) - charPos + 1) 
    End If 

    'Search for last decimal and truncate thereAfter 
    charPos = InStrRev(strNew, ".") 
    If charPos > 0 Then 
    strNew = Left$(strNew, charPos - 1) & "_CE" 
    End If 

    ReFormat = strNew 

End Function 
+0

Спасибо @Mukul Varshney это работает !!!!! –