我正在开发一个ASP mvc应用程序,并且当前一行包含一个单词时,我试图获取所有下一行
我已经使用了下面的代码,但我可以获得包含给定单词的最后一行
int counter = 0;
string line;
List<string> found = new List<string>();
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("C:\\Users\\Chaimaa\\Documents\\path.txt");
while ((line = file.ReadLine()) != null)
{
if (line.Contains("fact"))
{
found.Add(line);
}
foreach (var i in found)
{
var output = i;
ViewBag.highlightedText = output;
}
}
有关我应该添加的内容的任何帮助 1-获取包含该单词的所有行 2-并且最好得到所有NEXT行
答案 0 :(得分:1)
您可以使用提供索引的Where
重载,在哈希集中存储索引,并使用包含检查来决定是否应该保留一行,如下所示:
var seen = new HashSet<int>();
var res = data.Where((v, i) => {
if (v.Contains("fact")) {
seen.Add(i);
}
return seen.Contains(i-1);
});
作为附带好处,seen
将包含已找到单词"fact"
的所有行的索引。
答案 1 :(得分:0)
您可以编写一个PairWise
方法,该方法接受一系列值并返回一个序列,其中包含与之前项目配对的每个项目:
public static IEnumerable<Tuple<T, T>> Pairwise<T>(this IEnumerable<T> source)
{
using (var iterator = source.GetEnumerator())
{
if (!iterator.MoveNext())
yield break;
T prev = iterator.Current;
while (iterator.MoveNext())
{
yield return Tuple.Create(prev, iterator.Current);
prev = iterator.Current;
}
}
}
使用这种方法,我们可以配对每一行,得到前一个值包含一个单词的行,然后计算出第二个值,即后面的行:
var query = lines.Pairwise()
.Where(pair => pair.Item1.Contains(word))
.Select(pair => pair.Item2);