有没有办法计算文本文件中特定行/字符串之前的行数。 例如:
1
2
3
4
5
6
7
8
9
说我想计算'8'之前的线数...... 我该怎么做?
谢谢!
答案 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,适用于在将内容写回文件之前需要删除和/或插入内容的情况。