2013-04-09 2 views
1

Я разрабатываю приложение Windows VB.NET. в VS 2010.Как получить исправленную подстроку из динамического содержимого строки?

Я хочу получить подстроку

$ CostCenterId | 4^10

из следующей строки.

PaymentMode | НЕФТЬ^$ IsPaid | Ложные^$ Валюта | INR-индийский рупия^$ CostCenterId | 4^10 $ LedgerId | 2^3 $

Положение текущей строки ($ CostCenterId | 4^10) в последовательности может быть изменено. , но он всегда будет находиться между двумя знаками $. Я написал приведенный ниже код, но смущен, что написать дальше?

Public Sub GetSubstringData() 

    dim sfullString = "PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian 
    Rupee^$CostCenterId|4^10$LedgerId|2^3$" 

    Dim CostIndex As Integer 
    CostIndex = sDiscription.IndexOf("CostCenterId") 
    sDiscription.Substring(CostIndex, 

    End Sub 

ответ

0

Почему бы не разделить() строку на $ в массив, а затем искать элемент, который содержит CostCenterId

0

Попробуйте что-то вроде этого:

Dim CostIndex As Integer 
CostIndex = sDiscription.IndexOf("CostCenterId") 

auxNum = sDiscription.IndexOf("$"c, CostIndex) - CostIndex 
sResult = sDiscription.SubString(CostIndex, auxNum) 
+0

Что такое «$» c? – bnil

+0

'c' указывает, что символ слева должен рассматриваться как символ вместо строки. Является ли способ VB.NET напрямую помещать символы. Вы можете использовать его без этого, если хотите, рассматривая его как «String», он будет работать так же. – SysDragon

3

Посмотрите в Split function строки. Это позволяет разбить строку на подстроки на основе указанного символа разграничения.

Вы можете сделать это:

Dim sfullString = "PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian Rupee^$CostCenterId|4^10$LedgerId|2^3$" 
Debug.WriteLine("$" + sfullString.Split("$"c)(3)) 

Результат: $CostCenterId|4^10

Вы, вероятно, хотите, чтобы сделать некоторые проверки ошибок, чтобы убедиться, что на самом деле строка содержит данные, которые вы ожидаете, хотя.

Однако глядя на данные, что у вас есть строка, содержащая пары ключ-значение, так что вы бы лучше иметь свойство удерживать CostCenterId и извлечь данные, как это:

Public Property CostCenterId As String 

Public Sub Decode(ByVal code As String) 
    For Each pair As String In code.Split("$"c) 
     If pair.Length > 0 AndAlso pair.Contains("|") Then 
      Dim key As String = pair.Split("|"c)(0) 
      Dim value As String = pair.Split("|"c)(1) 
      Select Case key 
       Case "CostCenterId" 
        Me.CostCenterId = value 
      End Select 
     End If 
    Next 
End Sub 

Затем вызовите это нравится:

Decode("PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian Rupee^$CostCenterId|4^10$LedgerId|2^3$") 
0

Это должно работать:

Dim token = "$CostCenterId" 
Dim costIndexStart As Integer = sfullString.IndexOf(token) 
Dim costIndexEnd As Integer = sfullString.IndexOf("$", costIndexStart + token.Length) 
Dim cost As String = sfullString.Substring(costIndexStart, costIndexEnd - costIndexStart + 1) 

R esult: "$CostCenterId|4^10$"

Если вы хотите опустить доллар-знаки:

Substring(costIndexStart + 1, costIndexEnd - costIndexStart - 1) 
0

вашу строку,

Dim xString = "PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian Rupee^$CostCenterId|4^10$LedgerId|2^3$" 

процесс подстроку,

xString = xString.Substring(xString.IndexOf("$CostCenter"), xString.IndexOf("$", xString.IndexOf("$CostCenter") + 1) - xString.IndexOf("$CostCenter")) 
0

Попробуйте этот код:

Dim sfullString = "PaymentMode|NEFT^$IsPaid|False^$Currency|INR-Indian" _ 
    & "Rupee^$CostCenterId|4^10$LedgerId|2^3$" 

     Dim sp() As String = {"$"} 
     Dim ar() As String = sfullString.Split(sp, StringSplitOptions.RemoveEmptyEntries) 
     Array.Sort(ar) 
     MsgBox("$" & ar(0))