如何从c#中的文本文件中的一行中获得下面的10行
本文关键字:一行 10行 文本 文件 | 更新日期: 2023-09-27 18:22:50
我正在读取一个巨大的文本文件,如下所示。现在想要的是,如果我到达一个特定的单词,比如这里的test:
,我会将该行的值推入数据库,其中一个值是通过连接后面10行的值来获得的。因此,我想获得10个后续行,并使用File. Readalllines
或任何其他机制将其存储到内存中。我该怎么做呢?到目前为止,我正在将整个文本文件加载到File.Readalllines
中,这使得应用程序非常缓慢。
using (FileStream fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
string s = String.Empty;
while ((s = sr.ReadLine()) != null)
{
if (s.Contains("test:"))
{
//
}
}
}
编辑我在研究支出者的答案,这里有一个转折点,假设我有10000行以test:
开头,每行都有ID
,我插入的行基于一个ID,就像字典中存储的ID一样,那么我必须存储后面的10行,而不是总是存储前10行,那么怎么做呢?
编辑@花钱的人我做得像SkipWhile(line => (!line.Contains("ADD GTRX:") && !line.Contains(dict.CellId.ToString()))).Take(10);
,但一点运气都没有
编辑@spender最后我做了,我必须移动括号,所以完整的代码如下所示,我删除了空行也
var linesOfInterest = File.ReadLines(filename)
.SkipWhile(line => !line.Contains("test:")).SkipWhile(line => !line.Contains(dictId.ToString())).Take(10);
var output = string.Join(Environment.NewLine, linesOfInterest).Trim().Split(';').Where(arg => !string.IsNullOrWhiteSpace(arg)).ToArray();
你很棒,度过美好的一天
File.ReadLines
是您的朋友。它为您提供了一个IEnumerable<string>
,它可以延迟地将文本文件中的行交回(即,该文件从未完全加载到内存中)。从那里你可以很好地把它整理好。
var linesOfInterest = File.ReadLines(filePath)
.SkipWhile(line => !line.Contains(searchTerm))
.Take(10);
var output = string.Join(Environment.NewLine, linesOfInterest);