2017-01-30 49 views
0

我有一個字符串變量:VB.net環和拆分功能文本處理

p_text = "}{X=45,Y=65}{X=59,Y=65}{X=59,Y=79}{X=45,Y=79}{" 

與此代碼

Dim p_text As String 
Dim s1_texts As String() 
Dim s2_texts As String() 
Dim s3_texts As String() 

s1_texts = Split(p_text, "}{") 
Dim numi As Integer = 0 
Dim numj As Integer = 0 
Dim numk As Integer = 0 

Do Until numi = s1_texts.Length - 1 
    If s1_texts(numi) = "" Then 
     numi += 1 
    Else 
     s2_texts = Split(s1_texts(numi), ",") 
     Do Until numj = s2_texts.Length - 1 
      If s2_texts(numj) = "" Then 
       numj += 1 
      Else 
       s3_texts = Split(s2_texts(numj), "=") 
       Do Until numk = s3_texts.Length - 1 
        TextBox4.Text = TextBox4.Text & s3_texts(numk) & vbCrLf 
        numk += 1 
       Loop 
       numj += 1 
      End If 
     Loop 
     numi += 1 
    End If 
Loop 

而且我想TextBox4顯示:

X

Y

X

Ÿ

.......

但我只得到:

X

X

X

...

問題出在哪裏?

+0

看到我的答案找一下你的代碼錯誤以及如何糾正他們 –

回答

0

,如果我想不會改變你的代碼,但只調整其錯誤,這就是我的回答:

當您使用Do Until x = N和你增加x在結束循環中,x的最後一個值不會通過您在循環開始時指定的條件,因此不會執行。

你的循環有一個錯誤:你的結束條件沒有被正確指定(.... Length - 1比最後一個項目少一個,因爲)。在開始內循環時,numjnumk計數器也應重置爲零。

修改代碼如下:

s1_texts = Split(p_text, "}{") 
Dim numi As Integer = 0 
Dim numj As Integer = 0 
Dim numk As Integer = 0 

Do Until numi = s1_texts.Length '- 1 => *** removed! 
    If s1_texts(numi) = "" Then 
     numi += 1 
    Else 
     s2_texts = Split(s1_texts(numi), ",") 
     numj = 0 '*** reset counter to 0 
     Do Until numj = s2_texts.Length '- 1 => *** removed! 
      If s2_texts(numj) = "" Then 
       numj += 1 
      Else 
       s3_texts = Split(s2_texts(numj), "=") 
       numk = 0 '*** reset counter to 0 
       Do Until numk = s3_texts.Length '- 1 => *** removed! 
        TextBox4.Text = TextBox4.Text & s3_texts(numk) & vbCrLf 
        numk += 1 
       Loop 
       numj += 1 
      End If 
     Loop 
     numi += 1 
    End If 
Loop 

,它會產生你想要什麼。

但是如果你使用For-Next循環,它可能是更容易:

s1_texts = Split(p_text, "}{") 
Dim numi, numj, numk As Integer 

For numi = 0 To s1_texts.Length - 1 
    If s1_texts(numi) <> "" Then 
     s2_texts = Split(s1_texts(numi), ",") 
     For numj = 0 To s2_texts.Length - 1 
      If s2_texts(numj) <> "" Then 
       s3_texts = Split(s2_texts(numj), "=") 
       For numk = 0 To s3_texts.Length - 1 
        TextBox4.Text = TextBox4.Text & s3_texts(numk) & vbCrLf 
       Next 'numk 
      End If 
     Next 'numj 
    End If 
Next 'numi 

注:這裏我們應該使用... .Length - 1爲條件。

0

(雖然沒有直接解決環路問題)

這可能會有幫助。 Split()函數可以接受多個字符。因此,你可以簡單地做:

Sub Main() 

    ' Original string 
    Dim p_text = "}{X=45,Y=65}{X=59,Y=65}{X=59,Y=79}{X=45,Y=79}{" 

    ' String array split 
    Dim p_text_new = p_text.Split("}"c, "{"c, "="c, ","c) 

    ' Iterate through each string in array 
    For Each p In p_text_new 

     ' Check to ensure you don't print empty spaces 
     If Not String.IsNullOrWhiteSpace(p) Then 
      Console.WriteLine(p) ' p is the value you want.... 
     End If 

    Next 

End Sub 
+0

非常感謝。它做了我的工作:-) – nsssayom

+0

注意:但是這不會檢查'} {'字符的序列...因爲原始代碼有一些類型的驗證(雖然它不是完整的驗證,但在某種程度上) –

1

或者你也可以更換新線所有非字母數字字符:

TextBox4.Text = Regex.Replace(p_text, "\W+", vbNewLine).Trim