在VB中查找行同时查找字符串行号

时间:2016-09-06 23:32:35

标签: vb.net visual-studio-2015

我成功使用此代码从我正在寻找的行中获取文本:

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

3 个答案:

答案 0 :(得分: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 

"第(i + 1)的ToString"在最后一行而不是"我"如果你想要行号而不是索引

答案 1 :(得分: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

答案 2 :(得分:1)

首先,我会通过获取它返回的总行数来检查你的Split()函数是否正常工作:

    //func from extension
    let newSize = mainImage.frameForImageInImageViewAspectFit()

    let newHeight = CGRectGetHeight(newSize)
    let newWidth = CGRectGetWidth(newSize)

    mainImage.frame.size.height = newHeight
    mainImage.frame.size.width = newWidth

我认为它不起作用,因为这不是使用换行符使用Split的正确方法。试试这个:

MsgBox(lines.Length)

这应该会为您提供搜索所需的数组。

<强> 修改

要获取行号,您可以尝试:

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