如何从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();

你很棒,度过美好的一天

如何从c#中的文本文件中的一行中获得下面的10行

File.ReadLines是您的朋友。它为您提供了一个IEnumerable<string>,它可以延迟地将文本文件中的行交回(即,该文件从未完全加载到内存中)。从那里你可以很好地把它整理好。

var linesOfInterest = File.ReadLines(filePath)
                          .SkipWhile(line => !line.Contains(searchTerm))
                          .Take(10);
var output = string.Join(Environment.NewLine, linesOfInterest);