2016-09-03 29 views
-2

我卡在這裏。花了幾個小時嘗試許多不同的方法,但沒有什麼工作解析下一個循環的數組Visual Basic

我保存的文字,看起來像這樣

4456|4450|17 
4466|4430|18 
4446|4420|19 
4436|4410|20 

分隔符是異食癖(「|」)的數組。

我想要做的是通過數組運行並提取單獨字符串中的前兩列來比較值,尋找最大值和最小值。

我想,像這樣

4456,4466,4446,4436 

這裏一個字符串,最終是解決方案:

   Dim source As String = prices 
       Dim stringSeparators() As String = {vbCrLf} 
       Dim result() As String 
       result = source.Split(stringSeparators, 
        StringSplitOptions.RemoveEmptyEntries) 

       Dim fString As String = String.Join(Of String)(", ", result.Cast(Of String).Select(Of String)(Function(x) x.Split("|")(0))) 

        MsgBox(fString) 
+0

你顯示的例子和你當前的輸出沒有加起來。要麼你的數組錯了,要麼你得到了錯誤的值。例如,第一個數組應爲4456 | 4450 | 17或4456,4466,4446,4436。同時顯示如何填充此數組。我可以幫忙,但你可能會把這些寫錯,我也可以解釋。很可能你會想要一個列表來保存你的字符串...... – Codexer

+0

不知道如何在這裏發佈一個屏幕截圖,但數組是完全一樣的,我顯示它。出於某種原因,For Next循環會分別解析每個字符。我不知道爲什麼 – user6096423

+0

什麼是highs1?你確定它也是一個數組嗎? – Codexer

回答

2

讓我們以下面的例子...

4456|4450|17 
4466|4430|18 
4446|4420|19 
4436|4410|20 

prices = [the array shown above] 
       For Each i As String In prices 
        high = (i.Split("|"))(0) 
        highs = highs & highs1 & "," 

        MsgBox(highs) 
       Next 

的你得到的原因是4,4,5,6,,4,4,5,0,,1,7是因爲對於每個字符串你分裂在|然後以第一個字符爲其添加逗號。

如果你想要得到任何你想要的,你通過數組中的每個字符串需要循環的|之前調用它,並選擇了值的第一列或索引...

'this is my test array... 
Dim arr As New ArrayList From {"4456|4450|17", "4466|4430|18", "4446|4420|19", "4436|4410|20"} 

現在我們可以使用String.Join函數,將每個項目的數組轉換爲字符串,最後選擇分割中的第一個項目。這將獲得|之前的每個項目,並將它們放在一個用逗號分隔的字符串中。

Dim fString As String = String.Join(Of String)(", ", arr.Cast(Of String).Select(Of String)(Function(x) x.Split("|")(0))) 

如果你想在第二部分中選擇第一個指數作爲數組從0開始...

Dim sString As String = String.Join(Of String)(", ", arr.Cast(Of String).Select(Of String)(Function(x) x.Split("|")(1))) 

這裏是我的輸出的屏幕截圖...

enter image description here