在指定的文本文件字符串之前计算行数?在VB中

时间:2015-08-13 02:32:46

标签: vb.net file text count lines

有没有办法计算文本文件中特定行/字符串之前的行数。 例如:

1

2

3

4

5

6

7

8

9

说我想计算'8'之前的线数...... 我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:2)

希望这实际上是你在寻找, 它将读取指定文件中的所有行。然后找到IndexOf特定行(searchText)然后添加1将为您提供自index is 0 based.

以来所需的计数
    Dim lines = File.ReadAllLines("f:\sample.txt")
    Dim searchText As String = "8"
    msgbox(Array.IndexOf(lines, searchText) + 1)

答案 1 :(得分:1)

这是另一个使用List.FindIndex()的示例,它允许您传入Predicate(T)来定义如何进行匹配:

    Dim fileName As String = "C:\Users\mikes\Documents\SomeFile.txt"
    Dim lines As New List(Of String)(File.ReadAllLines(fileName))
    Dim index As Integer = lines.FindIndex(Function(x) x.Equals("8"))
    MessageBox.Show(index)

在上面的示例中,我们正在寻找与" 8"的完全匹配,但您可以在更复杂的情况下使谓词匹配任何您喜欢的内容。只需使函数(谓词)返回True即可获得匹配。

例如,包含" magic":

的行
    Function(x) x.ToLower().Contains("magic")

或以" FirstStep":

开头的行
    Function(x) x.StartsWith("FirstStep")

谓词不一定是一个简单的字符串函数,它可以像你喜欢的那样复杂。这是一个会找到以" UnicornFarts"结尾的字符串,但仅在周三,如果记事本当前处于打开状态:

    Function(x) DateTime.Today.DayOfWeek = DayOfWeek.Wednesday AndAlso Process.GetProcessesByName("notepad").Length > 0 AndAlso x.EndsWith("UnicornFarts")

你明白了......

使用List而不是Array,适用于在将内容写回文件之前需要删除和/或插入内容的情况。