2016-09-06 49 views
0

我成功地使用這個代碼從該行的文本我要找:查找字符串行號同時進行定位線VB

Dim lines = all_prices.Split({vbCrLf}, StringSplitOptions.None) 
Dim match = lines.FirstOrDefault(Function(x) x.EndsWith("1820160831")) 

的樣本數據是:

10|100|1820160830 
20|200|1820160831 
30|300|1820160901 

目前的結果是:

20|200|1820160831 

我想要追加到找到的行號,找到它的行號,例如:

20|200|1820160831-2 

編輯

我試過這個解決方案:

indexOfText = Array.FindIndex(lines, Function(str) str.IndexOf("1820160831", StringComparison.InvariantCultureIgnoreCase) >= 0) 

但結果始終是-1

回答

2

試試這個,返回第一個匹配的索引並追加索引到字符串...

Dim all_prices As String = "10|100|1820160830" & vbCrLf & "20|200|1820160831" & vbCrLf & "30|300|1820160901" 
Dim lines() As String = all_prices.Split(New String() {Environment.NewLine}, StringSplitOptions.None) 
Dim i As Integer = Enumerable.Range(0, lines.Count).Where(Function(x) lines(x).EndsWith("1820160831")).First 
lines(i) = lines(i) & "-" & i.ToString 

「(我+ 1)的ToString」在最後一行,而不是「我」,如果你想線路numbe r而不是索引

1

首先,我會檢查,看看你的斯普利特()函數通過獲取返回的行數來正常工作:

MsgBox(lines.Length) 

雖然我不認爲它正在工作,因爲這不是正確的方式來使用換行與換行符。試試這個:

Dim lines As String() = all_prices.Split(new String() {Environment.NewLine}, 
            StringSplitOptions.None) 

這應該給你你需要搜索的陣列。

編輯

要得到行號,你可以試試這個:

Dim lineNo as Integer 
lineNo = -1 // Set to a value that reflects no match if there is none 
For i As Integer = 0 To lines.GetUpperBound(0) 
    If lines(i).EndsWith("1820160831") = true then 
     lineNo = i 
     match += "-" & (i + 1) 
     Exit For 
    End If 
Next 
MsgBox(lineNo) 
+0

fwiw,'match'返回正確的行數據,但代碼並不顯示行號是什麼。所以搜索陣列看起來不錯。我正在尋找代碼片斷來告訴我線#是什麼。 – user6096423

+0

我修改了我的答案,包含了你正在談論的一些代碼。祝你好運! –

2
Dim lines = all_prices.Split({vbCrLf}, StringSplitOptions.None) 
Dim match = lines.FirstOrDefault(Function(x) x.EndsWith("1820160831")) 

For i As Integer = 0 To lines.GetUpperBound(0) 
Dim matches As Boolean = lines(i).EndsWith("1820160831") 
    If matches Then 
     match += "-" & (i + 1) 
     Exit For 
    End If 
Next 
相關問題