【发布时间】:2015-08-13 02:32:46
【问题描述】:
有没有办法计算文本文件中特定行/字符串之前的行数。 例如:
1
2
3
4
5
6
7
8
9
假设我想计算'8'之前的行数...... 我该怎么做?
谢谢!
【问题讨论】:
-
你已经尝试过什么?任何代码示例?收到的输出是什么?预期什么?
标签: vb.net file text count lines
有没有办法计算文本文件中特定行/字符串之前的行数。 例如:
1
2
3
4
5
6
7
8
9
假设我想计算'8'之前的行数...... 我该怎么做?
谢谢!
【问题讨论】:
标签: vb.net file text count lines
希望这实际上是您正在寻找的,
它将从指定的文件中读取所有行。然后找到 IndexOf 特定行(searchText),然后将1 添加到它将为您提供所需的计数,因为index is0based.
Dim lines = File.ReadAllLines("f:\sample.txt")
Dim searchText As String = "8"
msgbox(Array.IndexOf(lines, searchText) + 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。
例如,包含“魔法”的一行:
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")
你懂的……
使用列表而不是数组非常适合需要在将行写回文件之前删除和/或插入内容的情况。
【讨论】: